diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java index 1ac8cc3cc4..4bf7666bac 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java @@ -1320,7 +1320,7 @@ abstract class AbstractDMLQuery extends AbstractRowCountQuery : Tools.findAny(returningResolvedAsterisks, f -> f.getDataType().identity()); } - public final Field[] getFields(ResultSetMetaData rs) throws SQLException { + public final Field[] getFields(ThrowingSupplier rs) throws SQLException { return returningResolvedAsterisks.toArray(EMPTY_FIELD); } diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java index a4845e57aa..bceffe1c19 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java @@ -258,7 +258,7 @@ implements ctx.resultSet(new MockResultSet(r)); } - Field[] fields = getFields(ctx.resultSet().getMetaData()); + Field[] fields = getFields(() -> ctx.resultSet().getMetaData()); cursor = new CursorImpl<>(ctx, listener, fields, intern.internIndexes(fields), keepStatement(), keepResultSet(), getRecordType(), SettingsTools.getMaxRows(maxRows, ctx.settings()), autoclosing); if (!lazy) { diff --git a/jOOQ/src/main/java/org/jooq/impl/DMLQueryAsResultQuery.java b/jOOQ/src/main/java/org/jooq/impl/DMLQueryAsResultQuery.java index c0ef4fda43..468ad4d5cc 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DMLQueryAsResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/DMLQueryAsResultQuery.java @@ -104,7 +104,7 @@ implements // TODO: Refactor this coercion, share logic with AbstractResultQuery @Override - public final Field[] getFields(ResultSetMetaData rs) throws SQLException { + public final Field[] getFields(ThrowingSupplier rs) throws SQLException { Field[] f = getFields(); return f != null ? f : delegate.getFields(rs); } diff --git a/jOOQ/src/main/java/org/jooq/impl/R2DBC.java b/jOOQ/src/main/java/org/jooq/impl/R2DBC.java index 89c31d5393..55dc365c52 100644 --- a/jOOQ/src/main/java/org/jooq/impl/R2DBC.java +++ b/jOOQ/src/main/java/org/jooq/impl/R2DBC.java @@ -303,7 +303,7 @@ final class R2DBC { r.map((row, meta) -> { try { // TODO: Cache this getFields() call - Field[] fields = query.getFields(new R2DBCResultSetMetaData(query.configuration(), meta)); + Field[] fields = query.getFields(() -> new R2DBCResultSetMetaData(query.configuration(), meta)); // TODO: This call is duplicated from CursorImpl and related classes. // Refactor this call to make sure code is re-used, especially when diff --git a/jOOQ/src/main/java/org/jooq/impl/ResultQueryTrait.java b/jOOQ/src/main/java/org/jooq/impl/ResultQueryTrait.java index 692e7f099f..a83d1454ff 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ResultQueryTrait.java +++ b/jOOQ/src/main/java/org/jooq/impl/ResultQueryTrait.java @@ -1578,7 +1578,7 @@ extends * @throws SQLException If something goes wrong when accessing * {@link ResultSetMetaData}. */ - default Field[] getFields(ResultSetMetaData rs) throws SQLException { + default Field[] getFields(ThrowingSupplier rs) throws SQLException { return getFields(); } diff --git a/jOOQ/src/main/java/org/jooq/impl/SQLResultQuery.java b/jOOQ/src/main/java/org/jooq/impl/SQLResultQuery.java index 761b5cf198..30792ad1fb 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SQLResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/SQLResultQuery.java @@ -41,6 +41,7 @@ import static org.jooq.impl.Tools.EMPTY_FIELD; import static org.jooq.impl.Tools.isEmpty; import java.sql.ResultSetMetaData; +import java.sql.SQLException; import java.util.Collection; import org.jooq.Clause; @@ -102,13 +103,13 @@ final class SQLResultQuery extends AbstractResultQuery implements UEmpty } @Override - public final Field[] getFields(ResultSetMetaData meta) { + public final Field[] getFields(ThrowingSupplier rs) throws SQLException { Field[] result = getFields(); if (!isEmpty(result)) return result; else - return new MetaDataFieldProvider(configuration(), meta).getFields(); + return new MetaDataFieldProvider(configuration(), rs.get()).getFields(); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java index ce5d04b8b2..7063e047f5 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java @@ -3365,7 +3365,7 @@ implements } @Override - public final Field[] getFields(ResultSetMetaData rs) throws SQLException { + public final Field[] getFields(ThrowingSupplier rs) throws SQLException { return getDelegate().getFields(rs); } diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index 634810c863..f27747815a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -226,6 +226,7 @@ import static org.jooq.impl.Transformations.transformQualify; import static org.jooq.impl.Transformations.transformRownum; import java.sql.ResultSetMetaData; +import java.sql.SQLException; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; @@ -714,13 +715,13 @@ final class SelectQueryImpl extends AbstractResultQuery imp } @Override - public final Field[] getFields(ResultSetMetaData meta) { + public final Field[] getFields(ThrowingSupplier rs) throws SQLException { Field[] fields = getFields(); // If no projection was specified explicitly, create fields from result // set meta data instead. This is typically the case for SELECT * ... if (fields.length == 0) - return new MetaDataFieldProvider(configuration(), meta).getFields(); + return new MetaDataFieldProvider(configuration(), rs.get()).getFields(); return fields; }