> $constructor() {
+ return (a1, a2) -> new ArrayConcat<>(a1, a2);
+ }
+
+ // -------------------------------------------------------------------------
+ // XXX: The Object API
+ // -------------------------------------------------------------------------
+
+ @Override
+ public boolean equals(Object that) {
+ if (that instanceof QOM.ArrayConcat> o) {
+ return
+ StringUtils.equals($arg1(), o.$arg1()) &&
+ StringUtils.equals($arg2(), o.$arg2())
+ ;
+ }
+ 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 8ffb413f32..d85bcbfa31 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DSL.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java
@@ -19692,6 +19692,50 @@ public class DSL {
return new ArrayGet<>(array, index);
}
+ /**
+ * The ARRAY_CONCAT function.
+ *
+ * Concatenate two arrays.
+ */
+ @NotNull
+ @Support({ H2, HSQLDB, POSTGRES, YUGABYTEDB })
+ public static Field arrayConcat(T[] arg1, T[] arg2) {
+ return new ArrayConcat<>(Tools.field(arg1), Tools.field(arg2));
+ }
+
+ /**
+ * The ARRAY_CONCAT function.
+ *
+ * Concatenate two arrays.
+ */
+ @NotNull
+ @Support({ H2, HSQLDB, POSTGRES, YUGABYTEDB })
+ public static Field arrayConcat(T[] arg1, Field arg2) {
+ return new ArrayConcat<>(Tools.field(arg1), arg2);
+ }
+
+ /**
+ * The ARRAY_CONCAT function.
+ *
+ * Concatenate two arrays.
+ */
+ @NotNull
+ @Support({ H2, HSQLDB, POSTGRES, YUGABYTEDB })
+ public static Field arrayConcat(Field arg1, T[] arg2) {
+ return new ArrayConcat<>(arg1, Tools.field(arg2, arg1));
+ }
+
+ /**
+ * The ARRAY_CONCAT function.
+ *
+ * Concatenate two arrays.
+ */
+ @NotNull
+ @Support({ H2, HSQLDB, POSTGRES, YUGABYTEDB })
+ public static Field arrayConcat(Field arg1, Field arg2) {
+ return new ArrayConcat<>(arg1, arg2);
+ }
+
// -------------------------------------------------------------------------
// Utility functions
// -------------------------------------------------------------------------
diff --git a/jOOQ/src/main/java/org/jooq/impl/Names.java b/jOOQ/src/main/java/org/jooq/impl/Names.java
index 767d2fd96d..6dea5bfd14 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Names.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Names.java
@@ -345,6 +345,7 @@ final class Names {
static final Name N_ACOSH = systemName("acosh");
static final Name N_ACOTH = systemName("acoth");
static final Name N_ANY_VALUE = systemName("any_value");
+ static final Name N_ARRAY_CONCAT = systemName("array_concat");
static final Name N_ARRAY_GET = systemName("array_get");
static final Name N_ASCII = systemName("ascii");
static final Name N_ASIN = systemName("asin");
diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java
index fbc265d344..1d52f21344 100644
--- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java
@@ -7747,11 +7747,18 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
if (r instanceof Field)
while (parseIf("||"))
- r = concat((Field) r, toField(parseCollated()));
+ r = concatOperator((Field) r, toField(parseCollated()));
return r;
}
+ private final Field> concatOperator(Field> a1, Field> a2) {
+ if (a1.getDataType().isArray() && a2.getDataType().isArray())
+ return DSL.arrayConcat((Field) a1, (Field) a2);
+ else
+ return DSL.concat(a1, a2);
+ }
+
private final FieldOrRow parseCollated() {
FieldOrRow r = parseNumericOp();
diff --git a/jOOQ/src/main/java/org/jooq/impl/QOM.java b/jOOQ/src/main/java/org/jooq/impl/QOM.java
index 0e3c0128a6..8605c3d2b8 100644
--- a/jOOQ/src/main/java/org/jooq/impl/QOM.java
+++ b/jOOQ/src/main/java/org/jooq/impl/QOM.java
@@ -4700,6 +4700,20 @@ public final class QOM {
@NotNull default Field $index() { return $arg2(); }
}
+ /**
+ * The ARRAY CONCAT function.
+ *
+ * Concatenate two arrays.
+ */
+ public /*sealed*/ interface ArrayConcat
+ extends
+ UReturnsNullOnNullInput,
+ UOperator2, Field, Field>,
+ org.jooq.Field
+ //permits
+ // ArrayConcat
+ {}
+
/**
* The NVL function.
*