From 148bc522c4e2a4220bc970d8a2bc9b68fdae1cc3 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 23 Oct 2024 16:20:14 +0200 Subject: [PATCH] [jOOQ/jOOQ#17489] Invalid constraint type "n" in jOOQ-meta query on PostgreSQL 17 when trying to fetch pg_get_constraintdef for a NOT NULL constraint on a domain --- .../java/org/jooq/meta/postgres/PostgresDatabase.java | 11 +++++++---- .../java/org/jooq/impl/AbstractAggregateFunction.java | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java index 61ad546d56..f3f16a0ac4 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresDatabase.java @@ -923,7 +923,9 @@ public class PostgresDatabase extends AbstractDatabase implements ResultQueryDat d.OID, d.TYPBASETYPE, c.CONNAME, - when(c.OID.isNotNull(), array(constraintDef)) + + // [#17489] PG 17 added NOT NULL constraints for domains to this table + when(c.OID.isNotNull().and(c.CONTYPE.ne(inline("n"))), array(constraintDef)) ) .from(d) .leftJoin(c) @@ -936,9 +938,10 @@ public class PostgresDatabase extends AbstractDatabase implements ResultQueryDat d.OID, d.TYPBASETYPE, c.CONNAME, - decode() - .when(c.CONBIN.isNull(), src) - .otherwise(arrayAppend(src, constraintDef)) + + // [#17489] PG 17 added NOT NULL constraints for domains to this table + when(c.CONBIN.isNull().and(c.CONTYPE.ne(inline("n"))), src) + .else_(arrayAppend(src, constraintDef)) ) .from(name("domains")) .join(d) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java b/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java index ca181cd67c..70a9f1ff7d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java @@ -278,7 +278,7 @@ implements // [#2883][#9109] PostgreSQL and H2 can use the DISTINCT keyword with formal row value expressions. // [#13415] ListAgg is a special case, where the second argument is the separator - if (parens |= (args.size() > 1 && REQUIRE_DISTINCT_RVE.contains(ctx.dialect()) && !(this instanceof ListAgg))) + if (parens |= (args.size() > 1 && REQUIRE_DISTINCT_RVE.contains(ctx.dialect()) && !(this instanceof ListAgg) && !(this instanceof BinaryListAgg))) ctx.sql('('); }