解析/分词包含SQL命令的字符串
有没有开源的库(任何语言都可以,最好是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、PostgreSQL或SQLite的源代码中该去哪里找,也请告诉我)
谢谢!
1 个回答
2
SQLite的源代码里有一个叫做 parse.y
的文件,这个文件里面写着SQL的语法规则。你可以把这个文件交给一个叫做lemon解析器生成器的工具,它会帮你生成可以执行这些语法规则的C语言代码。