解析/分词包含SQL命令的字符串

6 投票
1 回答
1502 浏览
提问于 2025-04-15 20:23

有没有开源的库(任何语言都可以,最好是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语言代码。

撰写回答