[jOOQ/jOOQ#9864] Support H2 style MERGE

This commit is contained in:
Lukas Eder 2021-11-03 15:49:00 +01:00
parent 4e64c74b02
commit 046e229fa6
2 changed files with 34 additions and 7 deletions

View File

@ -143,11 +143,7 @@ final class FieldMapForUpdate extends AbstractQueryPartMap<Field<?>, 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) {

View File

@ -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