[jOOQ/jOOQ#19431] DefaultRenderContext.checkForceInline() does not work

for R2DBC connections
This commit is contained in:
Lukas Eder 2025-11-28 14:53:33 +01:00
parent 4f26421ea4
commit e6b8c01c95
5 changed files with 18 additions and 12 deletions

View File

@ -496,7 +496,7 @@ abstract class AbstractQuery<R extends Record> 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);

View File

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

View File

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

View File

@ -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<RenderContext> implements Ren
static Rendered rendered(
Configuration c,
DefaultExecuteContext ctx,
Consumer<? super DefaultRenderContext> renderContextConsumer,
Query query,
boolean countBindValues,
boolean forceStaticStatement
@ -1016,22 +1018,26 @@ class DefaultRenderContext extends AbstractContext<RenderContext> 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());
}
}

View File

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