diff --git a/jOOQ/src/main/java/org/jooq/Converter.java b/jOOQ/src/main/java/org/jooq/Converter.java
index 81f9bdaf87..0304001dcc 100644
--- a/jOOQ/src/main/java/org/jooq/Converter.java
+++ b/jOOQ/src/main/java/org/jooq/Converter.java
@@ -37,9 +37,12 @@
*/
package org.jooq;
+import static org.jooq.Converters.nullable;
+
import java.io.Serializable;
import java.util.function.Function;
+import org.jooq.exception.DataTypeException;
import org.jooq.impl.AbstractConverter;
import org.jooq.impl.SQLDataType;
@@ -53,9 +56,11 @@ import org.jetbrains.annotations.NotNull;
* directed, this means that the Converter is used
*
* - to load database types converting them to user types "FROM" the database.
- * Hence, {@link #fromType()} is the type as defined in the database.
+ * Hence, {@link #fromType()} is the type as defined in the database. Think of
+ * "FROM" = "reading".
* - to store user types converting them to database types "TO" the database.
- * Hence, {@link #toType()} is the user-defined type
+ * Think of "TO" = "writing". Hence, {@link #toType()} is the user-defined
+ * type
*
*
* Note: In order to avoid unwanted side-effects, it is highly recommended (yet
@@ -83,7 +88,8 @@ import org.jetbrains.annotations.NotNull;
* {@link DataType#asConvertedDataType(Binding)}, for example. Custom data types
* can also be defined on generated code using the
* <forcedType/> configuration, see the manual for more details
+ * "https://www.jooq.org/doc/latest/manual/code-generation/codegen-advanced/codegen-config-database/codegen-database-forced-types/">the
+ * manual for more details
*
* @author Lukas Eder
* @param The database type - i.e. any type available from
@@ -93,29 +99,29 @@ import org.jetbrains.annotations.NotNull;
public interface Converter extends Serializable {
/**
- * Convert a database object to a user object
+ * Read and convert a database object to a user object.
*
- * @param databaseObject The database object
- * @return The user object
+ * @param databaseObject The database object.
+ * @return The user object.
*/
U from(T databaseObject);
/**
- * Convert a user object to a database object
+ * Convert and write a user object to a database object.
*
- * @param userObject The user object
- * @return The database object
+ * @param userObject The user object.
+ * @return The database object.
*/
T to(U userObject);
/**
- * The database type
+ * The database type.
*/
@NotNull
Class fromType();
/**
- * The user type
+ * The user type.
*/
@NotNull
Class toType();
@@ -147,12 +153,13 @@ public interface Converter extends Serializable {
/**
* Construct a new converter from functions.
*
- * @param the database type
- * @param the user type
- * @param fromType The database type
- * @param toType The user type
- * @param from A function converting from T to U
- * @param to A function converting from U to T
+ * @param the database type.
+ * @param the user type.
+ * @param fromType The database type.
+ * @param toType The user type.
+ * @param from A function converting from T to U when reading from the
+ * database.
+ * @param to A function converting from U to T when writing to the database.
* @return The converter.
* @see Converter
*/
@@ -182,6 +189,50 @@ public interface Converter extends Serializable {
};
}
+ /**
+ * Construct a new read-only converter from a function.
+ *
+ * @param the database type
+ * @param the user type
+ * @param fromType The database type
+ * @param toType The user type
+ * @param from A function converting from T to U when reading from the
+ * database.
+ * @param to A function converting from U to T when writing to the database.
+ * @return The converter.
+ * @see Converter
+ */
+ @NotNull
+ static Converter from(
+ Class fromType,
+ Class toType,
+ Function super T, ? extends U> from
+ ) {
+ return of(fromType, toType, from, notImplemented());
+ }
+
+ /**
+ * Construct a new write-only converter from a function.
+ *
+ * @param the database type
+ * @param the user type
+ * @param fromType The database type
+ * @param toType The user type
+ * @param from A function converting from T to U when reading from the
+ * database.
+ * @param to A function converting from U to T when writing to the database.
+ * @return The converter.
+ * @see Converter
+ */
+ @NotNull
+ static Converter to(
+ Class fromType,
+ Class toType,
+ Function super U, ? extends T> to
+ ) {
+ return of(fromType, toType, notImplemented(), to);
+ }
+
/**
* Construct a new converter from functions.
*
@@ -205,12 +256,12 @@ public interface Converter extends Serializable {
* @param the user type
* @param fromType The database type
* @param toType The user type
- * @param from A function converting from T to U
- * @param to A function converting from U to T
+ * @param from A function converting from T to U when reading from the
+ * database.
+ * @param to A function converting from U to T when writing to the database.
* @return The converter.
* @see Converter
*/
- @SuppressWarnings("unchecked")
@NotNull
static Converter ofNullable(
Class fromType,
@@ -218,19 +269,79 @@ public interface Converter extends Serializable {
Function super T, ? extends U> from,
Function super U, ? extends T> to
) {
- Function fromS;
- Function toS;
+ return of(fromType, toType, nullable(from), nullable(to));
+ }
- if (from instanceof Serializable)
- fromS = (Function & Serializable) t -> t == null ? null : from.apply(t);
- else
- fromS = t -> t == null ? null : from.apply(t);
+ /**
+ * Construct a new read-only converter from a function.
+ *
+ * This works like {@link Converter#from(Class, Class, Function)}, except
+ * that the conversion {@link Function} is decorated with a function that
+ * always returns null for null inputs.
+ *
+ * Example:
+ *
+ *
+ * Converter<String, Integer> converter =
+ * Converter.fromNullable(String.class, Integer.class, Integer::parseInt);
+ *
+ * // No exceptions thrown
+ * assertNull(converter.from(null));
+ *
+ *
+ * @param the database type.
+ * @param the user type.
+ * @param fromType The database type.
+ * @param toType The user type.
+ * @param from A function converting from T to U when reading from the
+ * database.
+ * @return The converter.
+ * @see Converter
+ */
+ @NotNull
+ static Converter fromNullable(
+ Class fromType,
+ Class toType,
+ Function super T, ? extends U> from
+ ) {
+ return of(fromType, toType, nullable(from), notImplemented());
+ }
- if (to instanceof Serializable)
- toS = (Function & Serializable) u -> u == null ? null : to.apply(u);
- else
- toS = u -> u == null ? null : to.apply(u);
+ /**
+ * Construct a new write-only converter from a function.
+ *
+ * This works like {@link Converter#to(Class, Class, Function)}, except that
+ * the conversion {@link Function} is decorated with a function that always
+ * returns null for null inputs.
+ *
+ * Example:
+ *
+ *
+ * Converter<String, Integer> converter =
+ * Converter.toNullable(String.class, Integer.class, Object::toString);
+ *
+ * // No exceptions thrown
+ * assertNull(converter.to(null));
+ *
+ *
+ * @param the database type
+ * @param the user type
+ * @param fromType The database type
+ * @param toType The user type
+ * @param to A function converting from U to T when writing to the database.
+ * @return The converter.
+ * @see Converter
+ */
+ @NotNull
+ static Converter toNullable(
+ Class fromType,
+ Class toType,
+ Function super U, ? extends T> to
+ ) {
+ return of(fromType, toType, notImplemented(), nullable(to));
+ }
- return of(fromType, toType, fromS, toS);
+ private static Function notImplemented() {
+ return t -> { throw new DataTypeException("Conversion function not implemented"); };
}
}
diff --git a/jOOQ/src/main/java/org/jooq/Converters.java b/jOOQ/src/main/java/org/jooq/Converters.java
index 32addacddf..db8753c42c 100644
--- a/jOOQ/src/main/java/org/jooq/Converters.java
+++ b/jOOQ/src/main/java/org/jooq/Converters.java
@@ -40,6 +40,9 @@ package org.jooq;
import static org.jooq.impl.Internal.arrayType;
import static org.jooq.tools.Convert.convertArray;
+import java.io.Serializable;
+import java.util.function.Function;
+
import org.jooq.impl.AbstractConverter;
import org.jooq.impl.IdentityConverter;
import org.jooq.impl.SQLDataType;
@@ -216,4 +219,10 @@ public class Converters extends AbstractConverter {
sb.append(" ]");
return sb.toString();
}
+
+ static final Function nullable(Function super T, ? extends U> f) {
+ return f instanceof Serializable
+ ? (Function & Serializable) t -> t == null ? null
+ : f.apply(t) : t -> t == null ? null : f.apply(t);
+ }
}
diff --git a/jOOQ/src/main/java/org/jooq/DataType.java b/jOOQ/src/main/java/org/jooq/DataType.java
index da0c543f19..80b5f990e4 100644
--- a/jOOQ/src/main/java/org/jooq/DataType.java
+++ b/jOOQ/src/main/java/org/jooq/DataType.java
@@ -74,6 +74,7 @@ import java.util.List;
import java.util.function.Function;
import org.jooq.exception.DataTypeException;
+import org.jooq.exception.MappingException;
import org.jooq.impl.SQLDataType;
import org.jooq.tools.Convert;
import org.jooq.types.DayToSecond;
@@ -207,6 +208,30 @@ public interface DataType extends Named {
return asConvertedDataType(Converter.of(getType(), toType, from, to));
}
+ /**
+ * Convenience method for converting this type to a read-only type using
+ * {@link Converter#from(Class, Class, Function)}.
+ */
+ @NotNull
+ default DataType asConvertedDataTypeFrom(
+ Class toType,
+ Function super T, ? extends U> from
+ ) {
+ return asConvertedDataType(Converter.from(getType(), toType, from));
+ }
+
+ /**
+ * Convenience method for converting this type to a write-only type using
+ * {@link Converter#to(Class, Class, Function)}.
+ */
+ @NotNull
+ default DataType asConvertedDataTypeTo(
+ Class toType,
+ Function super U, ? extends T> to
+ ) {
+ return asConvertedDataType(Converter.to(getType(), toType, to));
+ }
+
/**
* Retrieve the data type for a given binding.
*/
diff --git a/jOOQ/src/main/java/org/jooq/Field.java b/jOOQ/src/main/java/org/jooq/Field.java
index 07dc014ea4..8f6d17564c 100644
--- a/jOOQ/src/main/java/org/jooq/Field.java
+++ b/jOOQ/src/main/java/org/jooq/Field.java
@@ -204,32 +204,38 @@ extends
);
/**
- * The name of the field.
+ * Apply an ad-hoc read-only data type {@link Converter} to this field
+ * expression.
*
- * The name is any of these:
- *
- * - The formal name of the field, if it is a physical table/view
- * field
- * - The alias of an aliased field
- * - A generated / unspecified value for any other expression
- * - The name of a parameter if it is a named {@link Param}
- *
+ * Rather than attaching data type converters at code generation time, or
+ * creating cumbersome expressions using
+ * {@link DataType#asConvertedDataTypeFrom(Class, Function)}, this method
+ * allows for creating a derived field expression with an ad-hoc data type
+ * converter for single query usage.
+ *
+ * @param The user type.
+ * @param converter The read-only converter to be applied on any operations
+ * using this field.
+ * @return A derived field expression using a new converter.
*/
- @NotNull
- @Override
- String getName();
+ Field convertFrom(Class toType, Function super T, ? extends U> from);
/**
- * The comment given to the field.
+ * Apply an ad-hoc write-only data type {@link Converter} to this field
+ * expression.
*
- * If this Field is a generated field from your database, it
- * may provide its DDL comment through this method. All other column
- * expressions return the empty string "" here, never
- * null.
+ * Rather than attaching data type converters at code generation time, or
+ * creating cumbersome expressions using
+ * {@link DataType#asConvertedDataTypeTo(Class, Function)}, this method
+ * allows for creating a derived field expression with an ad-hoc data type
+ * converter for single query usage.
+ *
+ * @param The user type.
+ * @param converter The write-only converter to be applied on any operations
+ * using this field.
+ * @return A derived field expression using a new converter.
*/
- @NotNull
- @Override
- String getComment();
+ Field convertTo(Class toType, Function super U, ? extends T> to);
/**
* Create an alias for this field.
@@ -273,6 +279,34 @@ extends
@Support
Field as(Field> otherField);
+ /**
+ * The name of the field.
+ *
+ * The name is any of these:
+ *
+ * - The formal name of the field, if it is a physical table/view
+ * field
+ * - The alias of an aliased field
+ * - A generated / unspecified value for any other expression
+ * - The name of a parameter if it is a named {@link Param}
+ *
+ */
+ @NotNull
+ @Override
+ String getName();
+
+ /**
+ * The comment given to the field.
+ *
+ * If this Field is a generated field from your database, it
+ * may provide its DDL comment through this method. All other column
+ * expressions return the empty string "" here, never
+ * null.
+ */
+ @NotNull
+ @Override
+ String getComment();
+
/**
* Create an alias for this field.
*
diff --git a/jOOQ/src/main/java/org/jooq/Row1.java b/jOOQ/src/main/java/org/jooq/Row1.java
index 8623edf6a1..a5e5f767d7 100644
--- a/jOOQ/src/main/java/org/jooq/Row1.java
+++ b/jOOQ/src/main/java/org/jooq/Row1.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row1 extends Row {
+public interface Row1 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row10.java b/jOOQ/src/main/java/org/jooq/Row10.java
index 7926949576..5e2842770e 100644
--- a/jOOQ/src/main/java/org/jooq/Row10.java
+++ b/jOOQ/src/main/java/org/jooq/Row10.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row10 extends Row {
+public interface Row10 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row11.java b/jOOQ/src/main/java/org/jooq/Row11.java
index 9cb0571d05..59440e7dba 100644
--- a/jOOQ/src/main/java/org/jooq/Row11.java
+++ b/jOOQ/src/main/java/org/jooq/Row11.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row11 extends Row {
+public interface Row11 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row12.java b/jOOQ/src/main/java/org/jooq/Row12.java
index 4f92048c1a..93d1ee985d 100644
--- a/jOOQ/src/main/java/org/jooq/Row12.java
+++ b/jOOQ/src/main/java/org/jooq/Row12.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row12 extends Row {
+public interface Row12 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row13.java b/jOOQ/src/main/java/org/jooq/Row13.java
index 9a4e7a6fb0..a17fdb7b23 100644
--- a/jOOQ/src/main/java/org/jooq/Row13.java
+++ b/jOOQ/src/main/java/org/jooq/Row13.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row13 extends Row {
+public interface Row13 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row14.java b/jOOQ/src/main/java/org/jooq/Row14.java
index a7c4cb6c7b..d66cafbd15 100644
--- a/jOOQ/src/main/java/org/jooq/Row14.java
+++ b/jOOQ/src/main/java/org/jooq/Row14.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row14 extends Row {
+public interface Row14 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row15.java b/jOOQ/src/main/java/org/jooq/Row15.java
index 82c1eeb5b7..0d0dae8f56 100644
--- a/jOOQ/src/main/java/org/jooq/Row15.java
+++ b/jOOQ/src/main/java/org/jooq/Row15.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row15 extends Row {
+public interface Row15 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row16.java b/jOOQ/src/main/java/org/jooq/Row16.java
index ad79ef54fb..ccb3adaa7c 100644
--- a/jOOQ/src/main/java/org/jooq/Row16.java
+++ b/jOOQ/src/main/java/org/jooq/Row16.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row16 extends Row {
+public interface Row16 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row17.java b/jOOQ/src/main/java/org/jooq/Row17.java
index 8b8aad9654..b84cc0f17c 100644
--- a/jOOQ/src/main/java/org/jooq/Row17.java
+++ b/jOOQ/src/main/java/org/jooq/Row17.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row17 extends Row {
+public interface Row17 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row18.java b/jOOQ/src/main/java/org/jooq/Row18.java
index f5e860afdf..bc06a74915 100644
--- a/jOOQ/src/main/java/org/jooq/Row18.java
+++ b/jOOQ/src/main/java/org/jooq/Row18.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row18 extends Row {
+public interface Row18 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row19.java b/jOOQ/src/main/java/org/jooq/Row19.java
index 2f6db2f29b..b67cdb1425 100644
--- a/jOOQ/src/main/java/org/jooq/Row19.java
+++ b/jOOQ/src/main/java/org/jooq/Row19.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row19 extends Row {
+public interface Row19 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row2.java b/jOOQ/src/main/java/org/jooq/Row2.java
index 236c92089e..8e62e9daea 100644
--- a/jOOQ/src/main/java/org/jooq/Row2.java
+++ b/jOOQ/src/main/java/org/jooq/Row2.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row2 extends Row {
+public interface Row2 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row20.java b/jOOQ/src/main/java/org/jooq/Row20.java
index bec0e4862e..e96eca9da6 100644
--- a/jOOQ/src/main/java/org/jooq/Row20.java
+++ b/jOOQ/src/main/java/org/jooq/Row20.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row20 extends Row {
+public interface Row20 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row21.java b/jOOQ/src/main/java/org/jooq/Row21.java
index 077f4a3e2d..bad4bb8ef4 100644
--- a/jOOQ/src/main/java/org/jooq/Row21.java
+++ b/jOOQ/src/main/java/org/jooq/Row21.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row21 extends Row {
+public interface Row21 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row22.java b/jOOQ/src/main/java/org/jooq/Row22.java
index 46238152bc..5bca38d94a 100644
--- a/jOOQ/src/main/java/org/jooq/Row22.java
+++ b/jOOQ/src/main/java/org/jooq/Row22.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row22 extends Row {
+public interface Row22 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row3.java b/jOOQ/src/main/java/org/jooq/Row3.java
index bbd14b2ddf..d6822194be 100644
--- a/jOOQ/src/main/java/org/jooq/Row3.java
+++ b/jOOQ/src/main/java/org/jooq/Row3.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row3 extends Row {
+public interface Row3 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row4.java b/jOOQ/src/main/java/org/jooq/Row4.java
index 40b3f9dc88..b7a5d0f2dc 100644
--- a/jOOQ/src/main/java/org/jooq/Row4.java
+++ b/jOOQ/src/main/java/org/jooq/Row4.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row4 extends Row {
+public interface Row4 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row5.java b/jOOQ/src/main/java/org/jooq/Row5.java
index 7ad9c10a78..3ab9c2f61d 100644
--- a/jOOQ/src/main/java/org/jooq/Row5.java
+++ b/jOOQ/src/main/java/org/jooq/Row5.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row5 extends Row {
+public interface Row5 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row6.java b/jOOQ/src/main/java/org/jooq/Row6.java
index 5d343e8427..4be2592ab2 100644
--- a/jOOQ/src/main/java/org/jooq/Row6.java
+++ b/jOOQ/src/main/java/org/jooq/Row6.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row6 extends Row {
+public interface Row6 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row7.java b/jOOQ/src/main/java/org/jooq/Row7.java
index 0444854b05..388ecb5b6a 100644
--- a/jOOQ/src/main/java/org/jooq/Row7.java
+++ b/jOOQ/src/main/java/org/jooq/Row7.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row7 extends Row {
+public interface Row7 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row8.java b/jOOQ/src/main/java/org/jooq/Row8.java
index 13f0cb5f43..0edc1e5773 100644
--- a/jOOQ/src/main/java/org/jooq/Row8.java
+++ b/jOOQ/src/main/java/org/jooq/Row8.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row8 extends Row {
+public interface Row8 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/Row9.java b/jOOQ/src/main/java/org/jooq/Row9.java
index 317b4f16f6..e4dc79e1b8 100644
--- a/jOOQ/src/main/java/org/jooq/Row9.java
+++ b/jOOQ/src/main/java/org/jooq/Row9.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Row9 extends Row {
+public interface Row9 extends Row, SelectField> {
// ------------------------------------------------------------------------
// Field accessors
diff --git a/jOOQ/src/main/java/org/jooq/RowN.java b/jOOQ/src/main/java/org/jooq/RowN.java
index 9059ff5936..c230e3a4b3 100644
--- a/jOOQ/src/main/java/org/jooq/RowN.java
+++ b/jOOQ/src/main/java/org/jooq/RowN.java
@@ -83,7 +83,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface RowN extends Row {
+public interface RowN extends Row, SelectField {
// ------------------------------------------------------------------------
// Generic comparison predicates
diff --git a/jOOQ/src/main/java/org/jooq/SelectField.java b/jOOQ/src/main/java/org/jooq/SelectField.java
index a6d40f7b8b..c4a4d22cc9 100644
--- a/jOOQ/src/main/java/org/jooq/SelectField.java
+++ b/jOOQ/src/main/java/org/jooq/SelectField.java
@@ -38,7 +38,6 @@
package org.jooq;
-
/**
* A QueryPart to be used exclusively in SELECT
* clauses.
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractCursor.java b/jOOQ/src/main/java/org/jooq/impl/AbstractCursor.java
index 7db34043aa..baee571123 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractCursor.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractCursor.java
@@ -63,7 +63,7 @@ abstract class AbstractCursor extends AbstractResult implem
*/
private static final long serialVersionUID = 866689823212695960L;
- AbstractCursor(Configuration configuration, AbstractRow row) {
+ AbstractCursor(Configuration configuration, AbstractRow row) {
super(configuration, row);
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java
index 85bf006755..3dd289f7b7 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java
@@ -1241,7 +1241,7 @@ abstract class AbstractDMLQuery extends AbstractRowCountQuery
// Only the IDENTITY value was requested. No need for an
// additional query
if (returningResolvedAsterisks.size() == 1 && new FieldsImpl<>(returningResolvedAsterisks).field(returnIdentity) != null) {
- AbstractRow fields = Tools.row0(returningResolvedAsterisks.toArray(EMPTY_FIELD));
+ AbstractRow extends AbstractRecord> fields = (AbstractRow) Tools.row0(returningResolvedAsterisks.toArray(EMPTY_FIELD));
for (final Object id : ids) {
((Result) getResult()).add(
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java
index 5fa616e6c3..d2101d183e 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java
@@ -188,12 +188,12 @@ abstract class AbstractField extends AbstractTypedNamed implements Field Field convert(Binding binding) {
- return CustomField.of(getQualifiedName(), getDataType().asConvertedDataType(binding), c -> c.visit(this));
+ return coerce(getDataType().asConvertedDataType(binding));
}
@Override
public final Field convert(Converter converter) {
- return CustomField.of(getQualifiedName(), getDataType().asConvertedDataType(converter), c -> c.visit(this));
+ return coerce(getDataType().asConvertedDataType(converter));
}
@Override
@@ -202,7 +202,17 @@ abstract class AbstractField extends AbstractTypedNamed implements Field from,
Function super U, ? extends T> to
) {
- return CustomField.of(getQualifiedName(), getDataType().asConvertedDataType(toType, from, to), c -> c.visit(this));
+ return coerce(getDataType().asConvertedDataType(toType, from, to));
+ }
+
+ @Override
+ public final Field convertFrom(Class toType, Function super T, ? extends U> from) {
+ return coerce(getDataType().asConvertedDataTypeFrom(toType, from));
+ }
+
+ @Override
+ public final Field convertTo(Class toType, Function super U, ? extends T> to) {
+ return coerce(getDataType().asConvertedDataTypeTo(toType, to));
}
@Override
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java
index 6e3790ae79..66b6d26620 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java
@@ -120,14 +120,14 @@ abstract class AbstractRecord extends AbstractStore implements Record {
/**
* Generated UID
*/
- private static final long serialVersionUID = -6052512608911220404L;
- private static final JooqLogger log = JooqLogger.getLogger(AbstractRecord.class);
+ private static final long serialVersionUID = -6052512608911220404L;
+ private static final JooqLogger log = JooqLogger.getLogger(AbstractRecord.class);
- final AbstractRow fields;
- final Object[] values;
- final Object[] originals;
- final BitSet changed;
- boolean fetched;
+ final AbstractRow extends AbstractRecord> fields;
+ final Object[] values;
+ final Object[] originals;
+ final BitSet changed;
+ boolean fetched;
/**
* @deprecated - 3.14.5 - [#8495] [#11058] - Re-use AbstractRow reference if possible
@@ -145,10 +145,10 @@ abstract class AbstractRecord extends AbstractStore implements Record {
this(Tools.row0(fields));
}
- AbstractRecord(AbstractRow fields) {
+ AbstractRecord(AbstractRow> fields) {
int size = fields.size();
- this.fields = fields;
+ this.fields = (AbstractRow extends AbstractRecord>) fields;
this.values = new Object[size];
this.originals = new Object[size];
this.changed = new BitSet(size);
@@ -843,7 +843,7 @@ abstract class AbstractRecord extends AbstractStore implements Record {
}
final R intoRecord(Class type) {
- return Tools.newRecord(fetched, type, fields, configuration()).operate(new TransferRecordState<>(null));
+ return (R) Tools.newRecord(fetched, type, fields, configuration()).operate(new TransferRecordState<>(null));
}
private class TransferRecordState implements ThrowingFunction {
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractResult.java b/jOOQ/src/main/java/org/jooq/impl/AbstractResult.java
index 90f4b3ef9e..8db32e28ee 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractResult.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractResult.java
@@ -120,10 +120,10 @@ abstract class AbstractResult extends AbstractFormattable impl
*/
private static final long serialVersionUID = -3412555195899758746L;
- final AbstractRow fields;
+ final AbstractRow fields;
Configuration configuration;
- AbstractResult(Configuration configuration, AbstractRow row) {
+ AbstractResult(Configuration configuration, AbstractRow row) {
this.configuration = configuration;
this.fields = row;
}
@@ -132,9 +132,8 @@ abstract class AbstractResult extends AbstractFormattable impl
// XXX: RecordType API of subtypes
// -------------------------------------------------------------------------
- @SuppressWarnings("unchecked")
public final RecordType recordType() {
- return (RecordType) fields.fields;
+ return fields.fields;
}
@Override
@@ -800,7 +799,13 @@ abstract class AbstractResult extends AbstractFormattable impl
}
}
- static final void formatJSONMap0(Record record, AbstractRow fields, JSONFormat format, int recordLevel, Writer writer) throws java.io.IOException {
+ static final void formatJSONMap0(
+ Record record,
+ AbstractRow> fields,
+ JSONFormat format,
+ int recordLevel,
+ Writer writer
+ ) throws java.io.IOException {
String separator = "";
int size = fields.size();
boolean wrapRecords = format.wrapSingleColumnRecords() || size > 1;
@@ -836,7 +841,13 @@ abstract class AbstractResult extends AbstractFormattable impl
writer.append('}');
}
- static final void formatJSONArray0(Record record, AbstractRow fields, JSONFormat format, int recordLevel, Writer writer) throws java.io.IOException {
+ static final void formatJSONArray0(
+ Record record,
+ AbstractRow> fields,
+ JSONFormat format,
+ int recordLevel,
+ Writer writer
+ ) throws java.io.IOException {
String separator = "";
int size = fields.size();
@@ -936,7 +947,7 @@ abstract class AbstractResult extends AbstractFormattable impl
XMLFormat format,
int recordLevel,
Record record,
- AbstractRow fields
+ AbstractRow> fields
)
throws java.io.IOException {
String newline = format.newline();
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java
index 82fe419c17..49a2592997 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java
@@ -60,27 +60,6 @@ import org.jooq.Field;
import org.jooq.Name;
import org.jooq.Record;
import org.jooq.Record1;
-import org.jooq.Record10;
-import org.jooq.Record11;
-import org.jooq.Record12;
-import org.jooq.Record13;
-import org.jooq.Record14;
-import org.jooq.Record15;
-import org.jooq.Record16;
-import org.jooq.Record17;
-import org.jooq.Record18;
-import org.jooq.Record19;
-import org.jooq.Record2;
-import org.jooq.Record20;
-import org.jooq.Record21;
-import org.jooq.Record22;
-import org.jooq.Record3;
-import org.jooq.Record4;
-import org.jooq.Record5;
-import org.jooq.Record6;
-import org.jooq.Record7;
-import org.jooq.Record8;
-import org.jooq.Record9;
import org.jooq.Result;
import org.jooq.ResultQuery;
import org.jooq.Results;
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRow.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRow.java
index 4c2de8a51d..eb4e56c697 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractRow.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRow.java
@@ -43,23 +43,30 @@ import static org.jooq.impl.Keywords.K_ROW;
import static org.jooq.impl.QueryPartListView.wrap;
import java.util.Collection;
+import java.util.function.Function;
import java.util.stream.Stream;
+import org.jooq.Binding;
import org.jooq.Clause;
+import org.jooq.Comment;
import org.jooq.Condition;
+import org.jooq.Configuration;
import org.jooq.Context;
+import org.jooq.Converter;
import org.jooq.DataType;
import org.jooq.Field;
import org.jooq.Name;
+import org.jooq.Record;
import org.jooq.Row;
import org.jooq.Row1;
import org.jooq.Row2;
+import org.jooq.SelectField;
/**
* A common base class for the various degrees of {@link Row1}, {@link Row2},
* etc.
*/
-abstract class AbstractRow extends AbstractQueryPart implements Row {
+abstract class AbstractRow extends AbstractQueryPart implements Row, SelectField {
/**
* Generated UID
@@ -67,7 +74,7 @@ abstract class AbstractRow extends AbstractQueryPart implements Row {
private static final long serialVersionUID = 2175082265665049629L;
private static final Clause[] CLAUSES = { FIELD_ROW };
- final FieldsImpl> fields;
+ final FieldsImpl fields;
AbstractRow(Field>... fields) {
this(new FieldsImpl<>(fields));
@@ -77,12 +84,70 @@ abstract class AbstractRow extends AbstractQueryPart implements Row {
this(new FieldsImpl<>(fields));
}
- AbstractRow(FieldsImpl> fields) {
+ AbstractRow(FieldsImpl fields) {
super();
this.fields = fields;
}
+ // ------------------------------------------------------------------------
+ // XXX: SelectField API
+ // ------------------------------------------------------------------------
+
+ private final RowField rf() {
+ return new RowField(this);
+ }
+
+ @Override
+ public Converter, R> getConverter() {
+ return rf().getConverter();
+ }
+
+ @Override
+ public Binding, R> getBinding() {
+ return rf().getBinding();
+ }
+
+ @Override
+ public Class getType() {
+ return rf().getType();
+ }
+
+ @Override
+ public DataType getDataType() {
+ return rf().getDataType();
+ }
+
+ @Override
+ public DataType getDataType(Configuration configuration) {
+ return rf().getDataType(configuration);
+ }
+
+ @Override
+ public String getName() {
+ return rf().getName();
+ }
+
+ @Override
+ public Name getQualifiedName() {
+ return rf().getQualifiedName();
+ }
+
+ @Override
+ public Name getUnqualifiedName() {
+ return rf().getUnqualifiedName();
+ }
+
+ @Override
+ public String getComment() {
+ return rf().getComment();
+ }
+
+ @Override
+ public Comment getCommentPart() {
+ return rf().getCommentPart();
+ }
+
/**
* [#8517] Convert the bind values in this row to the types of columns of another row
*/
diff --git a/jOOQ/src/main/java/org/jooq/impl/ArrayRecordImpl.java b/jOOQ/src/main/java/org/jooq/impl/ArrayRecordImpl.java
index 1cce15b7e4..427b76f640 100644
--- a/jOOQ/src/main/java/org/jooq/impl/ArrayRecordImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/ArrayRecordImpl.java
@@ -40,9 +40,6 @@ package org.jooq.impl;
-import static org.jooq.impl.Tools.map;
-
-
diff --git a/jOOQ/src/main/java/org/jooq/impl/ArraySelect.java b/jOOQ/src/main/java/org/jooq/impl/ArraySelect.java
index f7ea910dc1..4582bb3081 100644
--- a/jOOQ/src/main/java/org/jooq/impl/ArraySelect.java
+++ b/jOOQ/src/main/java/org/jooq/impl/ArraySelect.java
@@ -37,32 +37,18 @@
*/
package org.jooq.impl;
-// ...
-// ...
-// ...
-import static org.jooq.SQLDialect.POSTGRES;
import static org.jooq.impl.DSL.arrayAgg;
import static org.jooq.impl.Keywords.K_ARRAY;
-import static org.jooq.impl.Keywords.K_INT;
import static org.jooq.impl.Names.N_ARRAY;
-import static org.jooq.impl.QueryPartListView.wrap;
-import static org.jooq.impl.Tools.selectQueryImpl;
import static org.jooq.impl.Tools.visitSubquery;
-import java.util.Collection;
-import java.util.Set;
-
import org.jooq.Context;
import org.jooq.DataType;
import org.jooq.Field;
import org.jooq.Record1;
-import org.jooq.SQLDialect;
import org.jooq.Select;
import org.jooq.Table;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
/**
* @author Lukas Eder
*/
diff --git a/jOOQ/src/main/java/org/jooq/impl/CatalogImpl.java b/jOOQ/src/main/java/org/jooq/impl/CatalogImpl.java
index 342588b558..11136534de 100644
--- a/jOOQ/src/main/java/org/jooq/impl/CatalogImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/CatalogImpl.java
@@ -39,9 +39,6 @@ package org.jooq.impl;
import static org.jooq.Clause.CATALOG;
import static org.jooq.Clause.CATALOG_REFERENCE;
-import static org.jooq.impl.CatalogImpl.DEFAULT_CATALOG;
-import static org.jooq.impl.Tools.findAny;
-import static org.jooq.tools.StringUtils.defaultIfNull;
import java.util.Collections;
import java.util.List;
diff --git a/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java b/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java
index 1fe4394c19..8094be2306 100644
--- a/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java
@@ -115,7 +115,7 @@ final class CursorImpl extends AbstractCursor {
}
CursorImpl(ExecuteContext ctx, ExecuteListener listener, Field>[] fields, int[] internIndexes, boolean keepStatement, boolean keepResultSet, Class extends R> type, int maxRows, boolean autoclosing) {
- super(ctx.configuration(), Tools.row0(fields));
+ super(ctx.configuration(), (AbstractRow) Tools.row0(fields));
this.ctx = ctx;
this.listener = (listener != null ? listener : ExecuteListeners.getAndStart(ctx));
@@ -1455,10 +1455,10 @@ final class CursorImpl extends AbstractCursor {
private class CursorRecordInitialiser implements ThrowingFunction {
- private final AbstractRow initialiserFields;
- private int offset;
+ private final AbstractRow> initialiserFields;
+ private int offset;
- CursorRecordInitialiser(AbstractRow initialiserFields, int offset) {
+ CursorRecordInitialiser(AbstractRow> initialiserFields, int offset) {
this.initialiserFields = initialiserFields;
this.offset = offset;
}
@@ -1514,7 +1514,7 @@ final class CursorImpl extends AbstractCursor {
private final void setValue(AbstractRecord record, Field field, int index) throws SQLException {
try {
T value;
- AbstractRow nested = null;
+ AbstractRow> nested = null;
Class extends AbstractRecord> recordType = null;
if (field instanceof RowField) {
@@ -1528,7 +1528,7 @@ final class CursorImpl extends AbstractCursor {
}
if (nested != null) {
- value = (T) Tools.newRecord(true, (Class) recordType, nested, ((DefaultExecuteContext) ctx).originalConfiguration())
+ value = (T) Tools.newRecord(true, (Class) recordType, (AbstractRow) nested, ((DefaultExecuteContext) ctx).originalConfiguration())
.operate(new CursorRecordInitialiser(nested, offset + index));
offset += nested.size() - 1;
diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java
index f38bddb383..639a985023 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DSL.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java
@@ -14791,287 +14791,221 @@ public class DSL {
/**
- * EXPERIMENTAL: Turn a row value expression of degree 1 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row1} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row1 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 2 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row2} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row2 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 3 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row3} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row3 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 4 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row4} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row4 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 5 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row5} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row5 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 6 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row6} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row6 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 7 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row7} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row7 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 8 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row8} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row8 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 9 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row9} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row9 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 10 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row10} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row10 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 11 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row11} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row11 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 12 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row12} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row12 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 13 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row13} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row13 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 14 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row14} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row14 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 15 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row15} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row15 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 16 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row16} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row16 row) {
return new RowField<>(row);
}
/**
- * EXPERIMENTAL: Turn a row value expression of degree 17 into a {@code Field}.
- *
- * 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.
+ * @deprecated - [#11812] - 3.15.0 - Use {@link Row17} as a {@link SelectField} directly, instead.
*/
@NotNull
@Support
+ @Deprecated
public static Field> rowField(Row17