我目前接触了一段时间 Flink 和 Calcite,对这个 issue: https://issues.apache.org/jira/browse/FLINK-22848存有一些疑问,希望社区大佬有空时能为我解下惑。 首先关于这个 issue 讨论提到最初由于 calcite 不支持 set a=b(无引号)的语法解析,因此采用了正则,但是前两天我查看 commit 历史记录,calcite 应当在 v1.14 甚至更早就已经支持 SET 语法解析(可见 SqlSetOption),但它的问题是会将 true/false/unknown/null 这几个 token 识别为关键字导致解析不如预期,但可以通过限制语法解决这个问题,就像这个 issue 里使用 '' 的方式。 包括之后我调研了下 flink 最早引入 calcite 的版本(如果我没查错,flink 应当是最早在 1.5 中引入了 Calcite 1.16),那时候 calcite 应当已经支持 SET a=b 的语法了,所以想请问您这个 issue 里提到的“不支持”具体是指什么呢?能否给一个具体的 case。 另外关于该 issue 的讨论结果我也有一点疑惑,统一使用 sql parser 解析我认为确实是更优雅的解决方式(其实在此之前我也想提这么一个 issue,包括我们公司目前也是这么做的),但是在 calcite 内置支持 SET 语法的情况下,为什么要用拓展 SET 语法的方式去重新支持呢?甚至这个改动可能引起兼容问题。 我个人的拙见是可以在使用原生 Calcite 解析的基础上加上对上述几个 token 的特殊限制解决这个问题,比如在用户手册中声明,因为如 unknown、null 这类值本身在生产环境并无意义。
