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

org.jooq.Row4 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
 * Apache-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.*;

import java.util.Collection;
import java.util.function.Function;

import org.jooq.conf.Settings;
import org.jooq.impl.DSL;

import org.jetbrains.annotations.NotNull;

/**
 * A row value expression.
 * 

* Row value expressions are mainly useful for use in predicates, when comparing * several values in one go, which can be more elegant than expanding the row * value expression predicate in other equivalent syntaxes. This is especially * true for non-equality predicates. For instance, the following two predicates * are equivalent in SQL: *

*


 * (A, B) > (X, Y)
 * (A > X) OR (A = X AND B > Y)
 * 
*

* Example: *

*


 * // Assuming import static org.jooq.impl.DSL.*;
 *
 * using(configuration)
 *    .select()
 *    .from(CUSTOMER)
 *    .where(row(CUSTOMER.FIRST_NAME, CUSTOMER.LAST_NAME).in(
 *        select(ACTOR.FIRST_NAME, ACTOR.LAST_NAME).from(ACTOR)
 *    ))
 *    .fetch();
 * 
*

* Note: Not all databases support row value expressions, but many row value * expression operations can be emulated on all databases. See relevant row * value expression method Javadocs for details. *

* Instances can be created using {@link DSL#row(Object...)} and overloads. * * @author Lukas Eder */ public interface Row4 extends Row, SelectField> { // ------------------------------------------------------------------------ // Mapping convenience methods // ------------------------------------------------------------------------ /** * A convenience method to define a local {@link Record4} to custom type * {@link RecordMapper} that can be used when projecting {@link Row} types * in SELECT or RETURNING clauses. *

* This calls through to {@link #convertFrom(Function)}, offering some * deconstruction over the {@link Record4}'s individual component values. *

* Unlike {@link #mapping(Class, Function4)}, this method attempts to work * without an explicit {@link Class} reference for the underlying * {@link Converter#toType()}. There may be some edge cases where this * doesn't work, e.g. when nesting rows in arrays, the class literal is * required for reflective array creation. *

* Combine this with e.g. {@link Functions#nullOnAllNull(Function4)} or * {@link Functions#nullOnAnyNull(Function4)} to achieve null * safety when mapping nested rows from LEFT JOIN etc. */ @NotNull SelectField mapping(Function4 function); /** * A convenience method to define a local {@link Record4} to custom type * {@link RecordMapper} that can be used when projecting {@link Row} types in * SELECT or RETURNING clauses. *

* This calls through to {@link #convertFrom(Class, Function)}, offering * some deconstruction over the {@link Record4}'s individual component * values. *

* Combine this with e.g. {@link Functions#nullOnAllNull(Function4)} or * {@link Functions#nullOnAnyNull(Function4)} to achieve null * safety when mapping nested rows from LEFT JOIN etc. */ @NotNull SelectField mapping(Class uType, Function4 function); // ------------------------------------------------------------------------ // Field accessors // ------------------------------------------------------------------------ /** * Get the first field. */ @NotNull Field field1(); /** * Get the second field. */ @NotNull Field field2(); /** * Get the third field. */ @NotNull Field field3(); /** * Get the fourth field. */ @NotNull Field field4(); // ------------------------------------------------------------------------ // Generic comparison predicates // ------------------------------------------------------------------------ /** * Compare this row value expression with another row value expression * using a dynamic comparator. *

* See the explicit comparison methods for details. Note, not all * {@link Comparator} types are supported * * @see #equal(Row4) * @see #notEqual(Row4) * @see #lessThan(Row4) * @see #lessOrEqual(Row4) * @see #greaterThan(Row4) * @see #greaterOrEqual(Row4) */ @NotNull @Support Condition compare(Comparator comparator, Row4 row); /** * Compare this row value expression with a record * using a dynamic comparator. *

* See the explicit comparison methods for details. Note, not all * {@link Comparator} types are supported * * @see #equal(Record4) * @see #notEqual(Record4) * @see #lessThan(Record4) * @see #lessOrEqual(Record4) * @see #greaterThan(Record4) * @see #greaterOrEqual(Record4) */ @NotNull @Support Condition compare(Comparator comparator, Record4 record); /** * Compare this row value expression with another row value expression * using a dynamic comparator. *

* See the explicit comparison methods for details. Note, not all * {@link Comparator} types are supported * * @see #equal(Row4) * @see #notEqual(Row4) * @see #lessThan(Row4) * @see #lessOrEqual(Row4) * @see #greaterThan(Row4) * @see #greaterOrEqual(Row4) */ @NotNull @Support Condition compare(Comparator comparator, T1 t1, T2 t2, T3 t3, T4 t4); /** * Compare this row value expression with another row value expression * using a dynamic comparator. *

* See the explicit comparison methods for details. Note, not all * {@link Comparator} types are supported * * @see #equal(Row4) * @see #notEqual(Row4) * @see #lessThan(Row4) * @see #lessOrEqual(Row4) * @see #greaterThan(Row4) * @see #greaterOrEqual(Row4) */ @NotNull @Support Condition compare(Comparator comparator, Field t1, Field t2, Field t3, Field t4); /** * Compare this row value expression with a subselect * using a dynamic comparator. *

* See the explicit comparison methods for details. Note, not all * {@link Comparator} types are supported * * @see #equal(Select) * @see #notEqual(Select) * @see #lessThan(Select) * @see #lessOrEqual(Select) * @see #greaterThan(Select) * @see #greaterOrEqual(Select) */ @NotNull @Support Condition compare(Comparator comparator, Select> select); /** * Compare this row value expression with a subselect * using a dynamic comparator. *

* See the explicit comparison methods for details. Note, not all * {@link Comparator} types are supported * * @see #equal(Select) * @see #notEqual(Select) * @see #lessThan(Select) * @see #lessOrEqual(Select) * @see #greaterThan(Select) * @see #greaterOrEqual(Select) */ @NotNull @Support Condition compare(Comparator comparator, QuantifiedSelect> select); // ------------------------------------------------------------------------ // Equal / Not equal comparison predicates // ------------------------------------------------------------------------ /** * Compare this row value expression with another row value expression for * equality. *

* Row equality comparison predicates can be emulated in those databases * that do not support such predicates natively: * (A, B) = (1, 2) is equivalent to * A = 1 AND B = 2 */ @NotNull @Support Condition equal(Row4 row); /** * Compare this row value expression with a record for equality. * * @see #equal(Row4) */ @NotNull @Support Condition equal(Record4 record); /** * Compare this row value expression with another row value expression for * equality. * * @see #equal(Row4) */ @NotNull @Support Condition equal(T1 t1, T2 t2, T3 t3, T4 t4); /** * Compare this row value expression with another row value expression for * equality. * * @see #equal(Row4) */ @NotNull @Support Condition equal(Field t1, Field t2, Field t3, Field t4); /** * Compare this row value expression with a subselect for equality. * * @see #equal(Row4) */ @NotNull @Support Condition equal(Select> select); /** * Compare this row value expression with a subselect for equality. * * @see DSL#all(Field) * @see DSL#all(Select) * @see DSL#all(Object...) * @see DSL#any(Field) * @see DSL#any(Select) * @see DSL#any(Object...) */ @NotNull @Support Condition equal(QuantifiedSelect> select); /** * Compare this row value expression with another row value expression for * equality. * * @see #equal(Row4) */ @NotNull @Support Condition eq(Row4 row); /** * Compare this row value expression with a record for equality. * * @see #equal(Row4) */ @NotNull @Support Condition eq(Record4 record); /** * Compare this row value expression with another row value expression for * equality. * * @see #equal(Row4) */ @NotNull @Support Condition eq(T1 t1, T2 t2, T3 t3, T4 t4); /** * Compare this row value expression with another row value expression for * equality. * * @see #equal(Row4) */ @NotNull @Support Condition eq(Field t1, Field t2, Field t3, Field t4); /** * Compare this row value expression with a subselect for equality. * * @see #equal(Row4) */ @NotNull @Support Condition eq(Select> select); /** * Compare this row value expression with a subselect for equality. * * @see DSL#all(Field) * @see DSL#all(Select) * @see DSL#all(Object...) * @see DSL#any(Field) * @see DSL#any(Select) * @see DSL#any(Object...) */ @NotNull @Support Condition eq(QuantifiedSelect> select); /** * Compare this row value expression with another row value expression for * non-equality. *

* Row non-equality comparison predicates can be emulated in those * databases that do not support such predicates natively: * (A, B) <> (1, 2) is equivalent to * NOT(A = 1 AND B = 2) */ @NotNull @Support Condition notEqual(Row4 row); /** * Compare this row value expression with a record for non-equality * * @see #notEqual(Row4) */ @NotNull @Support Condition notEqual(Record4 record); /** * Compare this row value expression with another row value expression for. * non-equality * * @see #notEqual(Row4) */ @NotNull @Support Condition notEqual(T1 t1, T2 t2, T3 t3, T4 t4); /** * Compare this row value expression with another row value expression for * non-equality. * * @see #notEqual(Row4) */ @NotNull @Support Condition notEqual(Field t1, Field t2, Field t3, Field t4); /** * Compare this row value expression with a subselect for non-equality. * * @see #notEqual(Row4) */ @NotNull @Support Condition notEqual(Select> select); /** * Compare this row value expression with a subselect for non-equality. * * @see DSL#all(Field) * @see DSL#all(Select) * @see DSL#all(Object...) * @see DSL#any(Field) * @see DSL#any(Select) * @see DSL#any(Object...) */ @NotNull @Support Condition notEqual(QuantifiedSelect> select); /** * Compare this row value expression with another row value expression for * non-equality. * * @see #notEqual(Row4) */ @NotNull @Support Condition ne(Row4 row); /** * Compare this row value expression with a record for non-equality. * * @see #notEqual(Row4) */ @NotNull @Support Condition ne(Record4 record); /** * Compare this row value expression with another row value expression for * non-equality. * * @see #notEqual(Row4) */ @NotNull @Support Condition ne(T1 t1, T2 t2, T3 t3, T4 t4); /** * Compare this row value expression with another row value expression for * non-equality. * * @see #notEqual(Row4) */ @NotNull @Support Condition ne(Field t1, Field t2, Field t3, Field t4); /** * Compare this row value expression with a subselect for non-equality. * * @see #notEqual(Row4) */ @NotNull @Support Condition ne(Select> select); /** * Compare this row value expression with a subselect for non-equality. * * @see DSL#all(Field) * @see DSL#all(Select) * @see DSL#all(Object...) * @see DSL#any(Field) * @see DSL#any(Select) * @see DSL#any(Object...) */ @NotNull @Support Condition ne(QuantifiedSelect> select); // ------------------------------------------------------------------------ // [NOT] DISTINCT predicates // ------------------------------------------------------------------------ /** * Compare this row value expression with another row value expression for * distinctness. */ @NotNull @Support Condition isDistinctFrom(Row4 row); /** * Compare this row value expression with another row value expression for * distinctness. */ @NotNull @Support Condition isDistinctFrom(Record4 record); /** * Compare this row value expression with another row value expression for * distinctness. */ @NotNull @Support Condition isDistinctFrom(T1 t1, T2 t2, T3 t3, T4 t4); /** * Compare this row value expression with another row value expression for * distinctness. */ @NotNull @Support Condition isDistinctFrom(Field t1, Field t2, Field t3, Field t4); /** * Compare this row value expression with another row value expression for * distinctness. */ @NotNull @Support Condition isDistinctFrom(Select> select); /** * Compare this row value expression with another row value expression for * distinctness. */ @NotNull @Support Condition isNotDistinctFrom(Row4 row); /** * Compare this row value expression with another row value expression for * distinctness. */ @NotNull @Support Condition isNotDistinctFrom(Record4 record); /** * Compare this row value expression with another row value expression for * distinctness. */ @NotNull @Support Condition isNotDistinctFrom(T1 t1, T2 t2, T3 t3, T4 t4); /** * Compare this row value expression with another row value expression for * distinctness. */ @NotNull @Support Condition isNotDistinctFrom(Field t1, Field t2, Field t3, Field t4); /** * Compare this row value expression with another row value expression for * distinctness. */ @NotNull @Support Condition isNotDistinctFrom(Select> select); // ------------------------------------------------------------------------ // Ordering comparison predicates // ------------------------------------------------------------------------ /** * Compare this row value expression with another row value expression for * order. *

* Row order comparison predicates can be emulated in those * databases that do not support such predicates natively: * (A, B, C) < (1, 2, 3) is equivalent to * A < 1 OR (A = 1 AND B < 2) OR (A = 1 AND B = 2 AND C < 3) */ @NotNull @Support Condition lessThan(Row4 row); /** * Compare this row value expression with a record for order. * * @see #lessThan(Row4) */ @NotNull @Support Condition lessThan(Record4 record); /** * Compare this row value expression with another row value expression for * order. * * @see #lessThan(Row4) */ @NotNull @Support Condition lessThan(T1 t1, T2 t2, T3 t3, T4 t4); /** * Compare this row value expression with another row value expression for * order. * * @see #lessThan(Row4) */ @NotNull @Support Condition lessThan(Field t1, Field t2, Field t3, Field t4); /** * Compare this row value expression with a subselect for order. * * @see #lessThan(Row4) */ @NotNull @Support Condition lessThan(Select> select); /** * Compare this row value expression with a subselect for order. * * @see DSL#all(Field) * @see DSL#all(Select) * @see DSL#all(Object...) * @see DSL#any(Field) * @see DSL#any(Select) * @see DSL#any(Object...) */ @NotNull @Support Condition lessThan(QuantifiedSelect> select); /** * Compare this row value expression with another row value expression for * order. * * @see #lessThan(Row4) */ @NotNull @Support Condition lt(Row4 row); /** * Compare this row value expression with a record for order. * * @see #lessThan(Row4) */ @NotNull @Support Condition lt(Record4 record); /** * Compare this row value expression with another row value expression for * order. * * @see #lessThan(Row4) */ @NotNull @Support Condition lt(T1 t1, T2 t2, T3 t3, T4 t4); /** * Compare this row value expression with another row value expression for * order. * * @see #lessThan(Row4) */ @NotNull @Support Condition lt(Field t1, Field t2, Field t3, Field t4); /** * Compare this row value expression with a subselect for order. * * @see #lessThan(Row4) */ @NotNull @Support Condition lt(Select> select); /** * Compare this row value expression with a subselect for order. * * @see DSL#all(Field) * @see DSL#all(Select) * @see DSL#all(Object...) * @see DSL#any(Field) * @see DSL#any(Select) * @see DSL#any(Object...) */ @NotNull @Support Condition lt(QuantifiedSelect> select); /** * Compare this row value expression with another row value expression for * order. *

* Row order comparison predicates can be emulated in those * databases that do not support such predicates natively: * (A, B) <= (1, 2) is equivalent to * A < 1 OR (A = 1 AND B < 2) OR (A = 1 AND B = 2) */ @NotNull @Support Condition lessOrEqual(Row4 row); /** * Compare this row value expression with a record for order. * * @see #lessOrEqual(Row4) */ @NotNull @Support Condition lessOrEqual(Record4 record); /** * Compare this row value expression with another row value expression for * order. * * @see #lessOrEqual(Row4) */ @NotNull @Support Condition lessOrEqual(T1 t1, T2 t2, T3 t3, T4 t4); /** * Compare this row value expression with another row value expression for * order. * * @see #lessOrEqual(Row4) */ @NotNull @Support Condition lessOrEqual(Field t1, Field t2, Field t3, Field t4); /** * Compare this row value expression with a subselect for order. * * @see #lessOrEqual(Row4) */ @NotNull @Support Condition lessOrEqual(Select> select); /** * Compare this row value expression with a subselect for order. * * @see DSL#all(Field) * @see DSL#all(Select) * @see DSL#all(Object...) * @see DSL#any(Field) * @see DSL#any(Select) * @see DSL#any(Object...) */ @NotNull @Support Condition lessOrEqual(QuantifiedSelect> select); /** * Compare this row value expression with another row value expression for * order. * * @see #lessOrEqual(Row4) */ @NotNull @Support Condition le(Row4 row); /** * Compare this row value expression with a record for order. * * @see #lessOrEqual(Row4) */ @NotNull @Support Condition le(Record4 record); /** * Compare this row value expression with another row value expression for * order. * * @see #lessOrEqual(Row4) */ @NotNull @Support Condition le(T1 t1, T2 t2, T3 t3, T4 t4); /** * Compare this row value expression with another row value expression for * order. * * @see #lessOrEqual(Row4) */ @NotNull @Support Condition le(Field t1, Field t2, Field t3, Field t4); /** * Compare this row value expression with a subselect for order. * * @see #lessOrEqual(Row4) */ @NotNull @Support Condition le(Select> select); /** * Compare this row value expression with a subselect for order. * * @see DSL#all(Field) * @see DSL#all(Select) * @see DSL#all(Object...) * @see DSL#any(Field) * @see DSL#any(Select) * @see DSL#any(Object...) */ @NotNull @Support Condition le(QuantifiedSelect> select); /** * Compare this row value expression with another row value expression for * order. *

* Row order comparison predicates can be emulated in those * databases that do not support such predicates natively: * (A, B, C) > (1, 2, 3) is equivalent to * A > 1 OR (A = 1 AND B > 2) OR (A = 1 AND B = 2 AND C > 3) */ @NotNull @Support Condition greaterThan(Row4 row); /** * Compare this row value expression with a record for order. * * @see #greaterThan(Row4) */ @NotNull @Support Condition greaterThan(Record4 record); /** * Compare this row value expression with another row value expression for * order. * * @see #greaterThan(Row4) */ @NotNull @Support Condition greaterThan(T1 t1, T2 t2, T3 t3, T4 t4); /** * Compare this row value expression with another row value expression for * order. * * @see #greaterThan(Row4) */ @NotNull @Support Condition greaterThan(Field t1, Field t2, Field t3, Field t4); /** * Compare this row value expression with a subselect for order. * * @see #greaterThan(Row4) */ @NotNull @Support Condition greaterThan(Select> select); /** * Compare this row value expression with a subselect for order. * * @see DSL#all(Field) * @see DSL#all(Select) * @see DSL#all(Object...) * @see DSL#any(Field) * @see DSL#any(Select) * @see DSL#any(Object...) */ @NotNull @Support Condition greaterThan(QuantifiedSelect> select); /** * Compare this row value expression with another row value expression for * order. * * @see #greaterThan(Row4) */ @NotNull @Support Condition gt(Row4 row); /** * Compare this row value expression with a record for order. * * @see #greaterThan(Row4) */ @NotNull @Support Condition gt(Record4 record); /** * Compare this row value expression with another row value expression for * order. * * @see #greaterThan(Row4) */ @NotNull @Support Condition gt(T1 t1, T2 t2, T3 t3, T4 t4); /** * Compare this row value expression with another row value expression for * order. * * @see #greaterThan(Row4) */ @NotNull @Support Condition gt(Field t1, Field t2, Field t3, Field t4); /** * Compare this row value expression with a subselect for order. * * @see #greaterThan(Row4) */ @NotNull @Support Condition gt(Select> select); /** * Compare this row value expression with a subselect for order. * * @see DSL#all(Field) * @see DSL#all(Select) * @see DSL#all(Object...) * @see DSL#any(Field) * @see DSL#any(Select) * @see DSL#any(Object...) */ @NotNull @Support Condition gt(QuantifiedSelect> select); /** * Compare this row value expression with another row value expression for * order. *

* Row order comparison predicates can be emulated in those * databases that do not support such predicates natively: * (A, B) >= (1, 2) is equivalent to * A > 1 OR (A = 1 AND B > 2) OR (A = 1 AND B = 2) */ @NotNull @Support Condition greaterOrEqual(Row4 row); /** * Compare this row value expression with a record for order. * * @see #greaterOrEqual(Row4) */ @NotNull @Support Condition greaterOrEqual(Record4 record); /** * Compare this row value expression with another row value expression for * order. * * @see #greaterOrEqual(Row4) */ @NotNull @Support Condition greaterOrEqual(T1 t1, T2 t2, T3 t3, T4 t4); /** * Compare this row value expression with another row value expression for * order. * * @see #greaterOrEqual(Row4) */ @NotNull @Support Condition greaterOrEqual(Field t1, Field t2, Field t3, Field t4); /** * Compare this row value expression with a subselect for order. * * @see #greaterOrEqual(Row4) */ @NotNull @Support Condition greaterOrEqual(Select> select); /** * Compare this row value expression with a subselect for order. * * @see DSL#all(Field) * @see DSL#all(Select) * @see DSL#all(Object...) * @see DSL#any(Field) * @see DSL#any(Select) * @see DSL#any(Object...) */ @NotNull @Support Condition greaterOrEqual(QuantifiedSelect> select); /** * Compare this row value expression with another row value expression for * order. * * @see #greaterOrEqual(Row4) */ @NotNull @Support Condition ge(Row4 row); /** * Compare this row value expression with a record for order. * * @see #greaterOrEqual(Row4) */ @NotNull @Support Condition ge(Record4 record); /** * Compare this row value expression with another row value expression for * order. * * @see #greaterOrEqual(Row4) */ @NotNull @Support Condition ge(T1 t1, T2 t2, T3 t3, T4 t4); /** * Compare this row value expression with another row value expression for * order. * * @see #greaterOrEqual(Row4) */ @NotNull @Support Condition ge(Field t1, Field t2, Field t3, Field t4); /** * Compare this row value expression with a subselect for order. * * @see #greaterOrEqual(Row4) */ @NotNull @Support Condition ge(Select> select); /** * Compare this row value expression with a subselect for order. * * @see DSL#all(Field) * @see DSL#all(Select) * @see DSL#all(Object...) * @see DSL#any(Field) * @see DSL#any(Select) * @see DSL#any(Object...) */ @NotNull @Support Condition ge(QuantifiedSelect> select); // ------------------------------------------------------------------------ // [NOT] BETWEEN predicates // ------------------------------------------------------------------------ /** * Check if this row value expression is within a range of two other row * value expressions. * * @see #between(Row4, Row4) */ @NotNull @Support BetweenAndStep4 between(T1 minValue1, T2 minValue2, T3 minValue3, T4 minValue4); /** * Check if this row value expression is within a range of two other row * value expressions. * * @see #between(Row4, Row4) */ @NotNull @Support BetweenAndStep4 between(Field minValue1, Field minValue2, Field minValue3, Field minValue4); /** * Check if this row value expression is within a range of two other row * value expressions. * * @see #between(Row4, Row4) */ @NotNull @Support BetweenAndStep4 between(Row4 minValue); /** * Check if this row value expression is within a range of two records. * * @see #between(Row4, Row4) */ @NotNull @Support BetweenAndStep4 between(Record4 minValue); /** * Check if this row value expression is within a range of two other row * value expressions. *

* This is the same as calling between(minValue).and(maxValue) *

* The expression A BETWEEN B AND C is equivalent to the * expression A >= B AND A <= C for those SQL dialects that do * not properly support the BETWEEN predicate for row value * expressions */ @NotNull @Support Condition between(Row4 minValue, Row4 maxValue); /** * Check if this row value expression is within a range of two records. *

* This is the same as calling between(minValue).and(maxValue) * * @see #between(Row4, Row4) */ @NotNull @Support Condition between(Record4 minValue, Record4 maxValue); /** * Check if this row value expression is within a symmetric range of two * other row value expressions. * * @see #betweenSymmetric(Row4, Row4) */ @NotNull @Support BetweenAndStep4 betweenSymmetric(T1 minValue1, T2 minValue2, T3 minValue3, T4 minValue4); /** * Check if this row value expression is within a symmetric range of two * other row value expressions. * * @see #betweenSymmetric(Row4, Row4) */ @NotNull @Support BetweenAndStep4 betweenSymmetric(Field minValue1, Field minValue2, Field minValue3, Field minValue4); /** * Check if this row value expression is within a symmetric range of two * other row value expressions. * * @see #betweenSymmetric(Row4, Row4) */ @NotNull @Support BetweenAndStep4 betweenSymmetric(Row4 minValue); /** * Check if this row value expression is within a symmetric range of two * records. * * @see #betweenSymmetric(Row4, Row4) */ @NotNull @Support BetweenAndStep4 betweenSymmetric(Record4 minValue); /** * Check if this row value expression is within a symmetric range of two * other row value expressions. *

* This is the same as calling betweenSymmetric(minValue).and(maxValue) *

* The expression A BETWEEN SYMMETRIC B AND C is equivalent to * the expression (A >= B AND A <= C) OR (A >= C AND A <= B) * for those SQL dialects that do not properly support the * BETWEEN predicate for row value expressions */ @NotNull @Support Condition betweenSymmetric(Row4 minValue, Row4 maxValue); /** * Check if this row value expression is within a symmetric range of two * records. *

* This is the same as calling betweenSymmetric(minValue).and(maxValue) * * @see #betweenSymmetric(Row4, Row4) */ @NotNull @Support Condition betweenSymmetric(Record4 minValue, Record4 maxValue); /** * Check if this row value expression is not within a range of two other * row value expressions. * * @see #between(Row4, Row4) */ @NotNull @Support BetweenAndStep4 notBetween(T1 minValue1, T2 minValue2, T3 minValue3, T4 minValue4); /** * Check if this row value expression is not within a range of two other * row value expressions. * * @see #notBetween(Row4, Row4) */ @NotNull @Support BetweenAndStep4 notBetween(Field minValue1, Field minValue2, Field minValue3, Field minValue4); /** * Check if this row value expression is not within a range of two other * row value expressions. * * @see #notBetween(Row4, Row4) */ @NotNull @Support BetweenAndStep4 notBetween(Row4 minValue); /** * Check if this row value expression is within a range of two records. * * @see #notBetween(Row4, Row4) */ @NotNull @Support BetweenAndStep4 notBetween(Record4 minValue); /** * Check if this row value expression is not within a range of two other * row value expressions. *

* This is the same as calling notBetween(minValue).and(maxValue) *

* The expression A NOT BETWEEN B AND C is equivalent to the * expression A < B OR A > C for those SQL dialects that do * not properly support the BETWEEN predicate for row value * expressions */ @NotNull @Support Condition notBetween(Row4 minValue, Row4 maxValue); /** * Check if this row value expression is within a range of two records. *

* This is the same as calling notBetween(minValue).and(maxValue) * * @see #notBetween(Row4, Row4) */ @NotNull @Support Condition notBetween(Record4 minValue, Record4 maxValue); /** * Check if this row value expression is not within a symmetric range of two * other row value expressions. * * @see #notBetweenSymmetric(Row4, Row4) */ @NotNull @Support BetweenAndStep4 notBetweenSymmetric(T1 minValue1, T2 minValue2, T3 minValue3, T4 minValue4); /** * Check if this row value expression is not within a symmetric range of two * other row value expressions. * * @see #notBetweenSymmetric(Row4, Row4) */ @NotNull @Support BetweenAndStep4 notBetweenSymmetric(Field minValue1, Field minValue2, Field minValue3, Field minValue4); /** * Check if this row value expression is not within a symmetric range of two * other row value expressions. * * @see #notBetweenSymmetric(Row4, Row4) */ @NotNull @Support BetweenAndStep4 notBetweenSymmetric(Row4 minValue); /** * Check if this row value expression is not within a symmetric range of two * records. * * @see #notBetweenSymmetric(Row4, Row4) */ @NotNull @Support BetweenAndStep4 notBetweenSymmetric(Record4 minValue); /** * Check if this row value expression is not within a symmetric range of two * other row value expressions. *

* This is the same as calling notBetweenSymmetric(minValue).and(maxValue) *

* The expression A NOT BETWEEN SYMMETRIC B AND C is equivalent * to the expression (A < B OR A > C) AND (A < C OR A > B) for * those SQL dialects that do not properly support the BETWEEN * predicate for row value expressions */ @NotNull @Support Condition notBetweenSymmetric(Row4 minValue, Row4 maxValue); /** * Check if this row value expression is not within a symmetric range of two * records. *

* This is the same as calling notBetweenSymmetric(minValue).and(maxValue) * * @see #notBetweenSymmetric(Row4, Row4) */ @NotNull @Support Condition notBetweenSymmetric(Record4 minValue, Record4 maxValue); // ------------------------------------------------------------------------ // [NOT] DISTINCT predicates // ------------------------------------------------------------------------ // ------------------------------------------------------------------------ // [NOT] IN predicates // ------------------------------------------------------------------------ /** * Compare this row value expression with a set of row value expressions for * equality. *

* Row IN predicates can be emulated in those databases that do not support * such predicates natively: (A, B) IN ((1, 2), (3, 4)) is * equivalent to ((A, B) = (1, 2)) OR ((A, B) = (3, 4)), which * is equivalent to (A = 1 AND B = 2) OR (A = 3 AND B = 4) *

* Note that generating dynamic SQL with arbitrary-length * IN predicates can cause cursor cache contention in some * databases that use unique SQL strings as a statement identifier (e.g. * {@link SQLDialect#ORACLE}). In order to prevent such problems, you could * use {@link Settings#isInListPadding()} to produce less distinct SQL * strings (see also * [#5600]), or you * could avoid IN lists, and replace them with: *

    *
  • IN predicates on temporary tables
  • *
  • IN predicates on unnested array bind variables
  • *
* * @see Rows#toRowList(Function, Function, Function, Function) */ @NotNull @Support Condition in(Collection> rows); /** * Compare this row value expression with a set of records for * equality. *

* Row IN predicates can be emulated in those databases that do not support * such predicates natively: (A, B) IN ((1, 2), (3, 4)) is * equivalent to ((A, B) = (1, 2)) OR ((A, B) = (3, 4)), which * is equivalent to (A = 1 AND B = 2) OR (A = 3 AND B = 4) *

* Note that generating dynamic SQL with arbitrary-length * IN predicates can cause cursor cache contention in some * databases that use unique SQL strings as a statement identifier (e.g. * {@link SQLDialect#ORACLE}). In order to prevent such problems, you could * use {@link Settings#isInListPadding()} to produce less distinct SQL * strings (see also * [#5600]), or you * could avoid IN lists, and replace them with: *

    *
  • IN predicates on temporary tables
  • *
  • IN predicates on unnested array bind variables
  • *
*/ @NotNull @Support Condition in(Result> result); /** * Compare this row value expression with a set of row value expressions for * equality. *

* Note that generating dynamic SQL with arbitrary-length * IN predicates can cause cursor cache contention in some * databases that use unique SQL strings as a statement identifier (e.g. * {@link SQLDialect#ORACLE}). In order to prevent such problems, you could * use {@link Settings#isInListPadding()} to produce less distinct SQL * strings (see also * [#5600]), or you * could avoid IN lists, and replace them with: *

    *
  • IN predicates on temporary tables
  • *
  • IN predicates on unnested array bind variables
  • *
* * @see #in(Collection) * @see Rows#toRowArray(Function, Function, Function, Function) */ @SuppressWarnings("unchecked") @NotNull @Support Condition in(Row4... rows); /** * Compare this row value expression with a set of records for equality. *

* Note that generating dynamic SQL with arbitrary-length * IN predicates can cause cursor cache contention in some * databases that use unique SQL strings as a statement identifier (e.g. * {@link SQLDialect#ORACLE}). In order to prevent such problems, you could * use {@link Settings#isInListPadding()} to produce less distinct SQL * strings (see also * [#5600]), or you * could avoid IN lists, and replace them with: *

    *
  • IN predicates on temporary tables
  • *
  • IN predicates on unnested array bind variables
  • *
* * @see #in(Collection) */ @SuppressWarnings("unchecked") @NotNull @Support Condition in(Record4... record); /** * Compare this row value expression with a subselect for equality. * * @see #in(Collection) */ @NotNull @Support Condition in(Select> select); /** * Compare this row value expression with a set of row value expressions for * equality. *

* Row NOT IN predicates can be emulated in those databases that do not * support such predicates natively: * (A, B) NOT IN ((1, 2), (3, 4)) is equivalent to * NOT(((A, B) = (1, 2)) OR ((A, B) = (3, 4))), which is * equivalent to NOT((A = 1 AND B = 2) OR (A = 3 AND B = 4)) *

* Note that generating dynamic SQL with arbitrary-length * NOT IN predicates can cause cursor cache contention in some * databases that use unique SQL strings as a statement identifier (e.g. * {@link SQLDialect#ORACLE}). In order to prevent such problems, you could * use {@link Settings#isInListPadding()} to produce less distinct SQL * strings (see also * [#5600]), or you * could avoid IN lists, and replace them with: *

    *
  • NOT IN predicates on temporary tables
  • *
  • NOT IN predicates on unnested array bind variables
  • *
* * @see Rows#toRowList(Function, Function, Function, Function) */ @NotNull @Support Condition notIn(Collection> rows); /** * Compare this row value expression with a set of records for * equality. *

* Row NOT IN predicates can be emulated in those databases that do not * support such predicates natively: * (A, B) NOT IN ((1, 2), (3, 4)) is equivalent to * NOT(((A, B) = (1, 2)) OR ((A, B) = (3, 4))), which is * equivalent to NOT((A = 1 AND B = 2) OR (A = 3 AND B = 4)) *

* Note that generating dynamic SQL with arbitrary-length * NOT IN predicates can cause cursor cache contention in some * databases that use unique SQL strings as a statement identifier (e.g. * {@link SQLDialect#ORACLE}). In order to prevent such problems, you could * use {@link Settings#isInListPadding()} to produce less distinct SQL * strings (see also * [#5600]), or you * could avoid IN lists, and replace them with: *

    *
  • NOT IN predicates on temporary tables
  • *
  • NOT IN predicates on unnested array bind variables
  • *
*/ @NotNull @Support Condition notIn(Result> result); /** * Compare this row value expression with a set of row value expressions for * equality. *

* Note that generating dynamic SQL with arbitrary-length * NOT IN predicates can cause cursor cache contention in some * databases that use unique SQL strings as a statement identifier (e.g. * {@link SQLDialect#ORACLE}). In order to prevent such problems, you could * use {@link Settings#isInListPadding()} to produce less distinct SQL * strings (see also * [#5600]), or you * could avoid IN lists, and replace them with: *

    *
  • NOT IN predicates on temporary tables
  • *
  • NOT IN predicates on unnested array bind variables
  • *
* * @see #notIn(Collection) * @see Rows#toRowArray(Function, Function, Function, Function) */ @SuppressWarnings("unchecked") @NotNull @Support Condition notIn(Row4... rows); /** * Compare this row value expression with a set of records for non-equality. *

* Note that generating dynamic SQL with arbitrary-length * NOT IN predicates can cause cursor cache contention in some * databases that use unique SQL strings as a statement identifier (e.g. * {@link SQLDialect#ORACLE}). In order to prevent such problems, you could * use {@link Settings#isInListPadding()} to produce less distinct SQL * strings (see also * [#5600]), or you * could avoid IN lists, and replace them with: *

    *
  • NOT IN predicates on temporary tables
  • *
  • NOT IN predicates on unnested array bind variables
  • *
* * @see #notIn(Collection) */ @SuppressWarnings("unchecked") @NotNull @Support Condition notIn(Record4... record); /** * Compare this row value expression with a subselect for non-equality. * * @see #notIn(Collection) */ @NotNull @Support Condition notIn(Select> select); }