如何更改Calcite的默认sql语法,支持这样的sql语句"select func(id)as(a,b,c)from xx;"
小智 9
要更改SQL解析器接受的语法,您需要更改解析器.有两种方法可以做到这一点.
第一个是分叉项目并更改核心语法Parser.jj.但是,与分叉项目时一样,每次升级到项目的新版本时,您都有责任重新应用更改.
第二种是使用Calcite项目提供的语法扩展点之一.Calcite的语法是用JavaCC编写的,但它首先通过FreeMarker模板引擎运行语法.扩展点是项目可以重新分配的模板中的变量.例如,如果要添加新的DDL命令,可以修改createStatementParserMethods变量,如在Calcite的解析器扩展测试中所做的那样:
# List of methods for parsing extensions to "CREATE [OR REPLACE]" calls.
# Each must accept arguments "(Span span, boolean replace)".
createStatementParserMethods: [
"SqlCreateTable"
]
Run Code Online (Sandbox Code Playgroud)
使用以下哪种方法?如果可以的话,绝对使用第二个,也就是说,如果您的语法更改发生在其中一个预定义的扩展点中.如果必须,请使用第一个,因为您将遇到维护语法分叉的问题.
如果可能,请查看Calcite是否接受更改作为贡献.这是您的理想方案,因为Calcite将负责维护您的语法扩展.但是,如果它是标准SQL或由一个或多个主要数据库实现的有用功能,它们可能只接受您的更改.他们将要求您的代码具有高质量并伴随着测试.
| 归档时间: |
|
| 查看次数: |
675 次 |
| 最近记录: |