SQL解析器库-从查询中获取表名
SQL parser library - get table names from query
我正在寻找一个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解析器
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 查询事件日志.如何查询才能单独获取第一个和最后一个事件?
- 如何在 sql 查询中获取 soci::rowset<std::string>
- 如何从 Oracle 数据库中获取 qt 中 SQL 查询的传输字节大小?
- 从更新查询获取'Cannot insert duplicate key'
- WIC - Exif 元数据查询 - 如何获取图像说明
- 如何查询简单机器论坛以获取主题受欢迎程度/评级
- 获取与地图中查询相匹配的所有键
- SQLite3 C/C++,获取聚合查询中涉及的表名
- 获取在同一查询中创建的行的唯一 ID
- 如何使用 IloCplex::readSolution() 和查询 cplex 类实例后获取变量值和其他值
- 查询 WMI 以获取D3DKMDT_VIDEO_OUTPUT_TECHNOLOGY
- MySQL C++连接器使用SELECT查询获取字符串
- 正在获取生成的无需第二个查询的自动增量ID(MySQL)
- 是否可以使用查询性能计数器(Win32,C)获取时间戳
- MysqlC++驱动程序-创建后获取准备好的语句查询
- 不使用MongoDB中的count()函数,通过游标获取给定查询的结果个数
- 获取c++中WMI查询的行数
- SQL解析器库-从查询中获取表名
- 如何使用QsqlQuery获取最后准备和执行的查询