【发布时间】:2013-02-21 13:12:01
【问题描述】:
我正在寻找一个 C/C++ SQL 解析库,它能够为我提供查询所依赖的表的名称。
我的期望:
SELECT * FROM TABLEA NATURAL JOIN TABLEB
结果:TABLEA、TABLEB
当然提供的示例非常简单。我已经编写了自己的解析器(基于 Boost.Spirit)来处理 SQL 语法的子集,但我需要的是能够处理复杂(递归等)查询的解析器。
你知道什么有用的吗?
我找到的是http://www.sqlparser.com - 它是商业的,但正是我需要的。 我还深入研究了 PostgreSQL 源码,没有任何效果。
【问题讨论】:
-
很抱歉跑题了,但是……为什么?
-
您可以使用 lexxer 和 yaccer 的组合来执行此操作,我知道您可以在网上找到完整的语法定义,但它们并非都是最新的......无论如何我也搜索了很多可以做到这一点的东西,并最终编写了我自己的解析器,它实际上可以跳过语法的未定义部分,但仍然很难让它处理复杂的查询......
-
@vines - 我正在编写一个中间件库,它透明地将查询结果缓存在 Memcached、Redis 或本地 RAM 中(取决于配置)。目前,无论是否有意义,这只是一项学术研究。我正在使用 SOCI 库进行测试(soci.sourceforge.net,我已经实现了自己的后端)。也许我也会实现一些 JDBCv2 驱动程序。
-
@ppetrov - 感谢您的回复,不幸的是,我知道编写功能齐全的解析器需要相当多的时间和精力。这就是为什么我现在正在寻找可用的东西。