From e86b9f2ef2f5c1dad41cf549d8f60680576239a6 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 24 Nov 2022 16:23:45 +0100 Subject: [PATCH] [jOOQ/jOOQ#7503] Add support for PostgreSQL functions returning anonymous RECORD types --- .../org/jooq/meta/postgres/PostgresRoutineDefinition.java | 2 +- jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java | 5 +++++ .../main/java/org/jooq/util/postgres/PostgresDataType.java | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresRoutineDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresRoutineDefinition.java index 2832bbb8de..6c65bea16f 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresRoutineDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresRoutineDefinition.java @@ -84,7 +84,7 @@ public class PostgresRoutineDefinition extends AbstractRoutineDefinition { ); String dataType = record.get("data_type", String.class); - if (dataType != null && !asList("void", "record").contains(dataType)) { + if (dataType != null && !asList("void").contains(dataType)) { SchemaDefinition typeSchema = null; String schemaName = record.get(ROUTINES.TYPE_UDT_SCHEMA); diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java index 80f0347176..7597a9bd9d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java @@ -506,6 +506,11 @@ implements // be referred to by its name, regrettably if (fields.size() == 1 && fields.get(0).getDataType().isUDT()) result = create.select(field("row(t.*)", fields.get(0).getDataType())).from("{0} as t", asField()).fetch(); + + // [#7503] Anonymous records have to be fetched from the projection + else if (fields.size() == 1 && fields.get(0).getDataType().isRecord()) + result = create.select(asField()).fetch(); + else result = create.select(fields).from("{0}", asField()).fetch(); diff --git a/jOOQ/src/main/java/org/jooq/util/postgres/PostgresDataType.java b/jOOQ/src/main/java/org/jooq/util/postgres/PostgresDataType.java index 44cd1260a8..c26afce87d 100644 --- a/jOOQ/src/main/java/org/jooq/util/postgres/PostgresDataType.java +++ b/jOOQ/src/main/java/org/jooq/util/postgres/PostgresDataType.java @@ -163,6 +163,7 @@ public class PostgresDataType { public static final DataType VARBIT = new BuiltInDataType<>(FAMILY, SQLDataType.VARCHAR, "varbit(l)"); public static final DataType BIT = new BuiltInDataType<>(FAMILY, SQLDataType.CHAR, "bit(l)"); public static final DataType BPCHAR = new BuiltInDataType<>(FAMILY, SQLDataType.CHAR, "bpchar"); + public static final DataType RECORD = new BuiltInDataType<>(FAMILY, SQLDataType.RECORD, "record"); public static final DataType> REFCURSOR = new BuiltInDataType<>(FAMILY, SQLDataType.RESULT, "refcursor"); public static final DataType ANY = new BuiltInDataType<>(FAMILY, SQLDataType.OTHER, "any"); public static final DataType UUID = new BuiltInDataType<>(FAMILY, SQLDataType.UUID, "uuid");