问题标签 [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 投票
3 回答
3221 浏览

java - Adding a User-Defined Function to Calcite

I need to add a user-defined function to Calcite that takes an integer as a parameter and returns an integer.

and the relevant code that creates a schema and adds the function is

But a simple SQL like

fails during the validation with the following message:

The stack trace is:

I followed the Calcite's UdfTest.testUserDefinedFunctionInView implementation but still couldn't make it work. What am I doing wrong?

0 投票
2 回答
3637 浏览

java - Apache Calcite 在 SQL 字符串中查找选定的列

我有一个用例,我想知道在 SQL 字符串中选择的列。例如,如果 SQL 是这样的:
SELECT name, age*5 as intelligence FROM bla WHERE bla=bla
然后,在解析上述字符串后,我只想输出为:name, intelligence
首先,可以通过方解石吗?
也欢迎任何其他选择。

PS:在实际对数据库运行查询之前,我想知道这一点。

0 投票
1 回答
1547 浏览

c# - 解析 T-SQL 以提取 WHERE 子句的一部分

我有一个包含“曲线”的大型 SQL 数据库。每条曲线都有一个 ID(curveid)。我正在尝试确定每条曲线的主要用户以及是否使用它。为了实现这一点,DBA 提供了针对数据库执行的所有语句的日志。

这些语句可能非常复杂。我要做的就是提取正在查询的curveids。

示例语句如下:

从这个语句中,我感兴趣的只是提取用户查询的curveid 90564。

该语句也可能类似于以下任何一种:

或者

同样,我只想知道曲线 ID。我不关心任何其他条款。

我正在使用 Microsoft.SqlServer.TransactSql.ScriptDom 命名空间来解析 SQL,并且已经到了可以使用类似于下面的代码识别所有 WHERE 语句的地步(从其他一些示例拼凑而成):

whereVisitor.WhereStatements(本例中为 3 个)中的每个子句都公开了一个名为 SearchCondition 的属性。不幸的是,这是我没有想法的地方。我想要实现的是如下逻辑:

其他详情:

  • 使用 C# (.net 4.0)
  • SQL Server 2008
  • DLL 是 Microsoft.SqlServer.TransactSql.ScriptDom (在我的例子中位于 'c:\Program Files (x86)\Microsoft SQL Server\130\Tools\PowerShell\Modules\SQLPS\Microsoft.SqlServer.TransactSql.ScriptDom.dll ')

编辑 1

一些附加信息:

  • CurveID 是另一个表的键。在这种情况下,对其进行操作是没有意义的(例如curveId+1 或curveId <= 10)。

编辑 2(部分解决方案)

拥有以下访问者有助于解决 where 子句类似于 curveid = 123 的情况:

0 投票
2 回答
1798 浏览

.net - 如何从 .net 中的 Tsql 选择语句中提取所有表名和别名

我在 sql server 中的所有租户表都有一个字段 customer_id。我正在尝试为 NPoco 编写一个拦截器,它将从查询中提取所有表和别名。将其与未租户表的异常列表匹配,并修改 select 以检查 where 子句中所有租户表的租户键。

我很难找到一个可以从 sql 语句中提取表名和别名的 sql 解析器。

一个好的解决方案将解析以下语句。

将为我提供足够的信息来可靠地构建包含 2 项 {"FactInternetSales", "fis"} 和 {"product", "product"} 的字典

到目前为止,我只找到了只知道对我来说太通用而无法依赖的类型的分词器。(即关键字、标识符、运算符、文本)。有什么东西可以在.net中做这种工作吗?还是有更好的策略将这些租户检查附加到运行的每个查询中?

0 投票
1 回答
896 浏览

c# - 使用 TSql120Parser 解析 T-SQL 时出错

你好stackoverflowers,

我在使用TSql120Parserfrom解析 T-SQL 语句时遇到问题Microsoft.SqlServer.TransactSql.ScriptDom。我的目标是简单地解析 T-SQL 选择语句并获取它的标记。

这是问题的关键部分:

变量查询包含以下语句:

现在我总是收到以下错误(antlr.MismatchedTokenException.TokenTypeEnum.TokenType):

期待“点”,在第 17 列找到“,”

因为我猜这个语句是正确的(我测试了其他几个在 SQL-Server 中工作的语句,但没有被 TSql120Parser 解析),我不知道问题可能是什么。

我没有被迫使用这个解析器,但我认为这将是最简单和最强大的解决方案。我将不胜感激找到解决方案的任何帮助!

最好的问候, 索伦

编辑

在 Alex K 的帮助下,我发现它可以在干净的控制台应用程序中工作,但不能在我的 WPF 项目中工作。它使用相同的 Nuget 包和 .Net 4.6。很奇怪,它解析类似

但不是

解决方案

TSql100Parser.Parse没有在项目中工作,但TSql100Parser.GetTokenStream确实如此。我不知道原因,也无法在另一个项目中重现该错误。

感谢 Alex K. 和 Matthew Vines 的帮助!

0 投票
0 回答
237 浏览

hana - 基于 Java 的 SQLParser 用于解析 Hana SQL 查询

是否有任何开源 JAVA SQL 解析器用于解析基于 SAP HANA 的 SQL 查询?尝试使用 JSQLParser 但它不完全支持基于 Hana 的功能。

0 投票
0 回答
331 浏览

c# - 是否有 Firebird SQL 的解析器

使用 Firebird 和 .Net Firebird 提供程序。寻找类似的东西:

外面有这样的吗?我正在为其他 SQL 风格找到这个,但没有什么能理解 FB 语法,比如连接、CTE、派生表等。

0 投票
0 回答
560 浏览

sql-server-2014 - Microsoft.SqlServer.SqlManagementObjects aka SMO nuget 不包含 Microsoft.SqlServer.Management.SqlParser.dll

我正在使用 Collat​​ionInfo 类进行 SQL 排序规则 (SQL_Latin1_General_CP1_CS_AS) 特定的字符串比较 ( https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.sqlparser.metadata.collat ​​ioninfo.aspx )。

安装 SMO nuget ( https://www.nuget.org/packages/Microsoft.SqlServer.SqlManagementObjects# ) 后,我可以添加对 Microsoft.SqlServer.Management.SqlParser.Metadata 的引用并使用 Visual Studio 中的 Collat​​ionInfo 类。在我的开发机器上一切正常。

但是当我将代码部署到部署服务器时,出现了关于找不到 Microsoft.SqlServer.Management.SqlParser.dll 的异常。因为这个 dll 在我的开发机器上的 GAC 中。

它不是 SMO 的一部分 - 在 C:\Program Files\Microsoft SQL Server\130\SDK\Assemblies 中找不到它,安装 nuget 后它也不是构建的一部分。我可以卸载 nuget,并且在开发机器上一切正常。

问题是 - 有没有办法在部署服务器上不安装任何东西的情况下获取这个 dll(以及它的依赖项,如果有的话)?此文件是否无法通过任何其他 nuget 获得?只有其他选择是自己打包,但这似乎并不理想。

谢谢!

0 投票
1 回答
633 浏览

sql - 使用存储过程语法的 python 中的“sqlparse”模块出错

我正在尝试使用 sqlparse 模块中的 split 方法将查询文件拆分为查询列表。当我使用“创建过程”查询时,它会正确拆分。但是当我使用“替换过程”时,它将一个查询分成两个查询。它用分号拆分,忽略开始和结束。

0 投票
2 回答
215 浏览

python - Python 正则表达式匹配器,直到两个字符,如 OR 条件

我的问题很简单,我试图提出一个 RE 来选择两个字符之间的任何一组单词或语句。
例如,字符串是这样的:

它也可以看起来像

所以我需要从这个字符串中提取“whatever” 。

我想出的正则表达式是这样的:

它可以正常工作并提取“任何内容”,但这仅适用于第一个示例而不是第二个示例。在第二个语句的情况下我该怎么办

我基本上是在寻找OR条件之类的东西!

任何帮助,将不胜感激

提前致谢