[jOOQ/jOOQ#13349] Select.asTable() should delay slow call to
Tools::autoAlias
This commit is contained in:
parent
23222356eb
commit
1d659422d8
@ -649,9 +649,9 @@ final class SelectQueryImpl<R extends Record> extends AbstractResultQuery<R> imp
|
||||
|
||||
@Override
|
||||
public final Table<R> 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
|
||||
|
||||
@ -59,8 +59,8 @@ import org.jooq.UniqueKey;
|
||||
*/
|
||||
final class TableAlias<R extends Record> extends AbstractTable<R> implements QOM.TableAlias<R> {
|
||||
|
||||
final Alias<Table<R>> alias;
|
||||
final FieldsImpl<R> aliasedFields;
|
||||
final Alias<Table<R>> alias;
|
||||
transient FieldsImpl<R> aliasedFields;
|
||||
|
||||
TableAlias(Table<R> table, Name alias) {
|
||||
this(table, alias, null, c -> false);
|
||||
@ -78,17 +78,16 @@ final class TableAlias<R extends Record> extends AbstractTable<R> 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<R> init(Name[] fieldAliases) {
|
||||
private final FieldsImpl<R> initFieldAliases() {
|
||||
List<Field<?>> 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<R extends Record> extends AbstractTable<R> implements QOM
|
||||
|
||||
@Override
|
||||
final FieldsImpl<R> fields0() {
|
||||
if (aliasedFields == null)
|
||||
aliasedFields = initFieldAliases();
|
||||
|
||||
return aliasedFields;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user