diff --git a/jOOQ/src/main/java/org/jooq/impl/ArrayGet.java b/jOOQ/src/main/java/org/jooq/impl/ArrayGet.java index 535cff269d..d71aa503d3 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ArrayGet.java +++ b/jOOQ/src/main/java/org/jooq/impl/ArrayGet.java @@ -37,31 +37,57 @@ */ package org.jooq.impl; -import static org.jooq.impl.DSL.cardinality; -import static org.jooq.impl.DSL.when; -import static org.jooq.impl.Names.N_ARRAY_GET; -import static org.jooq.impl.SQLDataType.OTHER; -import static org.jooq.tools.StringUtils.defaultIfNull; +import static org.jooq.impl.DSL.*; +import static org.jooq.impl.Internal.*; +import static org.jooq.impl.Keywords.*; +import static org.jooq.impl.Names.*; +import static org.jooq.impl.SQLDataType.*; +import static org.jooq.impl.Tools.*; +import static org.jooq.impl.Tools.BooleanDataKey.*; +import static org.jooq.impl.Tools.DataExtendedKey.*; +import static org.jooq.impl.Tools.DataKey.*; +import static org.jooq.SQLDialect.*; + +import org.jooq.*; +import org.jooq.Record; +import org.jooq.conf.*; +import org.jooq.impl.*; +import org.jooq.tools.*; + +import java.util.*; -import org.jooq.Context; -import org.jooq.DataType; -import org.jooq.Field; /** - * @author Lukas Eder + * The ARRAY GET statement. */ -final class ArrayGet extends AbstractField { - private final Field field; +@SuppressWarnings({ "rawtypes", "unchecked", "unused" }) +final class ArrayGet +extends + AbstractField +{ + + private final Field array; private final Field index; - @SuppressWarnings("unchecked") - ArrayGet(Field field, Field index) { - super(N_ARRAY_GET, (DataType) defaultIfNull(field.getDataType().getArrayComponentDataType(), OTHER)); + ArrayGet( + Field array, + Field index + ) { + super( + N_ARRAY_GET, + allNotNull((DataType) StringUtils.defaultIfNull(array.getDataType().getArrayComponentDataType(), OTHER)) + ); - this.field = field; + this.array = array; this.index = index; } + // ------------------------------------------------------------------------- + // XXX: QueryPart API + // ------------------------------------------------------------------------- + + + @Override public final void accept(Context ctx) { switch (ctx.family()) { @@ -72,11 +98,11 @@ final class ArrayGet extends AbstractField { case H2: - ctx.visit(N_ARRAY_GET).sql('(').visit(field).sql(", ").visit(index).sql(')'); + ctx.visit(N_ARRAY_GET).sql('(').visit(array).sql(", ").visit(index).sql(')'); break; case HSQLDB: - ctx.visit(when(cardinality(field).ge(index), new Standard())); + ctx.visit(when(cardinality(array).ge(index), new Standard())); break; default: @@ -93,7 +119,38 @@ final class ArrayGet extends AbstractField { @Override public void accept(Context ctx) { - ctx.visit(field).sql('[').visit(index).sql(']'); + ctx.visit(array).sql('[').visit(index).sql(']'); } } + + + + + + + + + + + + + + + + + // ------------------------------------------------------------------------- + // The Object API + // ------------------------------------------------------------------------- + + @Override + public boolean equals(Object that) { + if (that instanceof ArrayGet) { + return + StringUtils.equals(array, ((ArrayGet) that).array) && + StringUtils.equals(index, ((ArrayGet) that).index) + ; + } + else + return super.equals(that); + } } diff --git a/jOOQ/src/main/java/org/jooq/impl/Cardinality.java b/jOOQ/src/main/java/org/jooq/impl/Cardinality.java index c9748b033f..a0a5b67dd0 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Cardinality.java +++ b/jOOQ/src/main/java/org/jooq/impl/Cardinality.java @@ -37,32 +37,90 @@ */ package org.jooq.impl; -// ... -import static org.jooq.impl.Names.N_CARDINALITY; -import static org.jooq.impl.SQLDataType.INTEGER; +import static org.jooq.impl.DSL.*; +import static org.jooq.impl.Internal.*; +import static org.jooq.impl.Keywords.*; +import static org.jooq.impl.Names.*; +import static org.jooq.impl.SQLDataType.*; +import static org.jooq.impl.Tools.*; +import static org.jooq.impl.Tools.BooleanDataKey.*; +import static org.jooq.impl.Tools.DataExtendedKey.*; +import static org.jooq.impl.Tools.DataKey.*; +import static org.jooq.SQLDialect.*; + +import org.jooq.*; +import org.jooq.Record; +import org.jooq.conf.*; +import org.jooq.impl.*; +import org.jooq.tools.*; + +import java.util.*; -import org.jooq.Context; -import org.jooq.Field; /** - * @author Lukas Eder + * The CARDINALITY statement. */ -final class Cardinality extends AbstractField { - private final Field arg; +@SuppressWarnings({ "rawtypes", "unused" }) +final class Cardinality +extends + AbstractField +{ - Cardinality(Field arg) { - super(N_CARDINALITY, INTEGER); + private final Field array; - this.arg = arg; + Cardinality( + Field array + ) { + super( + N_CARDINALITY, + allNotNull(INTEGER, array) + ); + + this.array = nullSafeNotNull(array, OTHER.getArrayDataType()); } + // ------------------------------------------------------------------------- + // XXX: QueryPart API + // ------------------------------------------------------------------------- + @Override public final void accept(Context ctx) { + switch (ctx.family()) { - ctx.visit(N_CARDINALITY).sql('(').visit(arg).sql(')'); + + default: + ctx.visit(function(N_CARDINALITY, getDataType(), array)); + break; + } + } + + + + + + + + + + + + + // ------------------------------------------------------------------------- + // The Object API + // ------------------------------------------------------------------------- + + @Override + public boolean equals(Object that) { + if (that instanceof Cardinality) { + return + StringUtils.equals(array, ((Cardinality) that).array) + ; + } + else + return super.equals(that); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 262c4c3d83..37a072de69 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -18971,6 +18971,45 @@ public class DSL { return new DateAdd(date, interval); } + // ------------------------------------------------------------------------- + // Array functions + // ------------------------------------------------------------------------- + + /** + * The CARDINALITY function. + *

+ * Calculate the cardinality of an array field. + */ + @NotNull + @Support({ H2, HSQLDB, POSTGRES, YUGABYTE }) + public static Field cardinality(Field array) { + return new Cardinality(array); + } + + /** + * The ARRAY_GET function. + *

+ * Get an array element at a given index (1 based). + * + * @param index is wrapped as {@link #val(Object)}. + */ + @NotNull + @Support({ H2, HSQLDB, POSTGRES, YUGABYTE }) + public static Field arrayGet(Field array, int index) { + return new ArrayGet(array, Tools.field(index)); + } + + /** + * The ARRAY_GET function. + *

+ * Get an array element at a given index (1 based). + */ + @NotNull + @Support({ H2, HSQLDB, POSTGRES, YUGABYTE }) + public static Field arrayGet(Field array, Field index) { + return new ArrayGet(array, index); + } + // ------------------------------------------------------------------------- // System functions // ------------------------------------------------------------------------- @@ -23511,33 +23550,6 @@ public class DSL { return new ArraySelect<>(select); } - /** - * Calculate the cardinality of an array field. - */ - @NotNull - @Support({ H2, HSQLDB, POSTGRES, YUGABYTE }) - public static Field cardinality(Field field) { - return new Cardinality(field); - } - - /** - * Get an array element at a given index (1 based) - */ - @NotNull - @Support({ H2, HSQLDB, POSTGRES, YUGABYTE }) - public static Field arrayGet(Field field, int index) { - return arrayGet(field, Tools.field(index)); - } - - /** - * Get an array element at a given index (1 based) - */ - @NotNull - @Support({ H2, HSQLDB, POSTGRES, YUGABYTE }) - public static Field arrayGet(Field field, Field index) { - return new ArrayGet<>(Tools.nullSafe(field), Tools.nullSafe(index)); - } - /** * Get the MULTISET operator to nest subqueries. *

diff --git a/pom.xml b/pom.xml index 48508ef810..75a66f645a 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ 2.5.1 - 42.2.22 + 42.2.23 9.2.1.jre11 21.3.0.0 2.0.0.6