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);