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