From 5a4a25d58b70447915e609ddcd1a7d8c7c69e346 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 29 Jun 2020 09:59:46 +0200 Subject: [PATCH] [jOOQ/jOOQ#10326] Derby binary literals don't work with BLOB types --- .../java/org/jooq/impl/DefaultBinding.java | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java index 4bed7a4983..937e0501ca 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java @@ -101,6 +101,7 @@ import static org.jooq.impl.Keywords.K_TIME_WITH_TIME_ZONE; import static org.jooq.impl.Keywords.K_TRUE; import static org.jooq.impl.Keywords.K_YEAR_TO_DAY; import static org.jooq.impl.Keywords.K_YEAR_TO_FRACTION; +import static org.jooq.impl.SQLDataType.BLOB; import static org.jooq.impl.SQLDataType.DOUBLE; import static org.jooq.impl.SQLDataType.OTHER; import static org.jooq.impl.SQLDataType.ROWID; @@ -1780,9 +1781,9 @@ public class DefaultBinding implements Binding { /** * Generated UID */ - private static final long serialVersionUID = -727202499908007757L; - private static final Set INLINE_AS_X_APOS = SQLDialect.supportedBy(DERBY, H2, HSQLDB, MARIADB, MYSQL, SQLITE); - private static final Set REQUIRE_BYTEA_CAST = SQLDialect.supportedBy(POSTGRES); + private static final long serialVersionUID = -727202499908007757L; + private static final Set INLINE_AS_X_APOS = SQLDialect.supportedBy(H2, HSQLDB, MARIADB, MYSQL, SQLITE); + private static final Set REQUIRE_BYTEA_CAST = SQLDialect.supportedBy(POSTGRES); @@ -1795,24 +1796,31 @@ public class DefaultBinding implements Binding { @Override final void sqlInline0(BindingSQLContext ctx, byte[] value) { // [#1154] Binary data cannot always be inlined - - - - - - - - - - - - - if (INLINE_AS_X_APOS.contains(ctx.dialect())) ctx.render() .sql("X'") .sql(convertBytesToHex(value)) .sql('\''); + else if (ctx.dialect() == DERBY) + ctx.render() + .visit(K_CAST) + .sql("(X'") + .sql(convertBytesToHex(value)) + .sql("' ") + .visit(K_AS) + .sql(' ') + .visit(BLOB) + .sql(')'); + + + + + + + + + + @@ -4427,7 +4435,7 @@ public class DefaultBinding implements Binding { @Override final int sqltype(Statement statement, Configuration configuration) { if (EMULATE_AS_BLOB.contains(configuration.dialect())) - bytes(configuration).sqltype(statement, configuration); + return bytes(configuration).sqltype(statement, configuration); return Types.VARCHAR; }