From 2b57efb150858ebf1d46fd9fa972a170cc14f06d Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 26 Sep 2022 10:27:03 +0200 Subject: [PATCH] [jOOQ/jOOQ#14027] ClobBinding and BlobBinding shouldn't delegate sql() generation to internal DefaultClobBinding or DefaultBlobBinding --- jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java | 8 ++++++++ jOOQ/src/main/java/org/jooq/impl/BlobBinding.java | 9 ++++++++- jOOQ/src/main/java/org/jooq/impl/ClobBinding.java | 9 ++++++++- jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java | 3 +-- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java index 623d2a34bb..8f9c6ad932 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java @@ -66,12 +66,14 @@ import static org.jooq.impl.Keywords.K_CASE; import static org.jooq.impl.Keywords.K_COLUMNS; import static org.jooq.impl.Keywords.K_DECLARE; import static org.jooq.impl.Keywords.K_END; +import static org.jooq.impl.Keywords.K_END_IF; import static org.jooq.impl.Keywords.K_END_LOOP; import static org.jooq.impl.Keywords.K_FALSE; import static org.jooq.impl.Keywords.K_FIRST; import static org.jooq.impl.Keywords.K_FOR; import static org.jooq.impl.Keywords.K_FROM; import static org.jooq.impl.Keywords.K_FUNCTION; +import static org.jooq.impl.Keywords.K_IF; import static org.jooq.impl.Keywords.K_IN; import static org.jooq.impl.Keywords.K_IS; import static org.jooq.impl.Keywords.K_IS_NOT_NULL; @@ -1466,6 +1468,12 @@ implements + + + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/BlobBinding.java b/jOOQ/src/main/java/org/jooq/impl/BlobBinding.java index 11ff7d3488..a3ad50aee7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/BlobBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/BlobBinding.java @@ -57,6 +57,7 @@ import org.jooq.BindingSetStatementContext; import org.jooq.Converter; import org.jooq.Converters; import org.jooq.ResourceManagingScope; +import org.jooq.conf.ParamType; import org.jooq.impl.R2DBC.R2DBCPreparedStatement; import org.jooq.impl.R2DBC.R2DBCResultSet; import org.jooq.tools.jdbc.JDBCUtils; @@ -81,7 +82,10 @@ public class BlobBinding implements Binding { @Override public final void sql(BindingSQLContext ctx) throws SQLException { - ctx.render().visit(DSL.val(ctx.value(), SQLDataType.BLOB)); + if (ctx.render().paramType() == ParamType.INLINED) + ctx.render().visit(DSL.inline(ctx.convert(converter()).value(), SQLDataType.BLOB)); + else + ctx.render().sql(ctx.variable()); } @Override @@ -148,6 +152,9 @@ public class BlobBinding implements Binding { } static final Blob newBlob(ResourceManagingScope scope, byte[] bytes, Connection connection) throws SQLException { + if (bytes == null) + return null; + Blob blob; switch (scope.dialect()) { diff --git a/jOOQ/src/main/java/org/jooq/impl/ClobBinding.java b/jOOQ/src/main/java/org/jooq/impl/ClobBinding.java index e48b46fa62..bf1ee21773 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ClobBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/ClobBinding.java @@ -59,6 +59,7 @@ import org.jooq.Converters; import org.jooq.ResourceManagingScope; import org.jooq.Scope; import org.jooq.Source; +import org.jooq.conf.ParamType; import org.jooq.tools.jdbc.JDBCUtils; // ... @@ -81,7 +82,10 @@ public class ClobBinding implements Binding { @Override public final void sql(BindingSQLContext ctx) throws SQLException { - ctx.render().visit(DSL.val(ctx.value(), SQLDataType.CLOB)); + if (ctx.render().paramType() == ParamType.INLINED) + ctx.render().visit(DSL.inline(ctx.convert(converter()).value(), SQLDataType.CLOB)); + else + ctx.render().sql(ctx.variable()); } @Override @@ -154,6 +158,9 @@ public class ClobBinding implements Binding { } static final Clob newClob(ResourceManagingScope scope, String string) throws SQLException { + if (string == null) + return null; + Clob clob; switch (scope.dialect()) { diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java index 07040ea766..84453d4511 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java @@ -703,7 +703,7 @@ public class DefaultBinding implements Binding { final DataType dataType; - final ContextConverter converter; + final ContextConverter converter; final boolean attachable; InternalBinding(DataType dataType, Converter converter) { @@ -4317,7 +4317,6 @@ public class DefaultBinding implements Binding { - ctx.output().writeString(value); }