From a15ad7403bbcc9058f1b7e48c491c81cc36242ec Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 26 Mar 2025 11:48:36 +0100 Subject: [PATCH] [jOOQ/jOOQ#18221] BatchMultiple rendering Context doesn't have a Context.executeContext() --- jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java | 2 +- jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java | 7 +++++-- jOOQ/src/main/java/org/jooq/impl/BatchSingle.java | 2 +- .../java/org/jooq/impl/DefaultRenderContext.java | 13 ++++++++----- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java index f2fda33fde..8e5b2d1016 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, true); + Rendered rendered = Rendered.rendered(ctx.originalConfiguration(), ctx, 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 162636abe8..d6309cc809 100644 --- a/jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java +++ b/jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java @@ -50,6 +50,7 @@ import org.jooq.ExecuteListener; import org.jooq.Query; import org.jooq.conf.SettingsTools; import org.jooq.exception.ControlFlowSignal; +import org.jooq.impl.DefaultRenderContext.Rendered; import org.jooq.impl.R2DBC.BatchMultipleSubscriber; import org.jooq.impl.R2DBC.BatchSubscription; @@ -124,8 +125,10 @@ final class BatchMultiple extends AbstractBatch { for (int i = 0; i < ctx.batchQueries().length; i++) { ctx.sql(null); listener.renderStart(ctx); - batchSQL[i] = DSL.using(configuration).renderInlined(ctx.batchQueries()[i]); - ctx.sql(batchSQL[i]); + + Rendered r = Rendered.rendered(configuration, ctx, 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 4d03568f35..3b1bb41bb5 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, false).setSQLAndParams(ctx); + Rendered.rendered(configuration, ctx, 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 8d6dbf582d..064aee79d8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java @@ -924,10 +924,13 @@ class DefaultRenderContext extends AbstractContext implements Ren this.skipUpdateCounts = skipUpdateCounts; } - static Rendered rendered(Configuration c, DefaultExecuteContext ctx, boolean countBindValues) { - Query query = ctx.batchMode() == BatchMode.SINGLE - ? ctx.batchQueries()[0] - : ctx.query(); + static Rendered rendered( + Configuration c, + DefaultExecuteContext ctx, + Query query, + boolean countBindValues, + boolean forceStaticStatement + ) { // [#3542] [#4977] Some dialects do not support bind values in DDL statements // [#6474] [#6929] Can this be communicated in a leaner way? @@ -936,7 +939,7 @@ class DefaultRenderContext extends AbstractContext implements Ren DefaultRenderContext render = new DefaultRenderContext(c, ctx); return new Rendered(render.paramType(INLINED).visit(query).render(), null, render.skipUpdateCounts()); } - else if (executePreparedStatements(c.settings())) { + else if (executePreparedStatements(c.settings()) && !forceStaticStatement) { try { DefaultRenderContext render = new DefaultRenderContext(c, ctx); render.data(DATA_COUNT_BIND_VALUES, countBindValues);