From 1d659422d8c78cb2419aff7d84e2df230a64e3d3 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 30 Mar 2022 11:18:54 +0200 Subject: [PATCH] [jOOQ/jOOQ#13349] Select.asTable() should delay slow call to Tools::autoAlias --- .../main/java/org/jooq/impl/SelectQueryImpl.java | 6 +++--- jOOQ/src/main/java/org/jooq/impl/TableAlias.java | 14 ++++++++------ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index 904a2a99e2..1ca0607a6c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -649,9 +649,9 @@ final class SelectQueryImpl extends AbstractResultQuery imp @Override public final Table asTable() { - // Its usually better to alias nested selects that are used in - // the FROM clause of a query - return new DerivedTable<>(this).as(autoAlias(this)); + // [#13349] Delay the possibly expensive computation of the auto alias, + // possibly making the computation unnecessary + return new DerivedTable<>(this).as(new LazyName(() -> DSL.name(autoAlias(this)))); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/TableAlias.java b/jOOQ/src/main/java/org/jooq/impl/TableAlias.java index ec0a3c1c2f..1b6e05fa72 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TableAlias.java +++ b/jOOQ/src/main/java/org/jooq/impl/TableAlias.java @@ -59,8 +59,8 @@ import org.jooq.UniqueKey; */ final class TableAlias extends AbstractTable implements QOM.TableAlias { - final Alias> alias; - final FieldsImpl aliasedFields; + final Alias> alias; + transient FieldsImpl aliasedFields; TableAlias(Table table, Name alias) { this(table, alias, null, c -> false); @@ -78,17 +78,16 @@ final class TableAlias extends AbstractTable implements QOM super(table.getOptions(), alias, table.getSchema()); this.alias = new Alias<>(table, this, alias, fieldAliases, wrapInParentheses); - this.aliasedFields = init(fieldAliases); } /** * Register fields for this table alias */ @SuppressWarnings({ "rawtypes", "unchecked" }) - private final FieldsImpl init(Name[] fieldAliases) { + private final FieldsImpl initFieldAliases() { List> result = Tools.map(this.alias.wrapped().fieldsRow().fields(), (f, i) -> new TableFieldImpl( - fieldAliases != null && fieldAliases.length > i - ? fieldAliases[i] + alias.fieldAliases != null && alias.fieldAliases.length > i + ? alias.fieldAliases[i] : f.getUnqualifiedName(), f.getDataType(), this, f.getCommentPart(), f.getBinding() )); @@ -157,6 +156,9 @@ final class TableAlias extends AbstractTable implements QOM @Override final FieldsImpl fields0() { + if (aliasedFields == null) + aliasedFields = initFieldAliases(); + return aliasedFields; }