问题标签 [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.
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?
java - Apache Calcite 在 SQL 字符串中查找选定的列
我有一个用例,我想知道在 SQL 字符串中选择的列。例如,如果 SQL 是这样的:
SELECT name, age*5 as intelligence FROM bla WHERE bla=bla
然后,在解析上述字符串后,我只想输出为:name, intelligence
。
首先,可以通过方解石吗?
也欢迎任何其他选择。
PS:在实际对数据库运行查询之前,我想知道这一点。
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 的情况:
.net - 如何从 .net 中的 Tsql 选择语句中提取所有表名和别名
我在 sql server 中的所有租户表都有一个字段 customer_id。我正在尝试为 NPoco 编写一个拦截器,它将从查询中提取所有表和别名。将其与未租户表的异常列表匹配,并修改 select 以检查 where 子句中所有租户表的租户键。
我很难找到一个可以从 sql 语句中提取表名和别名的 sql 解析器。
一个好的解决方案将解析以下语句。
将为我提供足够的信息来可靠地构建包含 2 项 {"FactInternetSales", "fis"} 和 {"product", "product"} 的字典
到目前为止,我只找到了只知道对我来说太通用而无法依赖的类型的分词器。(即关键字、标识符、运算符、文本)。有什么东西可以在.net中做这种工作吗?还是有更好的策略将这些租户检查附加到运行的每个查询中?
c# - 使用 TSql120Parser 解析 T-SQL 时出错
你好stackoverflowers,
我在使用TSql120Parser
from解析 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 的帮助!
hana - 基于 Java 的 SQLParser 用于解析 Hana SQL 查询
是否有任何开源 JAVA SQL 解析器用于解析基于 SAP HANA 的 SQL 查询?尝试使用 JSQLParser 但它不完全支持基于 Hana 的功能。
c# - 是否有 Firebird SQL 的解析器
使用 Firebird 和 .Net Firebird 提供程序。寻找类似的东西:
外面有这样的吗?我正在为其他 SQL 风格找到这个,但没有什么能理解 FB 语法,比如连接、CTE、派生表等。
sql-server-2014 - Microsoft.SqlServer.SqlManagementObjects aka SMO nuget 不包含 Microsoft.SqlServer.Management.SqlParser.dll
我正在使用 CollationInfo 类进行 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 中的 CollationInfo 类。在我的开发机器上一切正常。
但是当我将代码部署到部署服务器时,出现了关于找不到 Microsoft.SqlServer.Management.SqlParser.dll 的异常。因为这个 dll 在我的开发机器上的 GAC 中。
它不是 SMO 的一部分 - 在 C:\Program Files\Microsoft SQL Server\130\SDK\Assemblies 中找不到它,安装 nuget 后它也不是构建的一部分。我可以卸载 nuget,并且在开发机器上一切正常。
问题是 - 有没有办法在部署服务器上不安装任何东西的情况下获取这个 dll(以及它的依赖项,如果有的话)?此文件是否无法通过任何其他 nuget 获得?只有其他选择是自己打包,但这似乎并不理想。
谢谢!
sql - 使用存储过程语法的 python 中的“sqlparse”模块出错
我正在尝试使用 sqlparse 模块中的 split 方法将查询文件拆分为查询列表。当我使用“创建过程”查询时,它会正确拆分。但是当我使用“替换过程”时,它将一个查询分成两个查询。它用分号拆分,忽略开始和结束。
python - Python 正则表达式匹配器,直到两个字符,如 OR 条件
我的问题很简单,我试图提出一个 RE 来选择两个字符之间的任何一组单词或语句。
例如,字符串是这样的:
它也可以看起来像
所以我需要从这个字符串中提取“whatever” 。
我想出的正则表达式是这样的:
它可以正常工作并提取“任何内容”,但这仅适用于第一个示例而不是第二个示例。在第二个语句的情况下我该怎么办
我基本上是在寻找OR条件之类的东西!
任何帮助,将不胜感激
提前致谢