[jOOQ/jOOQ#10051] Added YUGABYTE support for UpdatableRecord.merge()
This commit is contained in:
parent
9437d43466
commit
dd9acba28a
@ -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;
|
||||
// ...
|
||||
// ...
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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<R extends Record> 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<R> onDuplicateKeyUpdate();
|
||||
|
||||
/**
|
||||
|
||||
@ -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<R extends Record> extends StoreQuery<R>, Insert<R>,
|
||||
*
|
||||
* @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<R extends Record> extends StoreQuery<R>, Insert<R>,
|
||||
*
|
||||
* @see InsertOnDuplicateStep#onDuplicateKeyUpdate()
|
||||
*/
|
||||
@Support({ CUBRID, DERBY, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE })
|
||||
@Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE })
|
||||
<T> void addValueForUpdate(Field<T> field, T value);
|
||||
|
||||
/**
|
||||
@ -241,7 +242,7 @@ public interface InsertQuery<R extends Record> extends StoreQuery<R>, Insert<R>,
|
||||
*
|
||||
* @see InsertOnDuplicateStep#onDuplicateKeyUpdate()
|
||||
*/
|
||||
@Support({ CUBRID, DERBY, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE })
|
||||
@Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTE })
|
||||
<T> void addValueForUpdate(Field<T> field, Field<T> value);
|
||||
|
||||
/**
|
||||
@ -254,7 +255,7 @@ public interface InsertQuery<R extends Record> extends StoreQuery<R>, Insert<R>,
|
||||
*
|
||||
* @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);
|
||||
|
||||
/**
|
||||
|
||||
@ -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<R extends UpdatableRecord<R>> 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<R extends UpdatableRecord<R>> 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<R extends UpdatableRecord<R>> 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<? extends Field<?>> fields) throws DataAccessException;
|
||||
|
||||
/**
|
||||
|
||||
@ -412,6 +412,7 @@ final class InsertQueryImpl<R extends Record> extends AbstractStoreQuery<R> impl
|
||||
|
||||
|
||||
|
||||
|
||||
case DERBY:
|
||||
case FIREBIRD:
|
||||
case H2:
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -170,6 +170,10 @@ package org.jooq.impl;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -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<R extends UpdatableRecord<R>> extends TableRecordImpl<R> implements UpdatableRecord<R> {
|
||||
private static final JooqLogger log = JooqLogger.getLogger(UpdatableRecordImpl.class);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_FOR_UPDATE = SQLDialect.supportedBy(SQLITE);
|
||||
private static final JooqLogger log = JooqLogger.getLogger(UpdatableRecordImpl.class);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_FOR_UPDATE = SQLDialect.supportedBy(SQLITE);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_MERGE_RETURNING = SQLDialect.supportedBy(DERBY, IGNITE);
|
||||
|
||||
public UpdatableRecordImpl(Table<R> table) {
|
||||
super(table);
|
||||
@ -332,8 +343,11 @@ public class UpdatableRecordImpl<R extends UpdatableRecord<R>> 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<Field<?>> key = merge ? null : setReturningIfNeeded(query);
|
||||
// [#10051] Not all dialects support RETURNING on MERGE
|
||||
Collection<Field<?>> key = merge && NO_SUPPORT_MERGE_RETURNING.contains(create().dialect())
|
||||
? null
|
||||
: setReturningIfNeeded(query);
|
||||
|
||||
int result = query.execute();
|
||||
checkIfChanged(result, version, timestamp);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user