java - Apache Calcite 中规划器和 ddl 语句的问题
问题描述
当我尝试验证包含“CREATE TABLE”的 sql 语句时,它会引发错误:
java.lang.AssertionError: Was not expecting value 'CREATE_TABLE' for enumeration 'org.apache.calcite.sql.SqlKind' in this context
at org.apache.calcite.util.Util.unexpected(Util.java:1773)
at org.apache.calcite.sql.validate.SqlValidatorImpl.registerQuery(SqlValidatorImpl.java:2715)
at org.apache.calcite.sql.validate.SqlValidatorImpl.registerQuery(SqlValidatorImpl.java:2381)
at org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:927)
at org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:633)
at org.apache.calcite.prepare.PlannerImpl.validate(PlannerImpl.java:188)
我想知道是否可以在方解石中使用 ddl 语句验证查询?
解决方案
从堆栈跟踪看来,您正在使用该Planner
接口。目前,此接口不支持验证包含 DDL 元素的语句,因为它始终创建CalciteSqlValidator的实例。
为了使用 DDL 节点验证语句,您必须获取ContextSqlValidator的实例,但目前没有使用此服务的高级 API。
通过 Calcite 连接执行的语句通过,因此您可以通过在ServerTestContextSqlValidator
中调试测试用例来了解如何实例化此类。
推荐阅读
- java - 在java中从右到左打印变量
- c++ - 返回对 const stuct(指针类型)成员的引用:明显的左值到右值的转换
- eclipse - Eclipse 插件 - 每次打开时将鼠标侦听器添加到编辑器
- spring-integration - Spring Integration TCP - 我需要将 Spring 用于非 Spring TCP 服务器
- python - 按子列表元素匹配过滤列表
- encoding - 公钥编码更改
- python - 在 Python 中选择一系列列
- jmeter - JMeter 每个 URL 只有一次
- javascript - 开玩笑测试一个承诺包装的请求
- javascript - 仅使用 javascript 通过用户输入查询基于 JSON 的 API