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

Ala*_*orm 6 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';
Run Code Online (Sandbox Code Playgroud)

我会找回类似的数据结构/对象

 //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...
Run Code Online (Sandbox Code Playgroud)

重申一下,我正在寻找数据库包中的代码,它将SQL命令分开,以便引擎知道如何处理它.搜索互联网会产生很多关于如何使用SQL解析字符串的结果.那不是我想要的.

我意识到我可以浏览一个开源数据库的代码来找到我想要的东西,但我希望能做一些更准备好的东西,(虽然如果你知道在MySQL,PostgreSQL,SQLite源代码的哪个地方,请随意通过它一起)

谢谢!

ard*_*srk 2

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