我正在寻找一种在Node.js应用程序中解析/标记SQL语句的方法,以便:
您有任何解决方案或建议偷看吗?
已关联:Any Javascript/Jquery Library To validate SQL statment?
我已完成研究,并找到了一些方法:
使用现有的node.js库
我做了一个Google search,但我没有找到一个可以同意使用的热门图书馆。我发现了那些:
不幸的是,这些库中没有一个是完整和可靠的。
基于node.js低级令牌化程序库
自行完成我可以使用低级标记器库来实现自己:
根据现有的Javascript代码美化
自行完成CodeMirror是一个非常酷的Javascript库(浏览器端),可以识别SQL关键字,字符串等。请检查demo。
我可以基于CodeMirror构建一个node.js库标记生成器。 SQL mode is here on github,我可以调整它以在节点应用程序中获取令牌。
PS:CodeMirror在github上有5,046颗星,维护得很好。
我发现存在两个不同的问题:标记化和语法验证(与标记化有关)。
我根据优秀SQL mode的CodeMirror(github上的5,046颗星,维护得很好)为Node.js做了一个 SQL tokenizer 。 CodeMirror的SQL模式负责"泛型" SQL和一些SQL特性,如MSSQL,MySQL,PL/SQL,Cassandra,Hive和MariaDB。
当我的项目足够成熟时,我(可能)会在GitHub上公开并让你知道。
关于 SQL语法验证,我发现没有JavaScript工具(或者在JS中适应的开源项目)......
答案 0 :(得分:0)
你没有提到哪个SQL,但大多数生产SQL语言都很庞大(检查PL / SQL忽略了Ada部分),复杂而且不一样所以你不得不担心方言变种也是。您正在构建一个完整的SQL前端来完成您想要的任务;您找到的其他解析器的不完整性暗示了执行此操作所需的工作量。
在您将解析器部分正确后,您必须先做符号表并键入分析(每个符号的含义),然后才能开始查找SQL查询读取或写入(考虑确定SELECT *从......读取的列。)。
我知道那里有商业SQL解析器。您可以考虑使用其中之一。
答案 1 :(得分:0)
如果你想开发自己的SQL解析器,我会推荐一个PEG设计解析器。我已经将PEG解析器用于编译到js / compile-to-c语言,并且它产生了一个非常清晰且易于维护的代码。检查:https://github.com/luciotato/LiteScript
如果出现以下情况,您可以从LiteScript解析器开始:a)此解析器是应用程序的重要部分,b)最终您需要进行native-exe-speed解析。
但是,如果这不是您正在开发的应用程序的重要部分,那么为现有的特定SQL解析器做出贡献可能是最佳选择。
答案 2 :(得分:0)
您可以查看SQLite/WebSQL JavaScript parser和Jison grammar file,它们可用于验证工具。
现在它支持完整的SQLite / WebSQL语法,并且可以针对其他SQL语法进行修改。
答案 3 :(得分:0)
我最近发布了sql-ast
程序包,该程序包解析SQL脚本并返回AST节点数组。 (我找不到所维护的类似内容)
目前非常受限制。我只是实现了我需要的东西。如果有时间,请请贡献。我已经尽力使代码库易于理解。
如果您有兴趣看到它进一步发展,请给它一颗星。随着库的改进,我将更新此答案。