Разбор / токенизация строки, содержащей команду SQL - PullRequest
6 голосов
/ 13 марта 2010

Существуют ли какие-либо библиотеки с открытым исходным кодом (любой язык, предпочтительно python / PHP), которые будут разбивать / анализировать строку SQL ANSI в ее различных компонентах?

То есть, если бы у меня была следующая строка

 SELECT a.foo, b.baz, a.bar
 FROM TABLE_A a
 LEFT JOIN TABLE_B b
 ON a.id = b.id
 WHERE baz = 'snafu';

Я бы вернул структуру данных / объект, похожий на

 //fake PHPish 
 $results['select-columns']  = Array[a.foo,b.baz,a.bar];
 $results['tables']    = Array[TABLE_A,TABLE_B];
 $results['table-aliases'] = Array[a=>TABLE_A, b=>TABLE_B];
 //etc...

Повторно, я ищу код в пакете базы данных, который дразнит команду SQL, чтобы механизм знал, что с ней делать. Поиск в Интернете приводит к большому количеству результатов о том, как анализировать строку с помощью SQL. Это не то, что я хочу.

Я понимаю, что могу пролистать код базы данных с открытым исходным кодом, чтобы найти то, что хочу, но я надеялся на что-то более готовое (хотя, если вы знаете , где в MySQL, PostgreSQL, SQLite источник, чтобы посмотреть, не стесняйтесь передать его)

Спасибо!

1 Ответ

2 голосов
/ 13 марта 2010

Источник SQLite содержит файл с именем parse.y, который содержит грамматику для SQL. Вы можете передать этот файл в генератор анализатора лимона , чтобы сгенерировать код C, который выполняет грамматику.

...