[jOOQ/jOOQ#13411] Parser meta lookups must look up hidden fields

This includes:

- [jOOQ/jOOQ#16138] Let AbstractRecord, AbstractRow implement
FieldsTrait
This commit is contained in:
Lukas Eder 2024-01-24 11:16:43 +01:00
parent 57e529b916
commit 045852585d
33 changed files with 129 additions and 371 deletions

View File

@ -103,6 +103,12 @@ import org.jetbrains.annotations.Nullable;
*/
public interface Fields {
/**
* Get another {@link Fields} instance that includes the hidden fields.
*/
@NotNull
Fields fieldsIncludingHidden();
/**
* Get all fields known to this type.
*/

View File

@ -69,7 +69,6 @@ import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
// ...
// ...
import static org.jooq.SQLDialect.TRINO;
// ...
import static org.jooq.conf.SettingsTools.renderLocale;
@ -102,7 +101,6 @@ import static org.jooq.impl.Tools.autoAlias;
import static org.jooq.impl.Tools.flattenCollection;
import static org.jooq.impl.Tools.increment;
import static org.jooq.impl.Tools.map;
import static org.jooq.impl.Tools.orElse;
import static org.jooq.impl.Tools.reference;
import static org.jooq.impl.Tools.removeGenerator;
import static org.jooq.impl.Tools.unalias;
@ -152,6 +150,7 @@ import org.jooq.Name;
import org.jooq.Param;
// ...
import org.jooq.QualifiedAsterisk;
import org.jooq.QueryPart;
import org.jooq.Record;
import org.jooq.Result;
import org.jooq.Row;
@ -175,7 +174,6 @@ import org.jooq.impl.QOM.ResultOption;
import org.jooq.impl.Tools.BooleanDataKey;
import org.jooq.impl.Tools.SimpleDataKey;
import org.jooq.tools.JooqLogger;
import org.jooq.tools.StringUtils;
import org.jooq.tools.jdbc.JDBCUtils;
@ -206,6 +204,7 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
final Table<R> table;
final SelectFieldList<SelectFieldOrAsterisk> returning;
final List<Field<?>> returningResolvedAsterisks;
boolean forceResolveAsterisks;
Result<Record> returnedResult;
Result<R> returned;
@ -216,6 +215,7 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
this.table = table;
this.returning = new SelectFieldList<>();
this.returningResolvedAsterisks = new ArrayList<>();
this.forceResolveAsterisks = false;
}
// ------------------------------------------------------------------------
@ -243,20 +243,36 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
returning.clear();
returning.addAll(fields.isEmpty() ? Arrays.asList(table.fields()) : fields);
forceResolveAsterisks = false;
returningResolvedAsterisks.clear();
for (SelectFieldOrAsterisk s : returning)
if (s instanceof Field<?> f)
for (SelectFieldOrAsterisk s : returning) {
if (s instanceof Field<?> f) {
returningResolvedAsterisks.add(f);
else if (s instanceof QualifiedAsterisk a)
}
else if (s instanceof QualifiedAsterisk a) {
returningResolvedAsterisks.addAll(Arrays.asList(a.qualifier().fields()));
else if (s instanceof Asterisk)
}
else if (s instanceof Asterisk) {
returningResolvedAsterisks.addAll(Arrays.asList(table.fields()));
else if (s instanceof Row r)
}
else if (s instanceof Row r) {
returningResolvedAsterisks.add(new RowAsField<>(r));
else if (s instanceof Table<?> t)
}
else if (s instanceof Table<?> t) {
returningResolvedAsterisks.add(new TableAsField<>(t));
else
}
else {
throw new UnsupportedOperationException("Type not supported: " + s);
}
}
}
// @Override
@ -924,14 +940,7 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
ctx.formatSeparator()
.visit(K_RETURNING)
.sql(' ')
.declareFields(true, c -> c.visit(
// Firebird didn't support asterisks at all here until version 4.0
// MariaDB doesn't support qualified asterisks: https://jira.mariadb.org/browse/MDEV-23178
NO_SUPPORT_RETURNING_ASTERISK.contains(c.dialect())
? new SelectFieldList<>(returningResolvedAsterisks)
: returning
));
.declareFields(true, c -> c.visit(returningOrResolvedAsterisks(c)));
if (unqualify)
ctx.qualify(qualify);
@ -939,6 +948,15 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
}
}
private QueryPart returningOrResolvedAsterisks(Context<?> c){
// Firebird didn't support asterisks at all here until version 4.0
// MariaDB doesn't support qualified asterisks: https://jira.mariadb.org/browse/MDEV-23178
return NO_SUPPORT_RETURNING_ASTERISK.contains(c.dialect()) || forceResolveAsterisks
? new SelectFieldList<>(returningResolvedAsterisks)
: returning;
}
final boolean nativeSupportReturning(Scope ctx) {
// [#15316] The historic RETURNING emulation of SQLite was available for INSERT only, using

View File

@ -70,6 +70,7 @@ import org.jooq.Converter;
import org.jooq.DataType;
import org.jooq.EmbeddableRecord;
import org.jooq.Field;
import org.jooq.Fields;
import org.jooq.JSONFormat;
import org.jooq.Name;
import org.jooq.Record;
@ -106,6 +107,7 @@ import org.jooq.exception.InvalidResultException;
import org.jooq.exception.MappingException;
import org.jooq.tools.StringUtils;
import org.jetbrains.annotations.ApiStatus.Internal;
import org.jetbrains.annotations.NotNull;
import org.w3c.dom.Document;
import org.xml.sax.ContentHandler;
@ -117,7 +119,13 @@ import org.xml.sax.SAXException;
* @author Lukas Eder
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
abstract class AbstractRecord extends AbstractStore implements Record {
abstract class AbstractRecord
extends
AbstractStore
implements
Record,
FieldsTrait
{
final AbstractRow<? extends AbstractRecord> fields;
final Object[] values;
@ -176,138 +184,9 @@ abstract class AbstractRecord extends AbstractStore implements Record {
// ------------------------------------------------------------------------
@Override
public final Field<?>[] fields() {
return fields.fields();
}
@Override
public final Stream<Field<?>> fieldStream() {
return fields.fieldStream();
}
@Override
public final <T> Field<T> field(Field<T> field) {
return fields.field(field);
}
@Override
public final Field<?> field(String name) {
return fields.field(name);
}
@Override
public final <T> Field<T> field(String name, Class<T> type) {
return fields.field(name, type);
}
@Override
public final <T> Field<T> field(String name, DataType<T> dataType) {
return fields.field(name, dataType);
}
@Override
public final Field<?> field(Name name) {
return fields.field(name);
}
@Override
public final <T> Field<T> field(Name name, Class<T> type) {
return fields.field(name, type);
}
@Override
public final <T> Field<T> field(Name name, DataType<T> dataType) {
return fields.field(name, dataType);
}
@Override
public final Field<?> field(int index) {
return index >= 0 && index < fields.size() ? fields.field(index) : null;
}
@Override
public final <T> Field<T> field(int index, Class<T> type) {
return fields.field(index, type);
}
@Override
public final <T> Field<T> field(int index, DataType<T> dataType) {
return fields.field(index, dataType);
}
@Override
public final Field<?>[] fields(Field<?>... f) {
return fields.fields(f);
}
@Override
public final Field<?>[] fields(String... fieldNames) {
return fields.fields(fieldNames);
}
@Override
public final Field<?>[] fields(Name... fieldNames) {
return fields.fields(fieldNames);
}
@Override
public final Field<?>[] fields(int... fieldIndexes) {
return fields.fields(fieldIndexes);
}
@Override
public final int indexOf(Field<?> field) {
return fields.indexOf(field);
}
@Override
public final int indexOf(String fieldName) {
return fields.indexOf(fieldName);
}
@Override
public final int indexOf(Name fieldName) {
return fields.indexOf(fieldName);
}
@Override
public final Class<?>[] types() {
return fields.types();
}
@Override
public final Class<?> type(int fieldIndex) {
return fields.type(fieldIndex);
}
@Override
public final Class<?> type(String fieldName) {
return fields.type(fieldName);
}
@Override
public final Class<?> type(Name fieldName) {
return fields.type(fieldName);
}
@Override
public final DataType<?>[] dataTypes() {
return fields.dataTypes();
}
@Override
public final DataType<?> dataType(int fieldIndex) {
return fields.dataType(fieldIndex);
}
@Override
public final DataType<?> dataType(String fieldName) {
return fields.dataType(fieldName);
}
@Override
public final DataType<?> dataType(Name fieldName) {
return fields.dataType(fieldName);
@Internal
public final Fields internalFieldsRow() {
return fields;
}
// ------------------------------------------------------------------------

View File

@ -61,6 +61,7 @@ import org.jooq.Context;
import org.jooq.Converter;
import org.jooq.DataType;
import org.jooq.Field;
import org.jooq.Fields;
import org.jooq.Name;
import org.jooq.QueryPart;
import org.jooq.Record;
@ -79,7 +80,14 @@ import org.jooq.impl.QOM.UnmodifiableList;
* A common base class for the various degrees of {@link Row1}, {@link Row2},
* etc.
*/
abstract class AbstractRow<R extends Record> extends AbstractQueryPart implements Row, SelectField<R> {
abstract class AbstractRow<R extends Record>
extends
AbstractQueryPart
implements
Row,
FieldsTrait,
SelectField<R>
{
private static final Clause[] CLAUSES = { FIELD_ROW };
@ -300,170 +308,16 @@ abstract class AbstractRow<R extends Record> extends AbstractQueryPart implement
return fields.size();
}
@Override
public final Fields internalFieldsRow() {
return fields;
}
@Override
public final Row fieldsRow() {
return this;
}
@Override
public final Stream<Field<?>> fieldStream() {
return Stream.of(fields());
}
@Override
public final <T> Field<T> field(Field<T> field) {
return fields.field(field);
}
/**
* @deprecated This method hides static import {@link DSL#field(String)}.
*/
@Deprecated
@Override
public final Field<?> field(String name) {
return fields.field(name);
}
/**
* @deprecated This method hides static import {@link DSL#field(String, Class)}.
*/
@Deprecated
@Override
public final <T> Field<T> field(String name, Class<T> type) {
return fields.field(name, type);
}
/**
* @deprecated This method hides static import {@link DSL#field(String, DataType)}.
*/
@Deprecated
@Override
public final <T> Field<T> field(String name, DataType<T> dataType) {
return fields.field(name, dataType);
}
/**
* @deprecated This method hides static import {@link DSL#field(Name)}.
*/
@Deprecated
@Override
public final Field<?> field(Name name) {
return fields.field(name);
}
/**
* @deprecated This method hides static import {@link DSL#field(Name, Class)}.
*/
@Deprecated
@Override
public final <T> Field<T> field(Name name, Class<T> type) {
return fields.field(name, type);
}
/**
* @deprecated This method hides static import {@link DSL#field(Name, DataType)}.
*/
@Deprecated
@Override
public final <T> Field<T> field(Name name, DataType<T> dataType) {
return fields.field(name, dataType);
}
@Override
public final Field<?> field(int index) {
return fields.field(index);
}
@Override
public final <T> Field<T> field(int index, Class<T> type) {
return fields.field(index, type);
}
@Override
public final <T> Field<T> field(int index, DataType<T> dataType) {
return fields.field(index, dataType);
}
@Override
public final Field<?>[] fields() {
return fields.fields();
}
@Override
public final Field<?>[] fields(Field<?>... f) {
return fields.fields(f);
}
@Override
public final Field<?>[] fields(String... fieldNames) {
return fields.fields(fieldNames);
}
@Override
public final Field<?>[] fields(Name... fieldNames) {
return fields.fields(fieldNames);
}
@Override
public final Field<?>[] fields(int... fieldIndexes) {
return fields.fields(fieldIndexes);
}
@Override
public final int indexOf(Field<?> field) {
return fields.indexOf(field);
}
@Override
public final int indexOf(String fieldName) {
return fields.indexOf(fieldName);
}
@Override
public final int indexOf(Name fieldName) {
return fields.indexOf(fieldName);
}
@Override
public final Class<?>[] types() {
return fields.types();
}
@Override
public final Class<?> type(int fieldIndex) {
return fields.type(fieldIndex);
}
@Override
public final Class<?> type(String fieldName) {
return fields.type(fieldName);
}
@Override
public final Class<?> type(Name fieldName) {
return fields.type(fieldName);
}
@Override
public final DataType<?>[] dataTypes() {
return fields.dataTypes();
}
@Override
public final DataType<?> dataType(int fieldIndex) {
return fields.dataType(fieldIndex);
}
@Override
public final DataType<?> dataType(String fieldName) {
return fields.dataType(fieldName);
}
@Override
public final DataType<?> dataType(Name fieldName) {
return fields.dataType(fieldName);
}
// ------------------------------------------------------------------------
// [NOT] NULL predicates
// ------------------------------------------------------------------------

View File

@ -193,7 +193,7 @@ final class CommonTableExpressionImpl<R extends Record> extends AbstractTable<R>
}
final FieldsImpl<R> fields1() {
Field<?>[] s = FieldsImpl.fieldsRow0((FieldsTrait) query).fields();
Field<?>[] s = FieldsImpl.internalFieldsRow0((FieldsTrait) query).fields();
// [#10565] Can't reuse s.length, see explanation below
Field<?>[] f = new Field[Tools.degree(query)];

View File

@ -37,7 +37,7 @@
*/
package org.jooq.impl;
import static org.jooq.impl.FieldsImpl.fieldsRow0;
import static org.jooq.impl.FieldsImpl.internalFieldsRow0;
import static org.jooq.impl.Tools.EMPTY_NAME;
import static org.jooq.impl.Tools.map;
@ -136,7 +136,7 @@ implements
if (fieldNameFunction != null)
return new CommonTableExpressionImpl(
new DerivedColumnListImpl(name, map(
fieldsRow0((FieldsTrait) q).fields(),
internalFieldsRow0((FieldsTrait) q).fields(),
(f, i) -> DSL.name(fieldNameFunction.apply(f, i)),
Name[]::new
)),

View File

@ -58,6 +58,7 @@ import org.jooq.Context;
import org.jooq.Converter;
import org.jooq.DataType;
import org.jooq.Field;
import org.jooq.Fields;
import org.jooq.Name;
import org.jooq.Record;
import org.jooq.RecordMapper;
@ -205,8 +206,8 @@ final class FieldsImpl<R extends Record> extends AbstractQueryPart implements Re
* [#13341] Prevent costly calls to Select.asTable() where not strictly
* needed.
*/
static final Row fieldsRow0(FieldsTrait fields) {
return fields instanceof Select<?> s ? s.asTable("t").fieldsRow() : fields.fieldsRow();
static final Fields internalFieldsRow0(FieldsTrait fields) {
return fields instanceof Select<?> s ? ((FieldsTrait) s.asTable("t")).internalFieldsRow() : fields.internalFieldsRow();
}
private static final ThrowingFunction<SelectField<?>, Field<?>, RuntimeException> toField() {
@ -547,6 +548,17 @@ final class FieldsImpl<R extends Record> extends AbstractQueryPart implements Re
// XXX: List-like API
// -------------------------------------------------------------------------
@Override
public final Fields fieldsIncludingHidden() {
return this;
}
final void add(Field<?> f) {

View File

@ -37,7 +37,7 @@
*/
package org.jooq.impl;
import static org.jooq.impl.FieldsImpl.fieldsRow0;
import static org.jooq.impl.FieldsImpl.internalFieldsRow0;
import java.util.stream.Stream;
@ -46,6 +46,8 @@ import org.jooq.Field;
import org.jooq.Fields;
import org.jooq.Name;
import org.jetbrains.annotations.ApiStatus.Internal;
/**
* An internal base implementation of {@link Fields}, implementing all the
* convenience methods.
@ -54,19 +56,29 @@ import org.jooq.Name;
*/
interface FieldsTrait extends Fields {
@Internal
default Fields internalFieldsRow() {
return fieldsRow();
}
@Override
default Fields fieldsIncludingHidden() {
return internalFieldsRow().fieldsIncludingHidden();
}
@Override
default Field<?>[] fields() {
return fieldsRow().fields();
return internalFieldsRow().fields();
}
@Override
default Stream<Field<?>> fieldStream() {
return fieldsRow().fieldStream();
return internalFieldsRow().fieldStream();
}
@Override
default <T> Field<T> field(Field<T> field) {
return fieldsRow().field(field);
return internalFieldsRow().field(field);
}
/**
@ -75,7 +87,7 @@ interface FieldsTrait extends Fields {
@Deprecated
@Override
default Field<?> field(String name) {
return fieldsRow().field(name);
return internalFieldsRow().field(name);
}
/**
@ -84,7 +96,7 @@ interface FieldsTrait extends Fields {
@Deprecated
@Override
default <T> Field<T> field(String name, Class<T> type) {
return fieldsRow().field(name, type);
return internalFieldsRow().field(name, type);
}
@ -94,7 +106,7 @@ interface FieldsTrait extends Fields {
@Deprecated
@Override
default <T> Field<T> field(String name, DataType<T> dataType) {
return fieldsRow().field(name, dataType);
return internalFieldsRow().field(name, dataType);
}
/**
@ -103,7 +115,7 @@ interface FieldsTrait extends Fields {
@Deprecated
@Override
default Field<?> field(Name name) {
return fieldsRow().field(name);
return internalFieldsRow().field(name);
}
/**
@ -112,7 +124,7 @@ interface FieldsTrait extends Fields {
@Deprecated
@Override
default <T> Field<T> field(Name name, Class<T> type) {
return fieldsRow().field(name, type);
return internalFieldsRow().field(name, type);
}
/**
@ -121,96 +133,96 @@ interface FieldsTrait extends Fields {
@Deprecated
@Override
default <T> Field<T> field(Name name, DataType<T> dataType) {
return fieldsRow().field(name, dataType);
return internalFieldsRow().field(name, dataType);
}
@Override
default Field<?> field(int index) {
return fieldsRow().field(index);
return internalFieldsRow().field(index);
}
@Override
default <T> Field<T> field(int index, Class<T> type) {
return fieldsRow().field(index, type);
return internalFieldsRow().field(index, type);
}
@Override
default <T> Field<T> field(int index, DataType<T> dataType) {
return fieldsRow().field(index, dataType);
return internalFieldsRow().field(index, dataType);
}
@Override
default Field<?>[] fields(Field<?>... fields) {
return fieldsRow().fields(fields);
return internalFieldsRow().fields(fields);
}
@Override
default Field<?>[] fields(String... names) {
return fieldsRow().fields(names);
return internalFieldsRow().fields(names);
}
@Override
default Field<?>[] fields(Name... names) {
return fieldsRow().fields(names);
return internalFieldsRow().fields(names);
}
@Override
default Field<?>[] fields(int... indexes) {
return fieldsRow().fields(indexes);
return internalFieldsRow().fields(indexes);
}
@Override
default int indexOf(Field<?> field) {
return fieldsRow().indexOf(field);
return internalFieldsRow().indexOf(field);
}
@Override
default int indexOf(String name) {
return fieldsRow().indexOf(name);
return internalFieldsRow().indexOf(name);
}
@Override
default int indexOf(Name name) {
return fieldsRow().indexOf(name);
return internalFieldsRow().indexOf(name);
}
@Override
default Class<?>[] types() {
return fieldsRow0(this).types();
return internalFieldsRow0(this).types();
}
@Override
default Class<?> type(int index) {
return fieldsRow0(this).type(index);
return internalFieldsRow0(this).type(index);
}
@Override
default Class<?> type(String name) {
return fieldsRow0(this).type(name);
return internalFieldsRow0(this).type(name);
}
@Override
default Class<?> type(Name name) {
return fieldsRow0(this).type(name);
return internalFieldsRow0(this).type(name);
}
@Override
default DataType<?>[] dataTypes() {
return fieldsRow0(this).dataTypes();
return internalFieldsRow0(this).dataTypes();
}
@Override
default DataType<?> dataType(int index) {
return fieldsRow0(this).dataType(index);
return internalFieldsRow0(this).dataType(index);
}
@Override
default DataType<?> dataType(String name) {
return fieldsRow0(this).dataType(name);
return internalFieldsRow0(this).dataType(name);
}
@Override
default DataType<?> dataType(Name name) {
return fieldsRow0(this).dataType(name);
return internalFieldsRow0(this).dataType(name);
}
}

View File

@ -50,7 +50,7 @@ import static org.jooq.impl.ConstraintType.FOREIGN_KEY;
import static org.jooq.impl.ConstraintType.PRIMARY_KEY;
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.schema;
import static org.jooq.impl.FieldsImpl.fieldsRow0;
import static org.jooq.impl.FieldsImpl.internalFieldsRow0;
import static org.jooq.impl.SQLDataType.BIGINT;
import static org.jooq.impl.Tools.EMPTY_FIELD;
import static org.jooq.impl.Tools.allMatch;
@ -1416,7 +1416,7 @@ final class Interpreter {
for (int i = 0; i < columns.size(); i++)
addField(t, Integer.MAX_VALUE, (UnqualifiedName) columns.get(i).getUnqualifiedName(), columns.get(i).getDataType());
else if (select != null)
for (Field<?> column : fieldsRow0((FieldsTrait) select).fields())
for (Field<?> column : internalFieldsRow0((FieldsTrait) select).fields())
addField(t, Integer.MAX_VALUE, (UnqualifiedName) column.getUnqualifiedName(), column.getDataType());
return t;

View File

@ -15560,7 +15560,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
Name q = lookupName.qualifier();
boolean x = q.qualified();
if (x && q.equals(t.value().getQualifiedName()) || !x && q.last().equals(t.value().getName()))
if ((found = Value.of(t.scopeLevel(), t.value().field(lookup.getName()))) != null)
if ((found = Value.of(t.scopeLevel(), t.value().fieldsIncludingHidden().field(lookup.getName()))) != null)
break tableScopeLoop;
@ -15571,7 +15571,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
}
else if ((f = Value.of(t.scopeLevel(), t.value().field(lookup.getName()))) != null) {
else if ((f = Value.of(t.scopeLevel(), t.value().fieldsIncludingHidden().field(lookup.getName()))) != null) {
if (found == null || found.scopeLevel() < f.scopeLevel()) {
found = f;
}

View File

@ -51,7 +51,6 @@ import org.jooq.Function1;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record1;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row1;

View File

@ -51,7 +51,6 @@ import org.jooq.Function10;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record10;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row10;

View File

@ -51,7 +51,6 @@ import org.jooq.Function11;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record11;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row11;

View File

@ -51,7 +51,6 @@ import org.jooq.Function12;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record12;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row12;

View File

@ -51,7 +51,6 @@ import org.jooq.Function13;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record13;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row13;

View File

@ -51,7 +51,6 @@ import org.jooq.Function14;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record14;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row14;

View File

@ -51,7 +51,6 @@ import org.jooq.Function15;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record15;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row15;

View File

@ -51,7 +51,6 @@ import org.jooq.Function16;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record16;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row16;

View File

@ -51,7 +51,6 @@ import org.jooq.Function17;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record17;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row17;

View File

@ -51,7 +51,6 @@ import org.jooq.Function18;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record18;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row18;

View File

@ -51,7 +51,6 @@ import org.jooq.Function19;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record19;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row19;

View File

@ -51,7 +51,6 @@ import org.jooq.Function2;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record2;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row2;

View File

@ -51,7 +51,6 @@ import org.jooq.Function20;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record20;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row20;

View File

@ -51,7 +51,6 @@ import org.jooq.Function21;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record21;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row21;

View File

@ -51,7 +51,6 @@ import org.jooq.Function22;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record22;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row22;

View File

@ -51,7 +51,6 @@ import org.jooq.Function3;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record3;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row3;

View File

@ -51,7 +51,6 @@ import org.jooq.Function4;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record4;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row4;

View File

@ -51,7 +51,6 @@ import org.jooq.Function5;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record5;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row5;

View File

@ -51,7 +51,6 @@ import org.jooq.Function6;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record6;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row6;

View File

@ -51,7 +51,6 @@ import org.jooq.Function7;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record7;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row7;

View File

@ -51,7 +51,6 @@ import org.jooq.Function8;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record8;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row8;

View File

@ -51,7 +51,6 @@ import org.jooq.Function9;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record9;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.Row9;

View File

@ -49,7 +49,6 @@ import org.jooq.Condition;
import org.jooq.Field;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Records;
import org.jooq.Result;
import org.jooq.Row;
import org.jooq.RowN;