From e6b8c01c95a49ebd8101a2fdfb3e2f638626843c Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 28 Nov 2025 14:53:33 +0100 Subject: [PATCH] [jOOQ/jOOQ#19431] DefaultRenderContext.checkForceInline() does not work for R2DBC connections --- .../main/java/org/jooq/impl/AbstractQuery.java | 2 +- .../main/java/org/jooq/impl/BatchMultiple.java | 2 +- .../main/java/org/jooq/impl/BatchSingle.java | 2 +- .../org/jooq/impl/DefaultRenderContext.java | 6 ++++++ jOOQ/src/main/java/org/jooq/impl/R2DBC.java | 18 +++++++++--------- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java index 5767abd7c4..6f4fb31ba9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java @@ -496,7 +496,7 @@ abstract class AbstractQuery extends AbstractAttachableQueryPa } private static final Rendered getSQL0(DefaultExecuteContext ctx) { - Rendered rendered = Rendered.rendered(ctx.originalConfiguration(), ctx, ctx.query(), true, false); + Rendered rendered = Rendered.rendered(ctx.originalConfiguration(), ctx, r -> {}, ctx.query(), true, false); diff --git a/jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java b/jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java index 14224d7580..34e5564cff 100644 --- a/jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java +++ b/jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java @@ -126,7 +126,7 @@ final class BatchMultiple extends AbstractBatch { ctx.sql(null); listener.renderStart(ctx); - Rendered r = Rendered.rendered(configuration, ctx, ctx.batchQueries()[i], false, true); + Rendered r = Rendered.rendered(configuration, ctx, x -> {}, ctx.batchQueries()[i], false, true); r.setSQLAndParams(ctx); ctx.sql(batchSQL[i] = r.sql); listener.renderEnd(ctx); diff --git a/jOOQ/src/main/java/org/jooq/impl/BatchSingle.java b/jOOQ/src/main/java/org/jooq/impl/BatchSingle.java index 41bcc7ee2b..814e95b82b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/BatchSingle.java +++ b/jOOQ/src/main/java/org/jooq/impl/BatchSingle.java @@ -207,7 +207,7 @@ final class BatchSingle extends AbstractBatch implements BatchBindStep { ctx.transformQueries(listener); listener.renderStart(ctx); - Rendered.rendered(configuration, ctx, ctx.batchQueries()[0], false, false).setSQLAndParams(ctx); + Rendered.rendered(configuration, ctx, r -> {}, ctx.batchQueries()[0], false, false).setSQLAndParams(ctx); listener.renderEnd(ctx); listener.prepareStart(ctx); diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java index bd6d517068..1055f56a64 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java @@ -61,6 +61,7 @@ import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; import java.util.List; +import java.util.function.Consumer; import java.util.regex.Pattern; import org.jooq.BindContext; @@ -1006,6 +1007,7 @@ class DefaultRenderContext extends AbstractContext implements Ren static Rendered rendered( Configuration c, DefaultExecuteContext ctx, + Consumer renderContextConsumer, Query query, boolean countBindValues, boolean forceStaticStatement @@ -1016,22 +1018,26 @@ class DefaultRenderContext extends AbstractContext implements Ren if (ctx.type() == DDL) { ctx.data(DATA_FORCE_STATIC_STATEMENT, true); DefaultRenderContext render = new DefaultRenderContext(c, ctx); + renderContextConsumer.accept(render); return new Rendered(render.paramType(INLINED).visit(query).render(), null, render.skipUpdateCounts()); } else if (executePreparedStatements(c.settings()) && !forceStaticStatement) { try { DefaultRenderContext render = new DefaultRenderContext(c, ctx); + renderContextConsumer.accept(render); render.data(DATA_COUNT_BIND_VALUES, countBindValues); return new Rendered(render.visit(query).render(), render.bindValues(), render.skipUpdateCounts()); } catch (DefaultRenderContext.ForceInlineSignal e) { ctx.data(DATA_FORCE_STATIC_STATEMENT, true); DefaultRenderContext render = new DefaultRenderContext(c, ctx); + renderContextConsumer.accept(render); return new Rendered(render.paramType(INLINED).visit(query).render(), null, render.skipUpdateCounts()); } } else { DefaultRenderContext render = new DefaultRenderContext(c, ctx); + renderContextConsumer.accept(render); return new Rendered(render.paramType(INLINED).visit(query).render(), null, render.skipUpdateCounts()); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/R2DBC.java b/jOOQ/src/main/java/org/jooq/impl/R2DBC.java index 80633e1bac..a9bc54e328 100644 --- a/jOOQ/src/main/java/org/jooq/impl/R2DBC.java +++ b/jOOQ/src/main/java/org/jooq/impl/R2DBC.java @@ -938,17 +938,17 @@ final class R2DBC { // ------------------------------------------------------------------------- static final Rendered rendered(Configuration configuration, Query query) { - DefaultRenderContext render = new DefaultRenderContext(configuration.deriveSettings(s -> - setParamType(configuration.dialect(), s) - ), null); + Configuration c = configuration.deriveSettings(s -> setParamType(configuration.dialect(), s)); - // [#17088] Some rendering decisions may be made based on whether we're using R2DBC - render.data(DATA_RENDER_FOR_R2DBC, true); + return Rendered.rendered( + c, + new DefaultExecuteContext(c, query), - return new Rendered( - render.paramType(render.settings().getParamType()).visit(query).render(), - render.bindValues(), - render.skipUpdateCounts() + // [#17088] Some rendering decisions may be made based on whether we're using R2DBC + r -> r.paramType(c.settings().getParamType()).data(DATA_RENDER_FOR_R2DBC, true), + query, + true, + false ); }