【问题标题】:Teiid Query Parser not identifying quoted identifiersTeiid 查询解析器未识别引用的标识符
【发布时间】:2020-05-18 11:28:31
【问题描述】:

我正在使用 Teiid 的查询解析器。对于我在下面给出的代码中使用的 sql,虽然标识符是 ansi-quoted,但查询解析器并没有正确地将它们拆分为 schema、tableName 和 FieldName。

这是我的代码:

String sqlToParse = "Select "dbo.mydbo"."employee.info".id from "dbo.mydbo"."employee.info""

Query query = (Query)QueryParser.getQueryParser().parseCommand(sqlToParse, new ParseInfo());

在上面的sql中:

架构名称是 dbo.mydbo

表名是employee.info

字段名是id

在解析期间,Teiid Parser 似乎首先删除了双引号,之后完全限定的字段名称将变为 dbo.mydbo.employee.info.id。 在此之后,它基于 dot(.)

进行拆分

第一个点之前的字符串被视为 GroupSymbol.qualifier(schema name): dbo

最后一个点后的字符串作为 ElementSymbol.shortName(field name): id

第一个和最后一个点之间的其余字符串被视为 GroupSymbol.shortName(table name): mydbo.employee.info

上述拆分给出了不正确的结果。引用标识符时,拆分应考虑引号。

我的代码中是否缺少某些内容,或者 ParseInfo 中是否缺少某些设置,因为 Teiid 解析器在拆分标识符时没有考虑引号。

【问题讨论】:

    标签: teiid


    【解决方案1】:

    我的代码中是否缺少某些内容,或者 ParseInfo 中是否缺少某些设置,因为 Teiid 解析器在拆分标识符时没有考虑引号。

    由于遗留原因,解析器没有适当考虑引用如何分解标识符。我相信最初的意图是允许导入模式限定的表,这些表将具有沿着“schema”.“source-schema.table-name”行的 teiid 名称,仍然可以使用看起来像 source sql 的内容进行查询- 从“源模式”。“表名”中选择 ...。文档中应该有几个关于解析器松懈的警告。

    解析后的命令/符号通常是您所期望的 - 在存在作为另一个对象后缀的完全限定名称的情况下可能会出现问题。我们目前更喜欢 fqn 形式,而不是抛出一个模棱两可的异常。

    例如在模式 x 中: 创建外部表“y”(col 字符串); 创建外部表“x.y”(col 字符串);

    那么 'select * from "x.y"' 当前会解析为 "x"."y",但如果它是模棱两可的会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      相关资源
      最近更新 更多