Apache Calcite - не могу разобрать операторы DDL

Ниже приведена конфигурация, которую я использую для разбора операторов MySQL. Я могу нормально анализировать и обрабатывать операторы DML, но не могу разобрать любые операторы DDL (CREATE TABLE, ALTER TABLE, DROP TABLE и т. Д.).

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 Заявление, это дает мне следующее сообщение об ошибке.

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> ...
... 

Я могу видеть классы как SqlAlter, SqlCreate,SqlDrop в библиотеке. Есть ли другой способ для анализа DDL?

я использую 1.17.0 версия.

1 ответ

Решение

Я думаю, что вам просто не хватает подходящей фабрики парсеров. Попробуйте следующее:

SqlParser.Config sqlParserConfig = SqlParser.configBuilder()
    .setParserFactory(SqlDdlParserImpl.FACTORY)
    .setConformance(SqlConformanceEnum.MYSQL_5)
    .setLex(Lex.MYSQL)
    .build();

SqlParser parser = SqlParser.create(query, sqlParserConfig);
Другие вопросы по тегам