首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache Calcite -似乎无法解析DDL语句

Apache Calcite -似乎无法解析DDL语句
EN

Stack Overflow用户
提问于 2018-12-16 17:38:07
回答 1查看 1.1K关注 0票数 3

下面是我用来解析MySQL语句的配置。我能够很好地解析和处理DML语句,但似乎无法解析任何DDL语句(CREATE TABLE、ALTER TABLE、DROP TABLE等)。

代码语言:javascript
复制
public static SqlNode parse(String query) {
    SqlParser.Config sqlParserConfig = SqlParser.configBuilder()
        .setConformance(SqlConformanceEnum.MYSQL_5)
        .setLex(Lex.MYSQL)
        .build();

    SqlParser parser = SqlParser.create(query, sqlParserConfig);

    try {
        return parser.parseStmt();
    } catch (SqlParseException e) {
        lastErrorMessage = e.getMessage();
        return null;
    }
}

当我试图解析一条CREATE TABLE语句时,它给出了以下错误消息。

代码语言:javascript
复制
Encountered "ALTER TABLE" at line 1, column 1.
Was expecting one of:
    "SET" ...
    "RESET" ...
    "ALTER" "SYSTEM" ...
    "ALTER" "SESSION" ...
    "WITH" ...
    "+" ...
    "-" ...
    "NOT" ...
    "EXISTS" ...
    <UNSIGNED_INTEGER_LITERAL> ...
    <DECIMAL_NUMERIC_LITERAL> ...
    <APPROX_NUMERIC_LITERAL> ...
    <BINARY_STRING_LITERAL> ...
    <PREFIXED_STRING_LITERAL> ...
    <QUOTED_STRING> ...
    <UNICODE_STRING_LITERAL> ...
... 

我可以在库中看到像SqlAlterSqlCreateSqlDrop这样的类。有没有不同的方法来解析DDL?

我使用的是1.17.0版本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-17 16:22:44

我认为您只是错过了适当的解析器工厂。尝试以下操作:

代码语言:javascript
复制
SqlParser.Config sqlParserConfig = SqlParser.configBuilder()
    .setParserFactory(SqlDdlParserImpl.FACTORY)
    .setConformance(SqlConformanceEnum.MYSQL_5)
    .setLex(Lex.MYSQL)
    .build();

SqlParser parser = SqlParser.create(query, sqlParserConfig);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53801005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档