From 26a5427188411f98976a4643c4fb956c573d20e2 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 25 Nov 2020 10:10:28 +0100 Subject: [PATCH] [jOOQ/jOOQ#11025] Wrong variable binding for boolean values in Oracle JSON_OBJECT(), JSON_ARRAY() and others --- .../java/org/jooq/impl/JSONEntryImpl.java | 28 ++++++++++++++++--- jOOQ/src/main/java/org/jooq/impl/Val.java | 2 +- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/JSONEntryImpl.java b/jOOQ/src/main/java/org/jooq/impl/JSONEntryImpl.java index 364148ef19..87bc7bb457 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JSONEntryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/JSONEntryImpl.java @@ -38,6 +38,7 @@ package org.jooq.impl; import static org.jooq.impl.DSL.coalesce; +import static org.jooq.impl.DSL.field; import static org.jooq.impl.Keywords.K_FORMAT; import static org.jooq.impl.Keywords.K_JSON; import static org.jooq.impl.Keywords.K_KEY; @@ -51,6 +52,7 @@ import org.jooq.DataType; import org.jooq.Field; import org.jooq.JSONEntry; import org.jooq.JSONEntryValueStep; +// ... import org.jooq.Record1; import org.jooq.Select; @@ -147,17 +149,35 @@ final class JSONEntryImpl extends AbstractQueryPart implements JSONEntry, } static final Field jsonCast(Context ctx, Field field) { + DataType type = field.getDataType(); + switch (ctx.family()) { // [#10769] Some dialects don't support auto conversions from X to JSON - case H2: { - DataType type = field.getDataType(); - + case H2: if (type.getType() == UUID.class) return field.cast(VARCHAR(36)); - } + + break; + + + + + + + + + + } return field; } + + + + + + + } diff --git a/jOOQ/src/main/java/org/jooq/impl/Val.java b/jOOQ/src/main/java/org/jooq/impl/Val.java index 01c1ce43ad..62c0eaf741 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Val.java +++ b/jOOQ/src/main/java/org/jooq/impl/Val.java @@ -110,7 +110,7 @@ final class Val extends AbstractParam { return w; } - private final Val convertTo0(DataType type) { + final Val convertTo0(DataType type) { Val w = new Val<>(type.convert(getValue()), type, getParamName()); w.setInline(isInline()); return w;