diff --git a/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java b/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java index 1f338f8238..433e68239b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java +++ b/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java @@ -76,6 +76,7 @@ import static org.jooq.impl.DSL.row; import static org.jooq.impl.DSL.select; import static org.jooq.impl.DSL.table; import static org.jooq.impl.DSL.when; +import static org.jooq.impl.FieldMapsForInsert.patchDefault; import static org.jooq.impl.Keywords.K_ROW; import static org.jooq.impl.Tools.anyMatch; import static org.jooq.impl.Tools.apply; @@ -236,7 +237,7 @@ extends Field k = multiRow.field(i); Field v = multiValue.field(i); - map.put(k, Tools.field(v, k)); + map.put(k, patchDefault(ctx, Tools.field(v, k), k)); } ctx.visit(map); @@ -343,7 +344,7 @@ extends else - ctx.visit(value); + ctx.visit(patchDefault(ctx, (Field) value, (Field) key)); } if (assignmentClause != null) diff --git a/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java b/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java index 1b0837c75b..2eddf1c5fb 100644 --- a/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java +++ b/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java @@ -50,6 +50,7 @@ import static org.jooq.Clause.INSERT_VALUES; import static org.jooq.SQLDialect.POSTGRES; // ... // ... +import static org.jooq.SQLDialect.SQLITE; // ... import static org.jooq.SQLDialect.TRINO; // ... @@ -116,10 +117,7 @@ import org.jooq.impl.Tools.ExtendedDataKey; final class FieldMapsForInsert extends AbstractQueryPart implements UNotYetImplemented { static final Set CASTS_NEEDED = SQLDialect.supportedBy(POSTGRES, TRINO, YUGABYTEDB); static final Set CASTS_NEEDED_FOR_MERGE = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB); - - - - + static final Set NO_SUPPORT_DEFAULT_EXPRESSION = SQLDialect.supportedBy(SQLITE); final Table table; final Map, Field> empty; @@ -507,17 +505,14 @@ final class FieldMapsForInsert extends AbstractQueryPart implements UNotYetImple ctx.castMode(previous); } - private final Field patchDefault(Context ctx, Field d, Field f) { - - - - - + static final Field patchDefault(Context ctx, Field d, Field f) { + if (NO_SUPPORT_DEFAULT_EXPRESSION.contains(ctx.dialect())) + return patchDefault0(d, f); return d; } - private final Field patchDefault0(Field d, Field f) { + static final Field patchDefault0(Field d, Field f) { if (d instanceof Default) return orElse(f.getDataType().default_(), () -> DSL.inline(null, f));