From 54bc17d766ecc5d913139ab34e1fc9949e57b111 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 7 Mar 2023 09:49:03 +0100 Subject: [PATCH] [jOOQ/jOOQ#11015] CockroachDB needs more fixing See: https://github.com/cockroachdb/cockroach/issues/98122. To play safe, we're casting all null literals and bind values of unknown type to the known column type in VALUES() --- jOOQ/src/main/java/org/jooq/impl/Values.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/Values.java b/jOOQ/src/main/java/org/jooq/impl/Values.java index e5fc65aaaa..45d056fefe 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Values.java +++ b/jOOQ/src/main/java/org/jooq/impl/Values.java @@ -207,11 +207,11 @@ implements } private final Row castNullLiteralToRowType(Context ctx, Row row) { - if (anyMatch(row.fields(), f -> rendersNullLiteral(ctx, f))) { + if (anyMatch(row.fields(), f -> nullLiteralOrUntypedNullBind(ctx, f))) { Field[] result = new Field[row.size()]; for (int i = 0; i < result.length; i++) - if (rendersNullLiteral(ctx, row.field(i)) && rowType()[i].getType() != Object.class) + if (nullLiteralOrUntypedNullBind(ctx, row.field(i)) && rowType()[i].getType() != Object.class) result[i] = row.field(i).cast(rowType()[i]); else result[i] = row.field(i); @@ -222,8 +222,10 @@ implements return row; } - private final boolean rendersNullLiteral(Context ctx, Field field) { - return isVal(field) && ((Val) field).getValue() == null && ((Val) field).isInline(ctx) + private final boolean nullLiteralOrUntypedNullBind(Context ctx, Field field) { + return isVal(field) + && ((Val) field).getValue() == null + && (((Val) field).isInline(ctx) || field.getType() == Object.class) || field instanceof NullCondition; }