问题标签 [sql-parser]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
789 浏览

java - 如何使用 Java 对 SQL 查询的评估顺序进行编码?

我正在尝试使用 JSQLParser 开发一个 SQL 查询评估器,我真的很困惑如何决定评估顺序,比如如果我有以下形式的查询

问题是如何从中构建解析树或表达式树。我需要一些指针来解决这个问题。另外补充一点,我正在考虑使用几个堆栈来解决这个问题,即一个运算符堆栈和一个操作数堆栈。我需要确认这是否是理解这个问题的一种可能方式?

0 投票
1 回答
566 浏览

sql - 如何将android sqlite查询解析为java

我有很多作为输入的 android sqlite 查询。我必须将它们解析为 java,从向量中搜索并返回结果。我该如何处理?

有没有像 JSqlParser、SQL 解析器、JoSQL for android sqlite 这样的插件?

0 投票
1 回答
739 浏览

sql - 获取使用 SELECT 查询选择的表名和列

我有一个要求,我有以下形式的查询:

我想从中得到三件事:

如果可能的话,我也想获取所选列的数据类型。

我知道这可以手动完成,但我有超过 2000 个选择查询,每个查询都获取超过 100 个字段。因此,这项工作变得无聊且耗时。

关于如何实现自动化的任何想法。我有 oracle SQL 开发人员,如果它适合我​​的工作,我什至可以编写 UNIX shell 脚本。

0 投票
2 回答
1760 浏览

java - JSqlParser 如何拆分表达式

假设我有一个格式的表达式

我想得到一个表达式列表如下

如果我使用表达式访问者模式,对于 AndExpression 访问者,我写了类似

但是,这会递归地运行并进入其他每个访问者模式方法。获得较小的表达式时如何停止?

如果我只使用 getLeftExpressions() 和 getRightExpression(),我在第一次运行中得到的是左边的“a>10”和右边的“b>20 和 c>30”。

0 投票
2 回答
137 浏览

php - 按 ; 分割字符串

我已经检查了很多,但我无法掌握它。

我需要将 sql 转储拆分为查询。

我需要的基本上是这样的字符串:

我需要做的是分别获取每个查询。问题是,如果我用它来分割文件,;它也会分割包含 的字符串;,而不仅仅是那些以 . 结尾的字符串;

喜欢这部分:a:1:{s:15:\"ActivityUserIDs\";a:2:{i:0;s:1:\"2\";i:1;s:1:\"1\";}}。我不希望这被拆分。

我都尝试过preg_match()preg_split(),但我无法得到想要的结果。

我尝试将此作为一种模式:/[\;]+/以及围绕它的多种其他模式,但我无法让它发挥作用。

我也尝试更换;在它周围没有''的地方用**然后爆炸它,但仍然没有结果。

谢谢。

0 投票
4 回答
15701 浏览

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

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

  • 标记ISO/IEC 9075标准或此处定义的所有“基本”SQL 关键字。
  • 验证 SQL 语法。
  • 找出查询将要做什么(例如读取或写入?)。

您有什么解决方案或建议窥视吗?

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


我已经进行了研究,并找到了一些方法:

使用现有的 node.js 库

我进行了Google 搜索,但没有找到一个可以使用的自愿且受欢迎的库。我找到了那些:

不幸的是,这些库中没有一个是完整且值得信赖的。

基于 node.js 低级标记器库自己做

我可以使用低级标记器库自行完成,例如:

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

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

我可以基于 CodeMirror 构建一个 node.js 库标记器。SQL 模式在github 上,我可以调整它以在节点应用程序中获取令牌。

PS:CodeMirrorgithub上有 5046 颗星,并且维护得很好。


我发现有两个不同的问题:标记化和语法验证(与标记化有关)。

我根据优秀CodeMirror的SQL 模式为自己做了一个Node.js 的SQL 分器(github 上 5,046 颗星,维护良好)。CodeMirror 的 SQL 模式负责“通用” SQL 和一些 SQL 特殊性,如MSSQLMySQLPL/SQLCassandra、 Hive 和MariaDB

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

关于SQL 语法验证,我还没有找到 JavaScript 工具(或开源项目以适应 JS)...

0 投票
0 回答
221 浏览

sql - 使用基于 ANTLR 的 PLSQL 解析器解析 FOR 循环

我已经修改了 [Porcelli] ( https://github.com/porcelli/plsql-parser ) 给出的 PLSQL 解析器。我正在使用这个解析器来解析 PlSql 文件。我在解析 FOR 循环语句时遇到问题,例如

上面的语句没有解析并且它抛出 EarlyExitException。

现在,如果我修改此语句并在 1 和双点 (..) 之间放置一个空格,它将解析该语句。我不确定如何处理第一种情况。

解析器语法:

// $>

词法分析器语法:

0 投票
1 回答
236 浏览

python - 在 python/C++ 中激发类似 SQL 的查询工具

实现类似 SQL 的查询工具,其中必须按给定顺序从 STDIN 读取以下内容:-

我们必须在 STDOUT 上打印每个查询的输出。

例如:-

输入:

4,2

输出:

你们能告诉我应该如何解决这个问题吗?我应该使用什么数据结构来存储表和处理查询?

PS:我不是要求现成的解决方案,我只需要逐步帮助解决这个问题。

0 投票
1 回答
3906 浏览

python-3.x - 用python解析SQL以查找特定语句

我正在使用 sqlparse 来尝试查找特定语句。

代码:

我明白了

但我真正想要的是返回表名:

我怎样才能做到这一点?我的最终目标是解析 sql 脚本文件夹并查找参考资料和其他详细信息。

0 投票
1 回答
4867 浏览

c# - 如何安装 Microsoft.SqlServer.Management.SqlParser?

当我在新机器上重建它时,我的 c# 安装程序项目出现了大量警告。警告是他们正在寻找仅存在版本 10.0.0.0 的 dll 的 11.0.0.0 版本。我发现这是由于安装了 SQL Server 的版本(SQL Server 2008 R2)。大多数 dll 是由于共享管理对象包的版本不是 11.0.0.0 版本。

所以我安装了共享管理对象所需的 SqlSysClrTypes.msi (x86)。然后我安装了 ShareManagementObjects.msi (x86)。我从这里得到它们。

一些错误已经消失,但现在我得到了 2 个似乎引用了应该从 SharedManagementObjects.msi 安装的同一个 dll。它必须是可以获取/安装的,因为我目前的版本是 10.0.0.0。

错误是:

找不到程序集“Microsoft.SqlServer.Smo.dll”的依赖项“MICROSOFT.SQLSERVER.MANAGEMENT.SQLPARSER”(签名=“89845DCD8080CC91”版本=“11.0.0.0”)

和:

找不到程序集“Microsoft.SqlServer.Management.SmoMetadataProvider.dll”的依赖项“MICROSOFT.SQLSERVER.MANAGEMENT.SQLPARSER”(签名=“89845DCD8080CC91”版本=“11.0.0.0”)

我读过的所有内容都表明 Microsoft.sqlserver.management.sqlparser 应该作为 SharedManagementObjects.msi 的一部分安装。我可以做些什么来获取这个 dll 吗?我还需要安装其他东西,例如 Native Client 吗?