我想在C中解析和存储SQL DML(INSERT,UPDATE,DELETE)语句的列和值。需要开源代码的URL或我可以链接我的C程序的库。该平台是SUSE Linux。试图制作和使用libSQL失败。详细的答案表示赞赏。感谢。
附加说明:请建议我可以与我的C程序链接的库/代码。在我的程序中,我想使用这个库的函数来解析和使用令牌进行进一步处理。
答案 0 :(得分:10)
您可以查看SQLite的源代码。它使用名为Lemon的解析器。
链接:
您还可以查看postgresql-plpython3的源代码。看起来它有一个纯粹的基于C的SQL解析器。
链接:
答案 1 :(得分:4)
我建议从真正的DBMS的真正解析器开始。自由软件中有几种。例如,PostgreSQL的解析器位于发行版的src/backend/parser
目录中,并使用C和Yacc编写。
答案 2 :(得分:1)
请参阅Google图书中的“Lex& Yacc”(O'Reilly)中的“解析SQL ”一章http://books.google.fr/books?id=YrzpxNYegEkC&lpg=PT1&dq=bison%20flex%20sql%20grammar&client=firefox-a&hl=en&pg=PA109
答案 3 :(得分:1)
你看过SQLite了吗?它肯定有解析SQL的代码,所以也许你可以避免重新实现它..
答案 4 :(得分:1)
ANTLR可以target C和其他语言一样,catalog of premade grammars有一堆SQL方言 - 特别是MySQL和Oracle。
答案 5 :(得分:0)
不确定是否有任何成熟的C sql解析器可以轻松完成。
这是一个Java版本的SQL库可以完全满足您的需求,它可以轻松地从复杂的SQL查询中用于Retrieve/Refactor table & column name。
答案 6 :(得分:0)
什么是μSQL?
μSQL是C ++的SQL解析器引擎,用于开发基于SQL的应用程序 很容易,它支持其他SQL,如领域特定的语言,如 作为UnQL和GQL也是如此。因为μSQL只是用旧的标准C ++编写的 库如STL和ANTLR,那么你可以使用它与许多C ++ 编译器和平台。
答案 7 :(得分:0)
Hyrise数据库系统的独立SQL parser是开源的,即使它是用C ++编写的,也可以从C中进行访问,并且易于理解和修改。它利用野牛和弯曲。
答案 8 :(得分:-3)
您是否考虑过使用lex和yacc编写自己的文件? (黑客 - 硬核方法)
不是微不足道的......但是this site可能会帮助你开始