如何parsing/标记Node.js中的SQL语句
我正在寻找一种方法来parsing/标记化Node.js应用程序中的SQL语句,以便:
- 标记所有在ISO / IEC 9075标准或这里定义的“基本”SQL关键字。
- validationSQL语法。
- 找出查询要做什么(例如读或写?)。
你有任何解决scheme或build议偷看?
链接: 任何Javascript / Jquery库validationSQL的声明?
我做了研究,并find了一些方法来做到这一点:
使用现有的node.js库
我做了一个谷歌search ,我没有find一个合意和stream行的图书馆使用。 我发现那些:
- simple-sql-parser ( github上22星,每天下载16个npm )
- 仅支持SELECT,INSERT,UPDATE和DELETE
- 路上有一个v2分支
- sql-parser ( github上的90颗星, npm上每天下载6颗)
- 只支持基本的SELECT语句
- 基于jison
- sqljs ( github上有17颗星, npm每天下载5颗)
- v0.0.0-3,正在开发中…完全没有文档:)
不幸的是,这些图书馆中没有一个是完全可信的。
基于node.js低级标记器库自己做
我可以用一个低级的tokenizer库来做到这一点,比如:
- jison ( github上的1,457颗星, npm上每天下载240颗星)
- tokenizer ( github上的44颗星, npm上每天下载10次)
基于现有的Javascript代码美化器自己做
CodeMirror是一个很酷的Javascript库(浏览器端),可以识别SQL关键字,string等。检查演示 。
我可以构build一个基于CodeMirror的node.js库标记器。 SQL模式在github上 ,我可以调整它来获取节点应用程序中的令牌。
PS: CodeMirror在github上有5046颗星,维护得很好。
祝你好运。
你没有提到哪个SQL,但是大多数生产SQL语言是巨大的(检查PL / SQL忽略了Ada部分),复杂和不一样,所以你也不必担心方言变体。 你正在构build一个完整的SQL前端来做你想做的事情; 你发现的其他parsing器的不完整性暗示了这样做的努力程度。
parsing器部分正确之后,在开始查找SQL查询读取或写入操作之前,您必须执行符号表和types分析(每个符号的含义)(请考虑确定SELECT *所读取的列..)。
我知道那里有商业SQLparsing器。 你可能会考虑使用其中的一个。
如果你想开发你自己的SQLparsing器,我会推荐一个PEGdeviseparsing器。 我已经使用了一个PEGparsing器来编译成js / compile-to-c语言,并且导致了一个非常简单明了的代码。 检查: https : //github.com/luciotato/LiteScript
如果出现以下情况,您可以从LiteScriptparsing器开始:a)parsing器是您的应用程序的重要组成部分,b)最终您需要native-exe-speedparsing。
但是,如果这不是正在开发的应用程序的重要组成部分,那么对现有特定的SQLparsing器做出贡献可能是最好的select。
您可以查看SQLite / WebSQL JavaScriptparsing器和Jison 语法文件 ,该文件可用于validation工具。
现在它支持完整的SQLite / WebSQL语法,可以修改其他SQL语法。
我发现有两个不同的问题:Tokenization和Syntaxvalidation(与标记相关)。
我根据优秀的CodeMirror的SQL模式 (github上的5046颗星,维护良好)为Node.js创build了一个SQL tokenizer 。 CodeMirror的SQL模式负责“通用”SQL和一些SQL特性,如MSSQL , MySQL , PL / SQL , Cassandra ,Hive和MariaDB 。
当我的项目足够成熟时,我将(可能)在GitHub上公开并让你知道。
关于SQL语法validation,我没有findJavaScript工具(或者在JS中适应的开源项目)。