如何更改Calcite的默认sql语法?“

时间:2017-06-06 06:30:45

标签: apache-calcite

如何更改Calcite的默认sql语法,支持这样的sql语句“select func(id)as(a,b,c)from xx;”

1 个答案:

答案 0 :(得分:7)

要更改SQL解析器接受的语法,您需要更改解析器。有两种方法可以做到这一点。

第一个是分叉项目并更改核心语法Parser.jj。但是,当您分叉项目时,每次升级到项目的新版本时,您都有责任重新应用更改。

第二种方法是使用Calcite项目提供的语法扩展点之一。 Calcite的语法是用JavaCC编写的,但它首先通过FreeMarker模板引擎运行语法。扩展点是项目可以重新分配的模板中的变量。例如,如果要添加新的DDL命令,可以像Calcite's parser extension test中那样修改createStatementParserMethods变量:

  # List of methods for parsing extensions to "CREATE [OR REPLACE]" calls.
  # Each must accept arguments "(Span span, boolean replace)".
  createStatementParserMethods: [
    "SqlCreateTable"
  ]

使用以下哪种方法?如果可以的话,绝对使用第二个,也就是说,如果您的语法更改发生在其中一个预定义的扩展点中。如果必须,请使用第一个,因为您将遇到维护语法分叉的问题。

如果可能,请查看Calcite是否接受更改作为贡献。这是您的理想方案,因为Calcite将负责维护您的语法扩展。但是,如果它是标准SQL或由一个或多个主要数据库实现的有用功能,它们可能只会接受您的更改。他们将要求您的代码具有高质量并伴随着测试。

相关问题