org.jooq.Row4 Maven / Gradle / Ivy
/*
* 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 super T1, ? super T2, ? super T3, ? super T4, ? extends U> 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 super T1, ? super T2, ? super T3, ? super T4, ? extends U> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Record4> 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 extends Row4> 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 extends Record4> 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 extends Record4> 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 extends Row4> 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 extends Record4> 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 extends Record4> select);
}