[jOOQ/jOOQ#13341] Avoid asTable() call when creating scalar subqueries
This commit is contained in:
parent
5a2d5885af
commit
0984e36834
@ -62,6 +62,7 @@ import org.jooq.Record;
|
||||
import org.jooq.RecordMapper;
|
||||
import org.jooq.RecordType;
|
||||
import org.jooq.Row;
|
||||
import org.jooq.Select;
|
||||
import org.jooq.SelectField;
|
||||
import org.jooq.Table;
|
||||
import org.jooq.TableField;
|
||||
@ -196,6 +197,14 @@ final class FieldsImpl<R extends Record> extends AbstractQueryPart implements Re
|
||||
// RecordType API
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* [#13341] Prevent costly calls to Select.asTable() where not strictly
|
||||
* needed.
|
||||
*/
|
||||
static final Row fieldsRow0(FieldsTrait fields) {
|
||||
return fields instanceof Select ? ((Select<?>) fields).asTable("t").fieldsRow() : fields.fieldsRow();
|
||||
}
|
||||
|
||||
private static final ThrowingFunction<SelectField<?>, Field<?>, RuntimeException> toField() {
|
||||
return f -> f instanceof Row
|
||||
? new RowAsField<>((Row) f)
|
||||
|
||||
@ -37,6 +37,8 @@
|
||||
*/
|
||||
package org.jooq.impl;
|
||||
|
||||
import static org.jooq.impl.FieldsImpl.fieldsRow0;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.jooq.DataType;
|
||||
@ -174,41 +176,41 @@ interface FieldsTrait extends Fields {
|
||||
|
||||
@Override
|
||||
default Class<?>[] types() {
|
||||
return fieldsRow().types();
|
||||
return fieldsRow0(this).types();
|
||||
}
|
||||
|
||||
@Override
|
||||
default Class<?> type(int index) {
|
||||
return fieldsRow().type(index);
|
||||
return fieldsRow0(this).type(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
default Class<?> type(String name) {
|
||||
return fieldsRow().type(name);
|
||||
return fieldsRow0(this).type(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
default Class<?> type(Name name) {
|
||||
return fieldsRow().type(name);
|
||||
return fieldsRow0(this).type(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
default DataType<?>[] dataTypes() {
|
||||
return fieldsRow().dataTypes();
|
||||
return fieldsRow0(this).dataTypes();
|
||||
}
|
||||
|
||||
@Override
|
||||
default DataType<?> dataType(int index) {
|
||||
return fieldsRow().dataType(index);
|
||||
return fieldsRow0(this).dataType(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
default DataType<?> dataType(String name) {
|
||||
return fieldsRow().dataType(name);
|
||||
return fieldsRow0(this).dataType(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
default DataType<?> dataType(Name name) {
|
||||
return fieldsRow().dataType(name);
|
||||
return fieldsRow0(this).dataType(name);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3579,7 +3579,7 @@ final class Tools {
|
||||
|
||||
|
||||
|
||||
return map(query.fields(), f -> f.getDataType());
|
||||
return asList(query.dataTypes());
|
||||
}
|
||||
|
||||
static final DataType<?> scalarType(ResultQuery<?> query) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user