From 046e229fa67febeafaa95558b252c60db2ab125f Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 3 Nov 2021 15:49:00 +0100 Subject: [PATCH] [jOOQ/jOOQ#9864] Support H2 style MERGE --- .../java/org/jooq/impl/FieldMapForUpdate.java | 6 +--- .../main/java/org/jooq/impl/MergeImpl.java | 35 +++++++++++++++++-- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java b/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java index 930e692d29..fcbd2b2bea 100644 --- a/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java +++ b/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java @@ -143,11 +143,7 @@ final class FieldMapForUpdate extends AbstractQueryPartMap, Field> i } static final Row removeReadonly(Context ctx, Row row) { - - - - - return row; + return removeReadonly(ctx, row, row); } static final Row removeReadonly(Context ctx, Row checkRow, Row removeRow) { diff --git a/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java b/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java index e429deabe2..2b8fc6ad2f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java @@ -59,6 +59,8 @@ import static org.jooq.SQLDialect.HSQLDB; // ... // ... import static org.jooq.conf.ParamType.INLINED; +import static org.jooq.conf.WriteIfReadonly.IGNORE; +import static org.jooq.conf.WriteIfReadonly.THROW; import static org.jooq.impl.DSL.condition; import static org.jooq.impl.DSL.exists; import static org.jooq.impl.DSL.insertInto; @@ -86,6 +88,8 @@ import static org.jooq.impl.Keywords.K_WHERE; import static org.jooq.impl.Keywords.K_WITH_PRIMARY_KEY; import static org.jooq.impl.QueryPartListView.wrap; import static org.jooq.impl.Tools.EMPTY_FIELD; +import static org.jooq.impl.Tools.collect; +import static org.jooq.impl.Tools.filter; import static org.jooq.impl.Tools.map; import static org.jooq.impl.Tools.nullSafe; import static org.jooq.impl.Tools.BooleanDataKey.DATA_WRAP_DERIVED_TABLES_IN_PARENTHESES; @@ -172,6 +176,7 @@ import org.jooq.Table; import org.jooq.TableLike; import org.jooq.UniqueKey; import org.jooq.conf.ParamType; +import org.jooq.exception.DataTypeException; import org.jooq.impl.QOM.UNotYetImplemented; import org.jooq.impl.Tools.DataExtendedKey; import org.jooq.tools.StringUtils; @@ -1392,13 +1397,17 @@ implements } private final void toSQLH2Merge(Context ctx) { + + + + ctx.visit(K_MERGE_INTO) .sql(' ') .declareTables(true, c -> c.visit(table)) .formatSeparator(); ctx.sql('(') - .visit(wrap(getUpsertFields()).qualify(false)) + .visit(wrap(collect(removeReadonly(ctx, getUpsertFields()))).qualify(false)) .sql(')'); if (!getUpsertKeys().isEmpty()) @@ -1413,7 +1422,7 @@ implements else ctx.formatSeparator() .visit(K_VALUES).sql(" (") - .visit(getUpsertValues()) + .visit(wrap(collect(removeReadonly(ctx, getUpsertFields(), getUpsertValues())))) .sql(')'); } @@ -1438,6 +1447,28 @@ implements + + + + + + + + + + + + + + + + + + + + + +