【问题标题】:QueryParser not parsing sql statement with quoted identifiers other than ansi-quotedQueryParser 不解析带有除 ansi-quoted 之外的带引号标识符的 sql 语句
【发布时间】:2020-07-06 01:06:02
【问题描述】:

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

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

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

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

我的应用程序需要使用下面给出的其他类型的引用来解析 SQL 字符串。

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

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

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

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

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

【问题讨论】:

    标签: teiid quoted-identifier


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      相关资源
      最近更新 更多