Я установил настройки парсера на игнорирование комментариев:
Код: Выделить всё
Settings settings = new Settings()
.withParseDialect(SQLDialect.ORACLE)
.withParseUnknownFunctions(ParseUnknownFunctions.IGNORE)
.withTransformTableListsToAnsiJoin(true)
.withTransformUnneededArithmeticExpressions(TransformUnneededArithmeticExpressions.ALWAYS)
.withTransformRownum(Transformation.ALWAYS)
.withParamCastMode(ParamCastMode.DEFAULT)
.withRenderOptionalAsKeywordForFieldAliases(RenderOptionalKeyword.ON)
.withRenderOptionalAsKeywordForTableAliases(RenderOptionalKeyword.ON)
.withRenderQuotedNames(RenderQuotedNames.EXPLICIT_DEFAULT_UNQUOTED)
.withRenderNameCase(RenderNameCase.UPPER)
.withRenderCoalesceToEmptyStringInConcat(true)
.withBatchSize(DbConnectionHelper.MAX_BATCH_SIZE)
.withParseIgnoreComments(true)
;
return settings;
Код: Выделить всё
String explainSql = """
/* [jooq ignore start] */
EXPLAIN (ANALYZE, FORMAT JSON)
/* [jooq ignore stop] */
""" + sql;
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(explainSql)) {
// process result
}
jOOQ теперь игнорирует предложение EXPLAIN во время синтаксического анализа, как и ожидалось, но также удаляет его из исполняемого SQL.
Таким образом, выполненный запрос больше не содержит EXPLAIN (ANALYZE, FORMAT JSON) и не может создать план.
Я использование:
- Версия jOOQ: 3.19.6
- PostgreSQL 14
- JDBC (не через выборку DSL)
- Java 11
- Диалект источника базы данных: Oracle
- Диалект назначения: PostgreSQL
Есть ли способ заставить jOOQ игнорировать часть SQL во время синтаксического анализа, но сохранять ее в фактическом выполнении?
Подробнее здесь: https://stackoverflow.com/questions/797 ... -execution
Мобильная версия