All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jooq.SelectQuery Maven / Gradle / Ivy

There is a newer version: 3.19.15
Show newest version
/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Other licenses:
 * -----------------------------------------------------------------------------
 * Commercial licenses for this work are available. These replace the above
 * ASL 2.0 and offer limited warranties, support, maintenance, and commercial
 * database integrations.
 *
 * For more information, please visit: https://www.jooq.org/legal/licensing
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */
package org.jooq;

// ...
// ...
// ...
// ...
// ...
// ...
import static org.jooq.SQLDialect.CUBRID;
// ...
// ...
import static org.jooq.SQLDialect.DERBY;
import static org.jooq.SQLDialect.DUCKDB;
// ...
import static org.jooq.SQLDialect.FIREBIRD;
// ...
import static org.jooq.SQLDialect.H2;
// ...
import static org.jooq.SQLDialect.HSQLDB;
import static org.jooq.SQLDialect.IGNITE;
// ...
// ...
import static org.jooq.SQLDialect.MARIADB;
// ...
// ...
// ...
// ...
import static org.jooq.SQLDialect.MYSQL;
// ...
// ...
// ...
// ...
import static org.jooq.SQLDialect.POSTGRES;
// ...
// ...
// ...
// ...
// ...
import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
// ...
import static org.jooq.SQLDialect.TRINO;
// ...
import static org.jooq.SQLDialect.YUGABYTEDB;

import java.util.Collection;

import org.jooq.exception.DataAccessException;
import org.jooq.impl.DSL;
import org.jooq.impl.QOM.JoinHint;

import org.jetbrains.annotations.NotNull;

/**
 * A SELECT statement (model API).
 * 

* This type is the model API representation of a {@link Select} statement, * which can be mutated after creation. The advantage of this API compared to * the DSL API is a more simple approach to writing dynamic SQL. *

* Instances can be created using {@link DSLContext#selectQuery()} and overloads. * * @author Lukas Eder */ public interface SelectQuery extends Select, ConditionProvider { /** * Add a list of select fields. * * @param fields */ @Support void addSelect(SelectFieldOrAsterisk... fields); /** * Add a list of select fields. * * @param fields */ @Support void addSelect(Collection fields); /** * Add "distinct" keyword to the select clause. */ @Support void setDistinct(boolean distinct); /** * Add a PostgreSQL-specific DISTINCT ON (fields…) clause. *

* This also sets the distinct flag to true */ @Support({ CUBRID, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addDistinctOn(SelectFieldOrAsterisk... fields); /** * Add a PostgreSQL-specific DISTINCT ON (fields…) clause. *

* This also sets the distinct flag to true */ @Support({ CUBRID, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addDistinctOn(Collection fields); /** * Add a T-SQL style INTO clause to the SELECT * statement to create a new table from a SELECT statement. */ @Support({ CUBRID, DERBY, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB }) void setInto(Table table); /** * Add tables to the table product. * * @param from The added tables */ @Support void addFrom(TableLike from); /** * Add tables to the table product. * * @param from The added tables */ @Support void addFrom(TableLike... from); /** * Add tables to the table product. * * @param from The added tables */ @Support void addFrom(Collection> from); /** * Joins the existing table product to a new table using a condition, * connecting them with each other with {@link Operator#AND}. * * @param table The joined table * @param condition The joining condition */ @Support void addJoin(TableLike table, Condition condition); /** * Joins the existing table product to a new table using a condition, * connecting them with each other with {@link Operator#AND}. * * @param table The joined table * @param conditions The joining conditions */ @Support void addJoin(TableLike table, Condition... conditions); /** * Joins the existing table product to a new table using a condition, * connecting them with each other with {@link Operator#AND}. * * @param table The joined table * @param type The type of join * @param condition The joining condition */ @Support void addJoin(TableLike table, JoinType type, Condition condition); /** * Joins the existing table product to a new table using a condition, * connecting them with each other with {@link Operator#AND}. * * @param table The joined table * @param type The type of join * @param conditions The joining conditions */ @Support void addJoin(TableLike table, JoinType type, Condition... conditions); /** * Joins the existing table product to a new table using a condition, * connecting them with each other with {@link Operator#AND}. *

* {@link JoinHint} are a commercial only feature and are ignored in the * jOOQ Open Source Edition. * * @param table The joined table * @param type The type of join * @param hint The hint to apply to the join * @param condition The joining condition */ @Support void addJoin(TableLike table, JoinType type, JoinHint hint, Condition condition); /** * Joins the existing table product to a new table using a condition, * connecting them with each other with {@link Operator#AND}. *

* {@link JoinHint} are a commercial only feature and are ignored in the * jOOQ Open Source Edition. * * @param table The joined table * @param type The type of join * @param hint The hint to apply to the join * @param conditions The joining conditions */ @Support void addJoin(TableLike table, JoinType type, JoinHint hint, Condition... conditions); /** * Joins the existing table product to a new table with a USING * clause. *

* If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * * @param table The joined table * @param fields The fields for the USING clause */ @Support void addJoinUsing(TableLike table, Collection> fields); /** * Joins the existing table product to a new table with a USING * clause. *

* If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * * @param table The joined table * @param type The type of join * @param fields The fields for the USING clause */ @Support void addJoinUsing(TableLike table, JoinType type, Collection> fields); /** * Joins the existing table product to a new table with a USING * clause. *

* If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. *

* {@link JoinHint} are a commercial only feature and are ignored in the * jOOQ Open Source Edition. * * @param table The joined table * @param type The type of join * @param hint The hint to apply to the join * @param fields The fields for the USING clause */ @Support void addJoinUsing(TableLike table, JoinType type, JoinHint hint, Collection> fields); /** * Joins the existing table product to a new table using a foreign key. * * @param table The joined table * @param type The type of join * @see TableOnStep#onKey(ForeignKey) * @throws DataAccessException If there is no non-ambiguous key definition * known to jOOQ. Please note that if you evolve your * schema, a previously non-ambiguous ON KEY clause * can suddenly become ambiguous on an existing query, so use * this clause with care. */ @Support void addJoinOnKey(TableLike table, JoinType type) throws DataAccessException; /** * Joins the existing table product to a new table using a foreign key. * * @param table The joined table * @param type The type of join * @param keyFields The foreign key fields * @see TableOnStep#onKey(ForeignKey) * @throws DataAccessException If there is no non-ambiguous key definition * known to jOOQ. Please note that if you evolve your * schema, a previously non-ambiguous ON KEY clause * can suddenly become ambiguous on an existing query, so use * this clause with care. */ @Support void addJoinOnKey(TableLike table, JoinType type, TableField... keyFields) throws DataAccessException; /** * Joins the existing table product to a new table using a foreign key. *

* {@link JoinHint} are a commercial only feature and are ignored in the * jOOQ Open Source Edition. * * @param table The joined table * @param type The type of join * @param hint The hint to apply to the join * @see TableOnStep#onKey(ForeignKey) * @throws DataAccessException If there is no non-ambiguous key definition * known to jOOQ. Please note that if you evolve your * schema, a previously non-ambiguous ON KEY clause * can suddenly become ambiguous on an existing query, so use * this clause with care. */ @Support void addJoinOnKey(TableLike table, JoinType type, JoinHint hint) throws DataAccessException; /** * Joins the existing table product to a new table using a foreign key. *

* {@link JoinHint} are a commercial only feature and are ignored in the * jOOQ Open Source Edition. * * @param table The joined table * @param type The type of join * @param hint The hint to apply to the join * @param keyFields The foreign key fields * @see TableOnStep#onKey(ForeignKey) * @throws DataAccessException If there is no non-ambiguous key definition * known to jOOQ. Please note that if you evolve your * schema, a previously non-ambiguous ON KEY clause * can suddenly become ambiguous on an existing query, so use * this clause with care. */ @Support void addJoinOnKey(TableLike table, JoinType type, JoinHint hint, TableField... keyFields) throws DataAccessException; /** * Joins the existing table product to a new table using a foreign key. * * @param table The joined table * @param type The type of join * @param key The foreign key * @see TableOnStep#onKey(ForeignKey) */ @Support void addJoinOnKey(TableLike table, JoinType type, ForeignKey key); /** * Joins the existing table product to a new table using a foreign key. *

* {@link JoinHint} are a commercial only feature and are ignored in the * jOOQ Open Source Edition. * * @param table The joined table * @param type The type of join * @param hint The hint to apply to the join * @param key The foreign key * @see TableOnStep#onKey(ForeignKey) */ @Support void addJoinOnKey(TableLike table, JoinType type, JoinHint hint, ForeignKey key); /** * Adds grouping fields. *

* Calling this with an empty argument list will result in an empty * GROUP BY () clause being rendered. * * @param fields The grouping fields */ @Support void addGroupBy(GroupField... fields); /** * Adds grouping fields. *

* Calling this with an empty argument list will result in an empty * GROUP BY () clause being rendered. * * @param fields The grouping fields */ @Support void addGroupBy(Collection fields); /** * Specifies the GROUP BY DISTINCT clause. *

* This is mostly useful when combined with * {@link DSL#groupingSets(Field[]...)} to remove duplicate grouping set * results prior to aggregation and projection. */ @Support({ POSTGRES }) void setGroupByDistinct(boolean groupByDistinct); /** * Adds a new condition to the having clause of the query, connecting it * with each other with {@link Operator#AND}. * * @param condition The condition */ @Support void addHaving(Condition condition); /** * Adds new conditions to the having clause of the query, connecting them * with each other with {@link Operator#AND}. * * @param conditions The condition */ @Support void addHaving(Condition... conditions); /** * Adds new conditions to the having clause of the query, connecting them * with each other with {@link Operator#AND}. * * @param conditions The condition */ @Support void addHaving(Collection conditions); /** * Adds a new condition to the having clause of query, connecting it with * each other with operator. * * @param operator The operator to use to add the conditions to the existing * conditions * @param condition The condition */ @Support void addHaving(Operator operator, Condition condition); /** * Adds new conditions to the having clause of query, connecting them with * each other with operator. * * @param operator The operator to use to add the conditions to the existing * conditions * @param conditions The condition */ @Support void addHaving(Operator operator, Condition... conditions); /** * Adds new conditions to the having clause of query, connecting them with * each other with operator. * * @param operator The operator to use to add the conditions to the existing * conditions * @param conditions The condition */ @Support void addHaving(Operator operator, Collection conditions); /** * Adds new window definitions to the window clause of the query. * * @param definitions The definitions */ @Support({ CUBRID, DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addWindow(WindowDefinition... definitions); /** * Adds new window definitions to the window clause of the query. * * @param definitions The definitions */ @Support({ CUBRID, DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addWindow(Collection definitions); /** * Adds a new condition to the qualify clause of the query, connecting it * with each other with {@link Operator#AND}. * * @param condition The condition */ @Support({ CUBRID, DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addQualify(Condition condition); /** * Adds new conditions to the qualify clause of the query, connecting them * with each other with {@link Operator#AND}. * * @param conditions The condition */ @Support({ CUBRID, DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addQualify(Condition... conditions); /** * Adds new conditions to the qualify clause of the query, connecting them * with each other with {@link Operator#AND}. * * @param conditions The condition */ @Support({ CUBRID, DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addQualify(Collection conditions); /** * Adds a new condition to the qualify clause of query, connecting it with * each other with operator. * * @param operator The operator to use to add the conditions to the existing * conditions * @param condition The condition */ @Support({ CUBRID, DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addQualify(Operator operator, Condition condition); /** * Adds new conditions to the qualify clause of query, connecting them with * each other with operator. * * @param operator The operator to use to add the conditions to the existing * conditions * @param conditions The condition */ @Support({ CUBRID, DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addQualify(Operator operator, Condition... conditions); /** * Adds new conditions to the qualify clause of query, connecting them with * each other with operator. * * @param operator The operator to use to add the conditions to the existing * conditions * @param conditions The condition */ @Support({ CUBRID, DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addQualify(Operator operator, Collection conditions); /** * Add an Oracle-style hint to the select clause. *

* Example:


     * DSLContext create = DSL.using(configuration);
     *
     * create.select(field1, field2)
     *       .hint("/*+ALL_ROWS*/")
     *       .from(table1)
     *       .execute();
     * 
*

* You can also use this clause for any other database, that accepts hints * or options at the same syntactic location, e.g. for MySQL's * SQL_CALC_FOUND_ROWS option:


     * create.select(field1, field2)
     *       .hint("SQL_CALC_FOUND_ROWS")
     *       .from(table1)
     *       .fetch();
     * 
*

* The outcome of such a query is this:


     * SELECT [hint] field1, field2 FROM table1
     * 
*

* For SQL Server style table hints, see {@link Table#with(String)} * * @see Table#with(String) */ @Support void addHint(String hint); /** * Add a SQL Server-style query hint to the select clause. *

* Example:


     * DSLContext create = DSL.using(configuration);
     *
     * create.select(field1, field2)
     *       .from(table1)
     *       .option("OPTION (OPTIMIZE FOR UNKNOWN)")
     *       .execute();
     * 
*

* You can also use this clause for any other database, that accepts hints * or options at the same syntactic location, e.g. for DB2's isolation clause:


     * create.select(field1, field2)
     *       .from(table1)
     *       .option("WITH RR USE AND KEEP EXCLUSIVE LOCKS")
     *       .execute();
     * 
*

* The outcome of such a query is this:


     * SELECT field1, field2 FROM table1 [option]
     * 
*

* For SQL Server style table hints, see {@link Table#with(String)} * * @see Table#with(String) */ @Support void addOption(String option); // ------------------------------------------------------------------------ // Methods from ConditionProvider, OrderProvider, LockProvider // ------------------------------------------------------------------------ @Override @Support void addConditions(Condition condition); @Override @Support void addConditions(Condition... conditions); @Override @Support void addConditions(Collection conditions); @Override @Support void addConditions(Operator operator, Condition condition); @Override @Support void addConditions(Operator operator, Condition... conditions); @Override @Support void addConditions(Operator operator, Collection conditions); /** * Adds ordering fields. * * @param fields The ordering fields */ @Support void addOrderBy(OrderField... fields); /** * Adds ordering fields. * * @param fields The ordering fields */ @Support void addOrderBy(Collection> fields); /** * Adds ordering fields. *

* Indexes start at 1 in SQL! *

* Note, you can use addOrderBy(DSL.val(1).desc()) or * addOrderBy(DSL.literal(1).desc()) to apply descending * ordering * * @param fieldIndexes The ordering fields */ @Support void addOrderBy(int... fieldIndexes); /** * Adds seeking fields. * * @param fields The seeking fields */ @Support void addSeekAfter(Field... fields); /** * Adds seeking fields. * * @param fields The seeking fields */ @Support void addSeekAfter(Collection> fields); /** * Adds seeking fields. * * @param fields The seeking fields * @deprecated - [#7461] - SEEK BEFORE is not implemented correctly */ @Deprecated @Support void addSeekBefore(Field... fields); /** * Adds seeking fields. * * @param fields The seeking fields * @deprecated - [#7461] - SEEK BEFORE is not implemented correctly */ @Deprecated @Support void addSeekBefore(Collection> fields); /** * Add a 0-based OFFSET clause to the query. *

* Offsets are 0-based as they describe the number of rows to skip. *

* If there is no LIMIT … OFFSET or TOP clause in * your RDBMS, or if your RDBMS does not natively support offsets, this is * emulated with a ROW_NUMBER() window function and nested * SELECT statements. */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addOffset(Number offset); /** * Add a 0-based OFFSET clause to the query. *

* Offsets are 0-based as they describe the number of rows to skip. *

* If there is no LIMIT … OFFSET or TOP clause in * your RDBMS, or if your RDBMS does not natively support offsets, this is * emulated with a ROW_NUMBER() window function and nested * SELECT statements. */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB }) void addOffset(Field offset); /** * Limit the results of this select. *

* This is the same as calling {@link #addLimit(Number, Number)} with offset * = 0 * * @param numberOfRows The number of rows to return */ @Support void addLimit(Number numberOfRows); /** * Limit the results of this select. *

* Note that some dialects do not support bind values at all in * LIMIT or TOP clauses! *

* If there is no LIMIT or TOP clause in your * RDBMS, or the LIMIT or TOP clause does not * support bind values, this may be emulated with a * ROW_NUMBER() window function and nested SELECT * statements. *

* This is the same as calling {@link #addLimit(Number, Number)} with offset * = 0 * * @param numberOfRows The number of rows to return */ @Support void addLimit(Field numberOfRows); /** * Limit the results of this select. *

* Note that some dialects do not support bind values at all in * LIMIT or TOP clauses! *

* If there is no LIMIT or TOP clause in your * RDBMS, or if your RDBMS does not natively support offsets, this is * emulated with a ROW_NUMBER() window function and nested * SELECT statements. * * @param offset The lowest offset starting at 0 * @param numberOfRows The number of rows to return */ @Support void addLimit(Number offset, Number numberOfRows); /** * Limit the results of this select. *

* Note that some dialects do not support bind values at all in * LIMIT or TOP clauses! *

* If there is no LIMIT or TOP clause in your * RDBMS, or the LIMIT or TOP clause does not * support bind values, or if your RDBMS does not natively support offsets, * this may be emulated with a ROW_NUMBER() window function * and nested SELECT statements. * * @param offset The lowest offset starting at 0 * @param numberOfRows The number of rows to return */ @Support void addLimit(Field offset, Number numberOfRows); /** * Limit the results of this select. *

* Note that some dialects do not support bind values at all in * LIMIT or TOP clauses! *

* If there is no LIMIT or TOP clause in your * RDBMS, or the LIMIT or TOP clause does not * support bind values, or if your RDBMS does not natively support offsets, * this may be emulated with a ROW_NUMBER() window function * and nested SELECT statements. * * @param offset The lowest offset starting at 0 * @param numberOfRows The number of rows to return */ @Support void addLimit(Number offset, Field numberOfRows); /** * Limit the results of this select. *

* Note that some dialects do not support bind values at all in * LIMIT or TOP clauses! *

* If there is no LIMIT or TOP clause in your * RDBMS, or the LIMIT or TOP clause does not * support bind values, or if your RDBMS does not natively support offsets, * this may be emulated with a ROW_NUMBER() window function * and nested SELECT statements. * * @param offset The lowest offset starting at 0 * @param numberOfRows The number of rows to return */ @Support void addLimit(Field offset, Field numberOfRows); /** * Add the PERCENT clause to a LIMIT clause. */ @Support({ H2 }) void setLimitPercent(boolean percent); /** * Add the WITH TIES clause to a LIMIT clause. */ @Support({ CUBRID, DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, TRINO, YUGABYTEDB }) void setWithTies(boolean withTies); /** * Sets the "FOR UPDATE" lock mode onto the query. *

*

Native implementation
*

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

*

*

Emulation
*

* {@link SQLDialect#SQLSERVER}: jOOQ will try to lock the database record * using WITH (ROWLOCK, UPDLOCK) hints. *

Not supported
*

* These dialects are known not to support the FOR UPDATE * clause in regular SQL: *

    *
  • {@link SQLDialect#SQLITE}
  • *
*

* If your dialect does not support this clause, jOOQ will still render it, * if you apply it to your query. This might then cause syntax errors * reported either by your database or your JDBC driver. *

* You shouldn't combine this with {@link #setForShare(boolean)} * * @param forUpdate The flag's value */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, YUGABYTEDB }) void setForUpdate(boolean forUpdate); /** * Sets the "FOR NO KEY UPDATE" lock mode onto the query. */ @Support({ POSTGRES, YUGABYTEDB }) void setForNoKeyUpdate(boolean forNoKeyUpdate); /** * Some RDBMS allow for specifying the fields that should be locked by the * FOR UPDATE clause, instead of the full row. *

* 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 natively supported by any of these dialects: *

    *
  • DB2
  • *
  • Derby
  • *
  • H2
  • *
  • HSQLDB
  • *
  • Ingres
  • *
  • Oracle
  • *
  • Sybase
  • *
*

* Note, that {@link SQLDialect#DB2} has some stricter requirements * regarding the updatability of fields. Refer to the DB2 documentation for * further details * * @param fields The fields that should be locked * * @deprecated [#5218] - 3.14.0 - Use {@link #setForLockModeOf(Field...)} */ @Deprecated(forRemoval = true, since = "3.14") @Support({ DERBY, FIREBIRD, H2, HSQLDB }) void setForUpdateOf(Field... fields); /** * Some RDBMS allow for specifying the fields that should be locked by the * FOR UPDATE clause, instead of the full row. *

* * @see #setForUpdateOf(Field...) * * @deprecated [#5218] - 3.14.0 - Use {@link #setForLockModeOf(Collection)} */ @Deprecated(forRemoval = true, since = "3.14") @Support({ DERBY, FIREBIRD, H2, HSQLDB }) void setForUpdateOf(Collection> fields); /** * Some RDBMS allow for specifying the tables that should be locked by the * FOR UPDATE clause, instead of the full row. *

* 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 natively supported by any of these dialects: *

    *
  • Postgres
  • *
  • H2
  • *
  • HSQLDB
  • *
  • Sybase
  • *
*

* jOOQ emulates this by locking all known fields of [tables] * for any of these dialects: *

    *
  • DB2
  • *
  • Derby
  • *
  • Ingres
  • *
  • Oracle
  • *
* * @param tables The tables that should be locked * * @deprecated [#5218] - 3.14.0 - Use {@link #setForLockModeOf(Table...)} */ @Deprecated(forRemoval = true, since = "3.14") @Support({ DERBY, FIREBIRD, H2, HSQLDB, MYSQL, POSTGRES, YUGABYTEDB }) 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: *

    *
  • Oracle
  • *
* * @param seconds The number of seconds to wait for a lock * * @deprecated [#5218] - 3.14.0 - Use {@link #setForLockModeWait(int)} */ @Deprecated(forRemoval = true, since = "3.14") @Support({ MARIADB }) void setForUpdateWait(int seconds); /** * Some RDBMS allow for specifying the locking mode for the applied * FOR UPDATE clause. In this case, the session will not wait * 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: *

    *
  • Oracle
  • *
* * @deprecated [#5218] - 3.14.0 - Use {@link #setForLockModeNoWait()} */ @Deprecated(forRemoval = true, since = "3.14") @Support({ MARIADB, MYSQL, POSTGRES, YUGABYTEDB }) void setForUpdateNoWait(); /** * Some RDBMS allow for specifying the locking mode for the applied * FOR UPDATE clause. In this case, the session will skip all * locked rows from the select statement, whose 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: *

    *
  • Oracle
  • *
* * @deprecated [#5218] - 3.14.0 - Use {@link #setForLockModeSkipLocked()} */ @Deprecated(forRemoval = true, since = "3.14") @Support({ MYSQL, POSTGRES, YUGABYTEDB }) void setForUpdateSkipLocked(); /** * Sets the "FOR SHARE" lock mode onto the query. *

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

*

* If your dialect does not support this clause, jOOQ will still render it, * if you apply it to your query. This might then cause syntax errors * reported either by your database or your JDBC driver. *

* You shouldn't combine this with {@link #setForUpdate(boolean)} * * @param forShare The flag's value */ @Support({ MARIADB, MYSQL, POSTGRES, YUGABYTEDB }) void setForShare(boolean forShare); /** * Sets the "FOR KEY SHARE" lock mode onto the query. */ @Support({ POSTGRES, YUGABYTEDB }) void setForKeyShare(boolean forKeyShare); /** * Some RDBMS allow for specifying the fields that should be locked by the * FOR <lock_mode> clause, instead of the full row. *

* In case no lock mode has been set yet, it will implicitly be set to * UPDATE (i.e. {@link #setForUpdate(boolean)}). *

* Depending on the dialect and lock mode this flag may or may not be * supported. *

* Note, that {@link SQLDialect#DB2} has some stricter requirements * regarding the updatability of fields. Refer to the DB2 documentation for * further details * * @param fields The fields that should be locked */ @Support({ DERBY, FIREBIRD, H2, HSQLDB }) void setForLockModeOf(Field... fields); /** * Some RDBMS allow for specifying the fields that should be locked by the * FOR <lock_mode> clause, instead of the full row. *

* * @see #setForLockModeOf(Field...) */ @Support({ DERBY, FIREBIRD, H2, HSQLDB }) void setForLockModeOf(Collection> fields); /** * Some RDBMS allow for specifying the tables that should be locked by the * FOR <lock_mode> clause, instead of the full row. *

* In case no lock mode has been set yet, it will implicitly be set to * UPDATE (i.e. {@link #setForUpdate(boolean)}). *

* Depending on the dialect and lock mode this flag may or may not be * supported. * * @param tables The tables that should be locked */ @Support({ DERBY, FIREBIRD, H2, HSQLDB, MYSQL, POSTGRES, YUGABYTEDB }) void setForLockModeOf(Table... tables); /** * Some RDBMS allow for specifying the locking mode for the applied * FOR <lock_mode> clause. In this case, the session will * wait for some seconds, before aborting the lock acquirement * if the lock is not available. *

* In case no lock mode has been set yet, it will implicitly be set to * UPDATE (i.e. {@link #setForUpdate(boolean)}). *

* Depending on the dialect and lock mode this flag may or may not be * supported. * * @param seconds The number of seconds to wait for a lock */ @Support({ H2, MARIADB, MYSQL, POSTGRES }) void setForLockModeWait(int seconds); /** * Some RDBMS allow for specifying the locking mode for the applied * FOR <lock_mode> clause. In this case, the session will * not wait before aborting the lock acquirement if the lock is not * available. *

* In case no lock mode has been set yet, it will implicitly be set to * UPDATE (i.e. {@link #setForUpdate(boolean)}). *

* Depending on the dialect and lock mode this flag may or may not be * supported. */ @Support({ H2, MARIADB, MYSQL, POSTGRES, YUGABYTEDB }) void setForLockModeNoWait(); /** * Some RDBMS allow for specifying the locking mode for the applied * FOR <lock_mode> clause. In this case, the session will * skip all locked rows from the select statement, whose lock is not * available. *

* In case no lock mode has been set yet, it will implicitly be set to * UPDATE (i.e. {@link #setForUpdate(boolean)}). *

* Depending on the dialect and lock mode this flag may or may not be * supported. */ @Support({ H2, MARIADB, MYSQL, POSTGRES, YUGABYTEDB }) void setForLockModeSkipLocked(); /** * Add a WITH CHECK OPTION clause to the end of the subquery. */ @Support({ FIREBIRD, MARIADB, MYSQL, POSTGRES }) void setWithCheckOption(); /** * Add a WITH READ ONLY clause to the end of the subquery. */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB }) void setWithReadOnly(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy