From cc2e45792b7ef15e221bf0c7a8faa17d8f335d92 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 15 Dec 2022 17:10:17 +0100 Subject: [PATCH] [jOOQ/jOOQ#5799] Fix regressions in ORACLE dialect --- .../main/java/org/jooq/impl/ArrayTable.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/ArrayTable.java b/jOOQ/src/main/java/org/jooq/impl/ArrayTable.java index 927c5e4bc4..480343756f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ArrayTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/ArrayTable.java @@ -82,13 +82,21 @@ implements ArrayTable(Field array, Name alias) { // [#7863] TODO: Possibly resolve field aliases from UDT type - this(array, alias, null); + this(array, alias, (Name[]) null); } - @SuppressWarnings({ "unchecked" }) ArrayTable(Field array, Name alias, Name[] fieldAliases) { - super(alias, fieldAliases(fieldAliases)); + this(array, alias, init(arrayType(array), alias, fieldAliases(fieldAliases)[0])); + } + private ArrayTable(Field array, Name alias, FieldsImpl fields) { + super(alias, Tools.map(fields.fields, Field::getUnqualifiedName, Name[]::new)); + + this.array = array; + this.field = fields; + } + + private static final Class arrayType(Field array) { Class arrayType; if (array.getDataType().getType().isArray()) @@ -112,11 +120,10 @@ implements else arrayType = Object.class; - this.array = array; - this.field = init(arrayType, this.alias, this.fieldAliases[0]); + return arrayType; } - static Name[] fieldAliases(Name[] fieldAliases) { + static final Name[] fieldAliases(Name[] fieldAliases) { return isEmpty(fieldAliases) ? new Name[] { N_COLUMN_VALUE } : fieldAliases; } @@ -127,7 +134,7 @@ implements try { return new FieldsImpl<>(map( ((Record) arrayType.getDeclaredConstructor().newInstance()).fields(), - f -> DSL.field(name(alias.last(), f.getName()), f.getDataType()) + f -> DSL.field(alias.append(f.getUnqualifiedName()), f.getDataType()) )); } catch (Exception e) { @@ -215,7 +222,7 @@ implements else - return DSL.table("{0}", array).as(alias); + return DSL.table("{0}", array); // [#756] The standard SQL behaviour default: