解析/标记包含SQL命令的字符串

时间:2010-03-13 19:04:08

标签: php python sql parsing tokenize

是否有任何开源库(任何语言,python / PHP首选)将ANSI 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命令分开,以便引擎知道如何处理它。搜索互联网会产生很多关于如何使用SQL解析字符串的结果。那不是我想要的。

我意识到我可以浏览一个开源数据库的代码来找到我想要的东西,但我希望能够做一些更准备的东西,(尽管如果你知道MySQL中的 where ,PostgreSQL ,查看SQLite源代码,随意传递它)

谢谢!

1 个答案:

答案 0 :(得分:2)

SQLite源有一个名为parse.y的文件,其中包含SQL的语法。您可以将该文件传递给lemon parser generator以生成执行语法的C代码。