2010-03-13 2 views
6

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

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

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 отдельно, чтобы движок знал, что с ним делать. Поиск в Интернете приводит к большим результатам о том, как разбирать строку WITH SQL. Я этого не хочу.

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

Спасибо!

+0

http://stackoverflow.com/questions/1394998/parsing-sql-with-python – bernie

ответ

2

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

+0

Я не могу найти файл 'parse.y' в исходном коде, со ссылкой на него? –

Смежные вопросы