SQL解析器库-从查询中获取表名

SQL parser library - get table names from query

本文关键字:查询 获取 SQL      更新时间:2023-10-16

我正在寻找一个C/C++SQL解析库,它能够为我提供查询所依赖的表的名称。

我的期望:

    SELECT * FROM TABLEA NATURAL JOIN TABLEB

结果:片剂A、片剂B

当然,提供的例子非常简单。我已经编写了自己的解析器(基于BoostSpirit),它处理SQL语法的一个子集,但我需要的是一个能够处理复杂(递归等)查询的解析器。

你知道有什么有用的吗?

我发现http://www.sqlparser.com-这是商业广告,但正是我所需要的。我还挖掘了PostgreSQL的源代码,没有效果。

Antlr可以为您生成一个不错的SQL解析器(解析器的源代码可以是C++),而且它的SQL语法很少:http://www.antlr3.org/grammar/list.html

如果您感兴趣的只是表名,那么采用其中一种语法并添加收集这些名称的语义操作应该相当容易。

对Antlr和Bison/Yacc&Lex/Flex我绝对推荐Antlr。它是用Java编写的,但目标语言可以是C++——生成的代码实际上是可读的,看起来像是由人类编写的。Antlr生成的解析器的调试是可以的,这不能说是Bison生成的。。

还有其他选项,比如Lemon和sqlite语法,如果你喜欢的话,可以看看这个问题:C 中的SQL解析器