diff --git a/jOOQ/src/main/java/org/jooq/SelectForUpdateWaitStep.java b/jOOQ/src/main/java/org/jooq/SelectForUpdateWaitStep.java index f895e3f457..634c1992c6 100644 --- a/jOOQ/src/main/java/org/jooq/SelectForUpdateWaitStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectForUpdateWaitStep.java @@ -38,6 +38,7 @@ package org.jooq; // ... +import static org.jooq.SQLDialect.MARIADB; import static org.jooq.SQLDialect.MYSQL; // ... import static org.jooq.SQLDialect.POSTGRES; @@ -105,19 +106,16 @@ import static org.jooq.SQLDialect.POSTGRES; */ public interface SelectForUpdateWaitStep extends SelectOptionStep { - - - - - - - - - - - - - + /** + * Add a WAIT clause to the FOR UPDATE clause at + * the end of the query. + *

+ * Be careful not to confuse this with {@link Object#wait(long)} ! + * + * @see SelectQuery#setForUpdateWait(int) see LockProvider for more details + */ + @Support({ MARIADB }) + SelectOptionStep wait(int seconds); /** * Add a NOWAIT clause to the FOR UPDATE clause at @@ -125,7 +123,7 @@ public interface SelectForUpdateWaitStep extends SelectOptionS * * @see SelectQuery#setForUpdateNoWait() see LockProvider for more details */ - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) SelectOptionStep noWait(); /** diff --git a/jOOQ/src/main/java/org/jooq/SelectQuery.java b/jOOQ/src/main/java/org/jooq/SelectQuery.java index 321ada3a55..d5fe04a41c 100644 --- a/jOOQ/src/main/java/org/jooq/SelectQuery.java +++ b/jOOQ/src/main/java/org/jooq/SelectQuery.java @@ -53,6 +53,7 @@ import static org.jooq.SQLDialect.HSQLDB; // ... import static org.jooq.SQLDialect.MARIADB; // ... +// ... import static org.jooq.SQLDialect.MYSQL; // ... // ... @@ -990,27 +991,24 @@ public interface SelectQuery extends Select, ConditionProvi @Support({ DERBY, FIREBIRD, H2, HSQLDB, MYSQL, POSTGRES }) void setForUpdateOf(Table... tables); - - - - - - - - - - - - - - - - - - - - - + /** + * Some RDBMS allow for specifying the locking mode for the applied + * FOR UPDATE clause. In this case, the session will wait for + * some seconds, before aborting the lock acquirement if the + * lock is not available. + *

+ * This automatically sets the {@link #setForUpdate(boolean)} flag, and + * unsets the {@link #setForShare(boolean)} flag, if it was previously set. + *

+ * This has been observed to be supported by any of these dialects: + *

+ * + * @param seconds The number of seconds to wait for a lock + */ + @Support({ MARIADB }) + void setForUpdateWait(int seconds); /** * Some RDBMS allow for specifying the locking mode for the applied @@ -1025,7 +1023,7 @@ public interface SelectQuery extends Select, ConditionProvi *
  • Oracle
  • * */ - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) void setForUpdateNoWait(); /** diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java index 422880a4ae..6df5af239d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java @@ -1788,14 +1788,11 @@ final class SelectImpl extends AbstractResultQuery imp forUpdateOfTables = new TableList(Arrays.asList(tables)); } - - - - - - - - - + @Override + public final void setForUpdateWait(int seconds) { + setForUpdate(true); + forUpdateWaitMode = ForUpdateWaitMode.WAIT; + forUpdateWait = seconds; + } @Override public final void setForUpdateNoWait() {