0

我正在使用 org.teiid.query.parser.QueryParser 将 SQL 字符串解析为 Query 对象。它适用于 ansi 引用的标识符(双引号)。但是,在解析用方括号、单引号和反引号引用的标识符时会引发错误。

出现以下错误:java.lang.Exception: org.teiid.api.exception.query.QueryParserException: TEIID31100 解析错误:在第 1 行第 8 列遇到“select [*][[*]dbo.empid]”。是期待:“字符”| “日期” | “时间” | “时间戳” | “投” | “转换” | “全部” | “任何” | "数组" | “array_agg” ...

这就是我使用它的方式: Query query = (Query)QueryParser.getQueryParser().parseCommand(sqlString, new ParseInfo());

上述语句中的 ParseInfo 参数将 ANSI_QUOTED_DEFAULT 属性设置为 true,因此它能够解析带有双引号标识符的 sql 字符串。例如:从“dbo”中选择“dbo.empid”。“Emp”“Ex”

我的应用程序需要使用其他类型的引用来解析 SQL 字符串,如下所示。

  • 方括号:选择 [dbo.empid] From [dbo].[Emp] [Ex]

  • 单引号:从 'dbo'.'Emp' 'Ex' 中选择 'dbo.empid'

  • 反引号:dbo.empid从中选择dboEmp Ex

Query解析器没有解析上述三个sql语句。

代码中是否需要任何 teiid 属性设置或任何其他 teiid 配置以允许任何类型的引用?

4

1 回答 1

0

代码中是否需要任何 teiid 属性设置或任何其他 teiid 配置以允许任何类型的引用?

目前的简短回答是否定的。对带引号的标识符的解析支持只是 ansi 标准双引号。如您所见,对于字符串文字,它是默认的单引号或允许双引号的属性。

如果您正在尝试获得 Teiid 支持的特定 sql 方言,您可以查看是否已经存在针对该问题的 JIRA 问题 - https://issues.redhat.com/projects/TEIID/issues

很可能有更多的语法需要支持,而不仅仅是替代引用。

于 2020-03-26T12:43:33.443 回答