diff --git a/jOOQ/src/main/java/org/jooq/InsertOnConflictDoUpdateStep.java b/jOOQ/src/main/java/org/jooq/InsertOnConflictDoUpdateStep.java index 4bb7f47e31..9ae7d4d6ee 100644 --- a/jOOQ/src/main/java/org/jooq/InsertOnConflictDoUpdateStep.java +++ b/jOOQ/src/main/java/org/jooq/InsertOnConflictDoUpdateStep.java @@ -48,6 +48,7 @@ import static org.jooq.SQLDialect.DERBY; // ... import static org.jooq.SQLDialect.FIREBIRD; import static org.jooq.SQLDialect.H2; +// ... import static org.jooq.SQLDialect.HSQLDB; // ... // ... diff --git a/jOOQ/src/main/java/org/jooq/InsertOnConflictWhereStep.java b/jOOQ/src/main/java/org/jooq/InsertOnConflictWhereStep.java index affff16134..91a96e0dee 100644 --- a/jOOQ/src/main/java/org/jooq/InsertOnConflictWhereStep.java +++ b/jOOQ/src/main/java/org/jooq/InsertOnConflictWhereStep.java @@ -46,6 +46,7 @@ import static org.jooq.SQLDialect.CUBRID; import static org.jooq.SQLDialect.DERBY; // ... import static org.jooq.SQLDialect.H2; +// ... import static org.jooq.SQLDialect.MARIADB; // ... import static org.jooq.SQLDialect.POSTGRES; diff --git a/jOOQ/src/main/java/org/jooq/InsertOnDuplicateSetStep.java b/jOOQ/src/main/java/org/jooq/InsertOnDuplicateSetStep.java index 7840f1c87c..706e1afe63 100644 --- a/jOOQ/src/main/java/org/jooq/InsertOnDuplicateSetStep.java +++ b/jOOQ/src/main/java/org/jooq/InsertOnDuplicateSetStep.java @@ -46,6 +46,7 @@ import static org.jooq.SQLDialect.DERBY; // ... import static org.jooq.SQLDialect.FIREBIRD; import static org.jooq.SQLDialect.H2; +// ... import static org.jooq.SQLDialect.HSQLDB; // ... import static org.jooq.SQLDialect.MARIADB; diff --git a/jOOQ/src/main/java/org/jooq/InsertOnDuplicateStep.java b/jOOQ/src/main/java/org/jooq/InsertOnDuplicateStep.java index 9ab20eb7af..fff760bb3e 100644 --- a/jOOQ/src/main/java/org/jooq/InsertOnDuplicateStep.java +++ b/jOOQ/src/main/java/org/jooq/InsertOnDuplicateStep.java @@ -46,6 +46,7 @@ import static org.jooq.SQLDialect.DERBY; // ... import static org.jooq.SQLDialect.FIREBIRD; import static org.jooq.SQLDialect.H2; +// ... import static org.jooq.SQLDialect.HSQLDB; // ... import static org.jooq.SQLDialect.MARIADB; @@ -176,7 +177,7 @@ public interface InsertOnDuplicateStep extends InsertReturning * H2 supports this clause in MySQL mode. */ @NotNull @CheckReturnValue - @Support({ CUBRID, DERBY, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE }) + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE }) InsertOnDuplicateSetStep onDuplicateKeyUpdate(); /** diff --git a/jOOQ/src/main/java/org/jooq/InsertQuery.java b/jOOQ/src/main/java/org/jooq/InsertQuery.java index a5b7a611ee..33a41187df 100644 --- a/jOOQ/src/main/java/org/jooq/InsertQuery.java +++ b/jOOQ/src/main/java/org/jooq/InsertQuery.java @@ -49,6 +49,7 @@ import static org.jooq.SQLDialect.DERBY; import static org.jooq.SQLDialect.FIREBIRD; // ... import static org.jooq.SQLDialect.H2; +// ... import static org.jooq.SQLDialect.HSQLDB; // ... // ... @@ -174,7 +175,7 @@ public interface InsertQuery extends StoreQuery, Insert, * * @see InsertOnDuplicateStep#onDuplicateKeyUpdate() */ - @Support({ CUBRID, DERBY, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE }) + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE }) void onDuplicateKeyUpdate(boolean flag); /** @@ -232,7 +233,7 @@ public interface InsertQuery extends StoreQuery, Insert, * * @see InsertOnDuplicateStep#onDuplicateKeyUpdate() */ - @Support({ CUBRID, DERBY, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE }) + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE }) void addValueForUpdate(Field field, T value); /** @@ -241,7 +242,7 @@ public interface InsertQuery extends StoreQuery, Insert, * * @see InsertOnDuplicateStep#onDuplicateKeyUpdate() */ - @Support({ CUBRID, DERBY, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE }) + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE }) void addValueForUpdate(Field field, Field value); /** @@ -254,7 +255,7 @@ public interface InsertQuery extends StoreQuery, Insert, * * @see InsertOnDuplicateStep#onDuplicateKeyUpdate() */ - @Support({ CUBRID, DERBY, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE }) + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE }) void addValuesForUpdate(Map map); /** diff --git a/jOOQ/src/main/java/org/jooq/UpdatableRecord.java b/jOOQ/src/main/java/org/jooq/UpdatableRecord.java index 74908797d4..762ff03a9b 100644 --- a/jOOQ/src/main/java/org/jooq/UpdatableRecord.java +++ b/jOOQ/src/main/java/org/jooq/UpdatableRecord.java @@ -43,7 +43,9 @@ package org.jooq; import static org.jooq.SQLDialect.CUBRID; // ... import static org.jooq.SQLDialect.DERBY; +import static org.jooq.SQLDialect.FIREBIRD; import static org.jooq.SQLDialect.H2; +// ... import static org.jooq.SQLDialect.HSQLDB; // ... import static org.jooq.SQLDialect.MARIADB; @@ -55,6 +57,7 @@ import static org.jooq.SQLDialect.SQLITE; // ... // ... // ... +import static org.jooq.SQLDialect.YUGABYTE; import java.sql.Statement; import java.util.Collection; @@ -409,7 +412,7 @@ public interface UpdatableRecord> extends TableReco * @see #store() * @see InsertOnDuplicateStep#onDuplicateKeyUpdate() */ - @Support({ CUBRID, DERBY, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE }) int merge() throws DataAccessException; /** @@ -421,7 +424,7 @@ public interface UpdatableRecord> extends TableReco * @throws DataAccessException if something went wrong executing the query * @see #merge() */ - @Support({ CUBRID, DERBY, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE }) int merge(Field... fields) throws DataAccessException; /** @@ -433,7 +436,7 @@ public interface UpdatableRecord> extends TableReco * @throws DataAccessException if something went wrong executing the query * @see #merge() */ - @Support({ CUBRID, DERBY, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE }) int merge(Collection> fields) throws DataAccessException; /** diff --git a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java index 6ae4c63dfa..fe9fee6051 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java @@ -412,6 +412,7 @@ final class InsertQueryImpl extends AbstractStoreQuery impl + case DERBY: case FIREBIRD: case H2: diff --git a/jOOQ/src/main/java/org/jooq/impl/Names.java b/jOOQ/src/main/java/org/jooq/impl/Names.java index 280cf69e7d..495c3e3a63 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Names.java +++ b/jOOQ/src/main/java/org/jooq/impl/Names.java @@ -281,6 +281,7 @@ final class Names { static final Name N_STRING_AGG = unquotedName("string_agg"); static final Name N_STRREVERSE = unquotedName("strreverse"); static final Name N_STR_REPLACE = unquotedName("str_replace"); + static final Name N_ST_NUMINTERIORRINGS = unquotedName("st_numinteriorrings"); static final Name N_SUB = unquotedName("sub"); static final Name N_SUBSTR = unquotedName("substr"); static final Name N_SYSTEM_RANGE = unquotedName("system_range"); diff --git a/jOOQ/src/main/java/org/jooq/impl/StNumInteriorRings.java b/jOOQ/src/main/java/org/jooq/impl/StNumInteriorRings.java index 723d3df8d4..068797ad35 100644 --- a/jOOQ/src/main/java/org/jooq/impl/StNumInteriorRings.java +++ b/jOOQ/src/main/java/org/jooq/impl/StNumInteriorRings.java @@ -170,6 +170,10 @@ package org.jooq.impl; + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java b/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java index 0d9d0fd833..84741ac4b7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java @@ -40,7 +40,17 @@ package org.jooq.impl; import static java.lang.Boolean.TRUE; import static java.util.Arrays.asList; // ... +// ... +// ... +// ... +import static org.jooq.SQLDialect.DERBY; +import static org.jooq.SQLDialect.IGNITE; +// ... +// ... import static org.jooq.SQLDialect.SQLITE; +// ... +// ... +// ... import static org.jooq.conf.SettingsTools.updatablePrimaryKeys; import static org.jooq.impl.RecordDelegate.delegate; import static org.jooq.impl.RecordDelegate.RecordLifecycleType.DELETE; @@ -88,8 +98,9 @@ import org.jooq.tools.StringUtils; */ @org.jooq.Internal public class UpdatableRecordImpl> extends TableRecordImpl implements UpdatableRecord { - private static final JooqLogger log = JooqLogger.getLogger(UpdatableRecordImpl.class); - private static final Set NO_SUPPORT_FOR_UPDATE = SQLDialect.supportedBy(SQLITE); + private static final JooqLogger log = JooqLogger.getLogger(UpdatableRecordImpl.class); + private static final Set NO_SUPPORT_FOR_UPDATE = SQLDialect.supportedBy(SQLITE); + private static final Set NO_SUPPORT_MERGE_RETURNING = SQLDialect.supportedBy(DERBY, IGNITE); public UpdatableRecordImpl(Table table) { super(table); @@ -332,8 +343,11 @@ public class UpdatableRecordImpl> extends TableReco // [#1596] Check if the record was really changed in the database // [#1859] Specify the returning clause if needed - // [#10051] See if we can return keys also on MERGE - Collection> key = merge ? null : setReturningIfNeeded(query); + // [#10051] Not all dialects support RETURNING on MERGE + Collection> key = merge && NO_SUPPORT_MERGE_RETURNING.contains(create().dialect()) + ? null + : setReturningIfNeeded(query); + int result = query.execute(); checkIfChanged(result, version, timestamp);