如何在Node.js中解析/标记化SQL语句

Yve*_* M. 18 sql parsing tokenize node.js sql-parser

我正在寻找一种在Node.js应用程序中解析/标记SQL语句的方法,以便:

  • ISO/IEC 9075标准或此处定义的所有"基础"SQL关键字进行标记.
  • 验证SQL语法.
  • 找出查询将要做什么(例如读或写?).

你有任何解决方案或建议偷看?

链接:任何Javascript/Jquery库验证SQL语句?


我做过研究,发现了一些方法:

使用现有的node.js库

我进行了谷歌搜索,但没有找到一个可以使用的自愿和流行的图书馆.我找到了那些:

不幸的是,这些库中没有一个是完整和可靠的.

基于node.js低级标记化库自己完成

我可以使用低级标记器库来完成自己的工作,例如:

基于现有的Javascript代码美化自己做

CodeMirror是一个非常酷的Javascript库(浏览器端),可以识别SQL关键字,字符串等.检查演示.

我可以基于CodeMirror构建一个node.js库标记器.在SQL模式是这里github上,我也许可以适应它到节点的应用程序中获得令牌.

PS:CodeMirrorgithub上有5,046颗星,维护得很好.


我发现存在2个不同的问题:标记化和语法验证(与标记化有关).

我根据优秀的CodeMirrorSQL模式(github上的5,046颗星,维护得很好)使自己成为Node.js 的SQL标记器.CodeMirror的SQL模式负责"通用"SQL和一些SQL特性,如MSSQL,MySQL,PL/SQL,Cassandra,Hive和MariaDB.

当我的项目足够成熟时,我(可能)会在GitHub上公开并让你知道.

关于SQL语法验证,我发现没有JavaScript工具(或者在JS中适应的开源项目)......

Ira*_*ter 0

祝你好运。

您没有提到哪种 SQL,但大多数生产 SQL 语言都很庞大(查看 PL/SQL,忽略 Ada 部分)、复杂且不一样,因此您还必须担心方言变体。您面临着构建一个完整的 SQL 前端来完成您想做的事情;您发现的其他解析器的不完整性暗示了执行此操作所需的工作量。

正确理解解析器部分后,您必须先进行符号表和类型分析(每个符号的含义),然后才能开始找出 SQL 查询读取或写入的内容(考虑确定 SELECT * from 读取的列) .. ...)。

据我所知,有商业 SQL 解析器。您可以考虑使用其中之一。

  • 我强烈建议为现有工具之一做出贡献,而不是从头开始。另外,您并没有真正说明为什么需要这个。Sequelize 或其他节点 orm 可以完成您需要的工作吗? (2认同)
  • 为什么不让 DBMS 来完成这项工作呢?Mysql-Explain 即使对于子查询和 vor postgres 也会进行语法检查,似乎是这样的:https://github.com/markdrago/pgsanity。除此之外:只需使用“grep”进行更新、删除、插入、删除,您的命中率可能会达到 99%。 (2认同)