From 03aa7e57be4911d178d08fb33ba8c0b0beccc19f Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 8 Mar 2022 11:22:36 +0100 Subject: [PATCH] [jOOQ/jOOQ#13184] UNNEST table expression does not maintain derived column list --- .../main/java/org/jooq/impl/ArrayTable.java | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/ArrayTable.java b/jOOQ/src/main/java/org/jooq/impl/ArrayTable.java index 89ec8d7559..d64a2e12e6 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ArrayTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/ArrayTable.java @@ -44,9 +44,6 @@ import static org.jooq.impl.Names.N_ARRAY_TABLE; import static org.jooq.impl.Names.N_COLUMN_VALUE; import static org.jooq.impl.Tools.map; -import java.util.ArrayList; -import java.util.List; - // ... import org.jooq.Configuration; import org.jooq.Context; @@ -55,10 +52,8 @@ import org.jooq.Name; import org.jooq.Param; // ... import org.jooq.Record; -import org.jooq.SQLDialect; import org.jooq.Table; import org.jooq.TableOptions; -import org.jooq.UDTRecord; import org.jooq.exception.DataTypeException; import org.jooq.impl.QOM.UNotYetImplemented; import org.jooq.impl.QOM.UTransient; @@ -83,7 +78,7 @@ final class ArrayTable extends AbstractTable implements UNotYetImplement ArrayTable(Field array, Name alias) { // [#7863] TODO: Possibly resolve field aliases from UDT type - this(array, alias, new Name[] { N_COLUMN_VALUE }); + this(array, alias, null); } @SuppressWarnings({ "unchecked" }) @@ -92,10 +87,8 @@ final class ArrayTable extends AbstractTable implements UNotYetImplement Class arrayType; - if (array.getDataType().getType().isArray()) { + if (array.getDataType().getType().isArray()) arrayType = array.getDataType().getArrayComponentType(); - } - @@ -117,11 +110,11 @@ final class ArrayTable extends AbstractTable implements UNotYetImplement this.array = array; this.alias = alias; - this.fieldAliases = fieldAliases; - this.field = init(arrayType, alias); + this.fieldAliases = Tools.isEmpty(fieldAliases) ? new Name[] { N_COLUMN_VALUE } : fieldAliases; + this.field = init(arrayType, this.alias, this.fieldAliases[0]); } - private static final FieldsImpl init(Class arrayType, Name alias) { + private static final FieldsImpl init(Class arrayType, Name alias, Name fieldAlias) { // [#1114] [#7863] VARRAY/TABLE of OBJECT have more than one field if (Record.class.isAssignableFrom(arrayType)) { @@ -138,7 +131,7 @@ final class ArrayTable extends AbstractTable implements UNotYetImplement // Simple array types have a synthetic field called "COLUMN_VALUE" else - return new FieldsImpl<>(DSL.field(name(alias.last(), "COLUMN_VALUE"), DSL.getDataType(arrayType))); + return new FieldsImpl<>(DSL.field(alias.unqualifiedName().append(fieldAlias.unqualifiedName()), DSL.getDataType(arrayType))); } @Override