diff --git a/jOOQ/src/main/java/org/jooq/Query.java b/jOOQ/src/main/java/org/jooq/Query.java
index f0e911d5bd..12722bf78e 100644
--- a/jOOQ/src/main/java/org/jooq/Query.java
+++ b/jOOQ/src/main/java/org/jooq/Query.java
@@ -58,7 +58,7 @@ import org.jetbrains.annotations.NotNull;
*
* @author Lukas Eder
*/
-public interface Query extends Statement, AttachableQueryPart, AutoCloseable {
+public interface Query extends Statement, AttachableQueryPart {
/**
* Execute the query, if it has been created with a proper configuration.
@@ -200,27 +200,13 @@ public interface Query extends Statement, AttachableQueryPart, AutoCloseable {
* This indicates to jOOQ that the query's underlying {@link Statement} or
* {@link PreparedStatement} should be kept open after execution. If it is
* kept open, client code is responsible for properly closing it using
- * {@link #close()}
+ * {@link CloseableQuery#close()}, e.g. via a
+ * try-with-resources statement.
*
* @param keepStatement Whether to keep the underlying statement open
*/
@NotNull
- Query keepStatement(boolean keepStatement);
-
- /**
- * Close the underlying statement.
- *
- * This closes the query's underlying {@link Statement} or
- * {@link PreparedStatement} if a previous call to
- * {@link #keepStatement(boolean)} indicated that jOOQ should keep
- * statements open after query execution. If there is no underlying open
- * statement, this call is simply ignored.
- *
- * @throws DataAccessException If something went wrong closing the statement
- * @see java.sql.Statement#close()
- */
- @Override
- void close() throws DataAccessException;
+ CloseableQuery keepStatement(boolean keepStatement);
/**
* Cancel the underlying statement.
diff --git a/jOOQ/src/main/java/org/jooq/ResultQuery.java b/jOOQ/src/main/java/org/jooq/ResultQuery.java
index a066dd562a..95a29352ab 100644
--- a/jOOQ/src/main/java/org/jooq/ResultQuery.java
+++ b/jOOQ/src/main/java/org/jooq/ResultQuery.java
@@ -5155,7 +5155,7 @@ public interface ResultQuery extends Fields, Query, Iterable keepStatement(boolean keepStatement);
+ CloseableResultQuery keepStatement(boolean keepStatement);
/**
* Specify the maximum number of rows returned by the underlying
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingQuery.java
index 8125eb05d6..4456daa4a8 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingQuery.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractDelegatingQuery.java
@@ -42,6 +42,7 @@ import java.util.Map;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.Executor;
+import org.jooq.CloseableQuery;
import org.jooq.Configuration;
import org.jooq.Context;
import org.jooq.Param;
@@ -53,11 +54,11 @@ import org.jooq.impl.QOM.UProxy;
/**
* @author Lukas Eder
*/
-abstract class AbstractDelegatingQuery
+abstract class AbstractDelegatingQuery
extends
AbstractQueryPart
implements
- Query, UProxy
+ CloseableQuery, UProxy
{
private final Q delegate;
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java
index 089e6e23cb..095b433701 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java
@@ -64,6 +64,7 @@ import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.Executor;
+import org.jooq.CloseableQuery;
import org.jooq.Configuration;
import org.jooq.ExecuteContext;
import org.jooq.ExecuteListener;
@@ -84,7 +85,7 @@ import org.jooq.tools.JooqLogger;
/**
* @author Lukas Eder
*/
-abstract class AbstractQuery extends AbstractAttachableQueryPart implements Query {
+abstract class AbstractQuery extends AbstractAttachableQueryPart implements CloseableQuery {
private static final JooqLogger log = JooqLogger.getLogger(AbstractQuery.class);
@@ -121,7 +122,7 @@ abstract class AbstractQuery extends AbstractAttachableQueryPa
* {@inheritDoc}
*/
@Override
- public Query bind(String param, Object value) {
+ public CloseableQuery bind(String param, Object value) {
Integer index = Ints.tryParse(param);
if (index != null)
return bind(index, value);
@@ -147,7 +148,7 @@ abstract class AbstractQuery extends AbstractAttachableQueryPa
* {@inheritDoc}
*/
@Override
- public Query bind(int index, Object value) {
+ public CloseableQuery bind(int index, Object value) {
Param>[] params = getParams().values().toArray(EMPTY_PARAM);
if (index < 1 || index > params.length)
@@ -193,7 +194,7 @@ abstract class AbstractQuery extends AbstractAttachableQueryPa
* {@inheritDoc}
*/
@Override
- public Query poolable(boolean p) {
+ public CloseableQuery poolable(boolean p) {
this.poolable = p ? QueryPoolable.TRUE : QueryPoolable.FALSE;
return this;
}
@@ -204,7 +205,7 @@ abstract class AbstractQuery extends AbstractAttachableQueryPa
* {@inheritDoc}
*/
@Override
- public Query queryTimeout(int t) {
+ public CloseableQuery queryTimeout(int t) {
this.timeout = t;
return this;
}
@@ -215,7 +216,7 @@ abstract class AbstractQuery extends AbstractAttachableQueryPa
* {@inheritDoc}
*/
@Override
- public Query keepStatement(boolean k) {
+ public CloseableQuery keepStatement(boolean k) {
this.keepStatement = k;
return this;
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java
index d91c081a76..a4845e57aa 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java
@@ -51,6 +51,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Set;
+import org.jooq.CloseableResultQuery;
import org.jooq.Configuration;
import org.jooq.Cursor;
import org.jooq.DSLContext;
@@ -74,7 +75,12 @@ import org.jooq.tools.jdbc.MockResultSet;
*
* @author Lukas Eder
*/
-abstract class AbstractResultQuery extends AbstractQuery implements ResultQueryTrait {
+abstract class AbstractResultQuery
+extends
+ AbstractQuery
+implements
+ ResultQueryTrait
+{
private static final JooqLogger log = JooqLogger.getLogger(AbstractResultQuery.class);
private static final Set REPORT_FETCH_SIZE_WITH_AUTOCOMMIT = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB);
@@ -102,42 +108,42 @@ abstract class AbstractResultQuery extends AbstractQuery im
@SuppressWarnings("unchecked")
@Override
- public final ResultQuery bind(String param, Object value) {
- return (ResultQuery) super.bind(param, value);
+ public final CloseableResultQuery bind(String param, Object value) {
+ return (CloseableResultQuery) super.bind(param, value);
}
@SuppressWarnings("unchecked")
@Override
- public final ResultQuery bind(int index, Object value) {
- return (ResultQuery) super.bind(index, value);
+ public final CloseableResultQuery bind(int index, Object value) {
+ return (CloseableResultQuery) super.bind(index, value);
}
@SuppressWarnings("unchecked")
@Override
- public final ResultQuery poolable(boolean poolable) {
- return (ResultQuery) super.poolable(poolable);
+ public final CloseableResultQuery poolable(boolean poolable) {
+ return (CloseableResultQuery) super.poolable(poolable);
}
@SuppressWarnings("unchecked")
@Override
- public final ResultQuery queryTimeout(int timeout) {
- return (ResultQuery) super.queryTimeout(timeout);
+ public final CloseableResultQuery queryTimeout(int timeout) {
+ return (CloseableResultQuery) super.queryTimeout(timeout);
}
@SuppressWarnings("unchecked")
@Override
- public final ResultQuery keepStatement(boolean k) {
- return (ResultQuery) super.keepStatement(k);
+ public final CloseableResultQuery keepStatement(boolean k) {
+ return (CloseableResultQuery) super.keepStatement(k);
}
@Override
- public final ResultQuery maxRows(int rows) {
+ public final CloseableResultQuery maxRows(int rows) {
this.maxRows = rows;
return this;
}
@Override
- public final ResultQuery fetchSize(int rows) {
+ public final CloseableResultQuery fetchSize(int rows) {
this.fetchSize = rows;
return this;
}
@@ -147,43 +153,43 @@ abstract class AbstractResultQuery extends AbstractQuery im
}
@Override
- public final ResultQuery resultSetConcurrency(int concurrency) {
+ public final CloseableResultQuery resultSetConcurrency(int concurrency) {
this.resultSetConcurrency = concurrency;
return this;
}
@Override
- public final ResultQuery resultSetType(int type) {
+ public final CloseableResultQuery resultSetType(int type) {
this.resultSetType = type;
return this;
}
@Override
- public final ResultQuery resultSetHoldability(int holdability) {
+ public final CloseableResultQuery resultSetHoldability(int holdability) {
this.resultSetHoldability = holdability;
return this;
}
@Override
- public final ResultQuery intern(Field>... fields) {
+ public final CloseableResultQuery intern(Field>... fields) {
intern.internFields = fields;
return this;
}
@Override
- public final ResultQuery intern(int... fieldIndexes) {
+ public final CloseableResultQuery intern(int... fieldIndexes) {
intern.internIndexes = fieldIndexes;
return this;
}
@Override
- public final ResultQuery intern(String... fieldNameStrings) {
+ public final CloseableResultQuery intern(String... fieldNameStrings) {
intern.internNameStrings = fieldNameStrings;
return this;
}
@Override
- public final ResultQuery intern(Name... fieldNames) {
+ public final CloseableResultQuery intern(Name... fieldNames) {
intern.internNames = fieldNames;
return this;
}
@@ -354,15 +360,15 @@ abstract class AbstractResultQuery extends AbstractQuery im
@SuppressWarnings("unchecked")
@Override
- public final ResultQuery coerce(Table table) {
+ public final CloseableResultQuery coerce(Table table) {
this.coerceTable = table;
- return (ResultQuery) coerce(Arrays.asList(table.fields()));
+ return (CloseableResultQuery) coerce(Arrays.asList(table.fields()));
}
@SuppressWarnings("unchecked")
@Override
- public final ResultQuery coerce(Collection extends Field>> fields) {
+ public final CloseableResultQuery coerce(Collection extends Field>> fields) {
this.coerceFields = fields;
- return (ResultQuery) this;
+ return (CloseableResultQuery) this;
}
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/DMLQueryAsResultQuery.java b/jOOQ/src/main/java/org/jooq/impl/DMLQueryAsResultQuery.java
index 46af3a8e04..c0ef4fda43 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DMLQueryAsResultQuery.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DMLQueryAsResultQuery.java
@@ -48,6 +48,7 @@ import java.util.Map;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.Executor;
+import org.jooq.CloseableResultQuery;
import org.jooq.Configuration;
import org.jooq.Context;
import org.jooq.Delete;
@@ -117,15 +118,15 @@ implements
}
@Override
- public final ResultQuery coerce(Table table) {
+ public final CloseableResultQuery coerce(Table table) {
this.coerceTable = table;
- return (ResultQuery) coerce(Arrays.asList(table.fields()));
+ return (CloseableResultQuery) coerce(Arrays.asList(table.fields()));
}
@Override
- public final ResultQuery coerce(Collection extends Field>> fields) {
+ public final CloseableResultQuery coerce(Collection extends Field>> fields) {
this.coerceFields = fields;
- return (ResultQuery) this;
+ return (CloseableResultQuery) this;
}
@Override
@@ -225,77 +226,77 @@ implements
}
@Override
- public final ResultQuery bind(String param, Object value) throws IllegalArgumentException, DataTypeException {
+ public final CloseableResultQuery bind(String param, Object value) throws IllegalArgumentException, DataTypeException {
delegate.bind(param, value);
return this;
}
@Override
- public final ResultQuery bind(int index, Object value) throws IllegalArgumentException, DataTypeException {
+ public final CloseableResultQuery bind(int index, Object value) throws IllegalArgumentException, DataTypeException {
delegate.bind(index, value);
return this;
}
@Override
- public final ResultQuery poolable(boolean poolable) {
+ public final CloseableResultQuery poolable(boolean poolable) {
delegate.poolable(poolable);
return this;
}
@Override
- public final ResultQuery queryTimeout(int timeout) {
+ public final CloseableResultQuery queryTimeout(int timeout) {
delegate.queryTimeout(timeout);
return this;
}
@Override
- public final ResultQuery keepStatement(boolean keepStatement) {
+ public final CloseableResultQuery keepStatement(boolean keepStatement) {
delegate.keepStatement(keepStatement);
return this;
}
@Override
- public final ResultQuery maxRows(int rows) {
+ public final CloseableResultQuery maxRows(int rows) {
return this;
}
@Override
- public final ResultQuery fetchSize(int rows) {
+ public final CloseableResultQuery fetchSize(int rows) {
return this;
}
@Override
- public final ResultQuery resultSetConcurrency(int resultSetConcurrency) {
+ public final CloseableResultQuery resultSetConcurrency(int resultSetConcurrency) {
return this;
}
@Override
- public final ResultQuery resultSetType(int resultSetType) {
+ public final CloseableResultQuery resultSetType(int resultSetType) {
return this;
}
@Override
- public final ResultQuery resultSetHoldability(int resultSetHoldability) {
+ public final CloseableResultQuery resultSetHoldability(int resultSetHoldability) {
return this;
}
@Override
- public final ResultQuery intern(Field>... fields) {
+ public final CloseableResultQuery intern(Field>... fields) {
return this;
}
@Override
- public final ResultQuery intern(int... fieldIndexes) {
+ public final CloseableResultQuery intern(int... fieldIndexes) {
return this;
}
@Override
- public final ResultQuery intern(String... fieldNames) {
+ public final CloseableResultQuery intern(String... fieldNames) {
return this;
}
@Override
- public final ResultQuery intern(Name... fieldNames) {
+ public final CloseableResultQuery intern(Name... fieldNames) {
return this;
}
}
\ No newline at end of file
diff --git a/jOOQ/src/main/java/org/jooq/impl/ResultQueryTrait.java b/jOOQ/src/main/java/org/jooq/impl/ResultQueryTrait.java
index 3bd0b64802..692e7f099f 100644
--- a/jOOQ/src/main/java/org/jooq/impl/ResultQueryTrait.java
+++ b/jOOQ/src/main/java/org/jooq/impl/ResultQueryTrait.java
@@ -69,14 +69,13 @@ import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import java.util.stream.Collector;
-import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
+import org.jooq.CloseableResultQuery;
import org.jooq.Configuration;
import org.jooq.Converter;
import org.jooq.Cursor;
-import org.jooq.DataType;
import org.jooq.Field;
import org.jooq.Name;
import org.jooq.QueryPartInternal;
@@ -112,12 +111,10 @@ import org.jooq.Results;
import org.jooq.Row;
import org.jooq.Select;
import org.jooq.Table;
-import org.jooq.conf.SettingsTools;
import org.jooq.exception.DataAccessException;
import org.jooq.impl.R2DBC.BlockingRecordSubscription;
import org.jooq.impl.R2DBC.QuerySubscription;
import org.jooq.impl.R2DBC.ResultSubscriber;
-import org.jooq.tools.jdbc.JDBCUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -130,10 +127,16 @@ import io.r2dbc.spi.ConnectionFactory;
*
* @author Lukas Eder
*/
-interface ResultQueryTrait extends QueryPartInternal, ResultQuery, Mappable, FieldsTrait {
+interface ResultQueryTrait
+extends
+ QueryPartInternal,
+ CloseableResultQuery,
+ Mappable,
+ FieldsTrait
+{
@Override
- default ResultQuery coerce(Field>... fields) {
+ default CloseableResultQuery coerce(Field>... fields) {
return coerce(Arrays.asList(fields));
}
@@ -141,134 +144,134 @@ interface ResultQueryTrait extends QueryPartInternal, ResultQu
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
- default ResultQuery> coerce(Field field1) {
- return (ResultQuery) coerce(new Field[] { field1 });
+ default CloseableResultQuery> coerce(Field field1) {
+ return (CloseableResultQuery) coerce(new Field[] { field1 });
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
- default ResultQuery> coerce(Field field1, Field field2) {
- return (ResultQuery) coerce(new Field[] { field1, field2 });
+ default CloseableResultQuery> coerce(Field field1, Field field2) {
+ return (CloseableResultQuery) coerce(new Field[] { field1, field2 });
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
- default ResultQuery> coerce(Field field1, Field field2, Field field3) {
- return (ResultQuery) coerce(new Field[] { field1, field2, field3 });
+ default CloseableResultQuery> coerce(Field field1, Field field2, Field field3) {
+ return (CloseableResultQuery) coerce(new Field[] { field1, field2, field3 });
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
- default ResultQuery> coerce(Field field1, Field field2, Field field3, Field field4) {
- return (ResultQuery) coerce(new Field[] { field1, field2, field3, field4 });
+ default CloseableResultQuery> coerce(Field field1, Field field2, Field field3, Field field4) {
+ return (CloseableResultQuery) coerce(new Field[] { field1, field2, field3, field4 });
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
- default ResultQuery> coerce(Field field1, Field field2, Field field3, Field field4, Field field5) {
- return (ResultQuery) coerce(new Field[] { field1, field2, field3, field4, field5 });
+ default CloseableResultQuery> coerce(Field field1, Field field2, Field field3, Field field4, Field field5) {
+ return (CloseableResultQuery) coerce(new Field[] { field1, field2, field3, field4, field5 });
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
- default ResultQuery> coerce(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6) {
- return (ResultQuery) coerce(new Field[] { field1, field2, field3, field4, field5, field6 });
+ default CloseableResultQuery> coerce(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6) {
+ return (CloseableResultQuery) coerce(new Field[] { field1, field2, field3, field4, field5, field6 });
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
- default ResultQuery> coerce(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7) {
- return (ResultQuery) coerce(new Field[] { field1, field2, field3, field4, field5, field6, field7 });
+ default CloseableResultQuery> coerce(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7) {
+ return (CloseableResultQuery) coerce(new Field[] { field1, field2, field3, field4, field5, field6, field7 });
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
- default ResultQuery> coerce(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8) {
- return (ResultQuery) coerce(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8 });
+ default CloseableResultQuery> coerce(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8) {
+ return (CloseableResultQuery) coerce(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8 });
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
- default ResultQuery> coerce(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9) {
- return (ResultQuery) coerce(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9 });
+ default CloseableResultQuery> coerce(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9) {
+ return (CloseableResultQuery) coerce(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9 });
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
- default