[jOOQ/jOOQ#13149] Let Query.keepStatement() return CloseableQuery and

ResultQuery.keepStatement() return CloseableResultQuery
This commit is contained in:
Lukas Eder 2022-02-28 13:17:10 +01:00
parent d3b6d5ead0
commit 44bb4aa7c3
2 changed files with 346 additions and 0 deletions

View File

@ -0,0 +1,103 @@
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Other licenses:
* -----------------------------------------------------------------------------
* Commercial licenses for this work are available. These replace the above
* ASL 2.0 and offer limited warranties, support, maintenance, and commercial
* database integrations.
*
* For more information, please visit: http://www.jooq.org/licenses
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package org.jooq;
import java.sql.PreparedStatement;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.Executor;
import org.jooq.conf.StatementType;
import org.jooq.exception.DataAccessException;
import org.jooq.exception.DataTypeException;
import org.jooq.impl.DSL;
import org.jetbrains.annotations.Blocking;
import org.jetbrains.annotations.NotNull;
/**
* A {@link Query} that holds a reference to the underlying
* {@link PreparedStatement} without closing it, for reuse.
* <p>
* It was created via {@link Query#keepStatement(boolean)} and must be treated
* as a resource, e.g. in a <code>try-with-resources</code> statement.
*
* @author Lukas Eder
*/
public interface CloseableQuery extends Query, AutoCloseable {
@Override
@NotNull
CloseableQuery bind(String param, Object value) throws IllegalArgumentException, DataTypeException;
@Override
@NotNull
CloseableQuery bind(int index, Object value) throws IllegalArgumentException, DataTypeException;
// ------------------------------------------------------------------------
// JDBC methods
// ------------------------------------------------------------------------
@Override
@NotNull
CloseableQuery poolable(boolean poolable);
@Override
@NotNull
CloseableQuery queryTimeout(int seconds);
@Override
@NotNull
CloseableQuery keepStatement(boolean keepStatement);
/**
* Close the underlying statement.
* <p>
* 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;
}

View File

@ -0,0 +1,243 @@
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Other licenses:
* -----------------------------------------------------------------------------
* Commercial licenses for this work are available. These replace the above
* ASL 2.0 and offer limited warranties, support, maintenance, and commercial
* database integrations.
*
* For more information, please visit: http://www.jooq.org/licenses
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package org.jooq;
import java.sql.PreparedStatement;
import java.util.Collection;
import org.jooq.exception.DataTypeException;
import org.jetbrains.annotations.NotNull;
/**
* A {@link ResultQuery} that holds a reference to the underlying
* {@link PreparedStatement} without closing it, for reuse.
* <p>
* It was created via {@link ResultQuery#keepStatement(boolean)} and must be
* treated as a resource, e.g. in a <code>try-with-resources</code> statement.
*
* @author Lukas Eder
*/
public interface CloseableResultQuery<R extends Record> extends ResultQuery<R>, CloseableQuery {
@NotNull
@Override
CloseableResultQuery<R> bind(String param, Object value) throws IllegalArgumentException, DataTypeException;
@NotNull
@Override
CloseableResultQuery<R> bind(int index, Object value) throws IllegalArgumentException, DataTypeException;
// ------------------------------------------------------------------------
// JDBC methods
// ------------------------------------------------------------------------
@NotNull
@Override
CloseableResultQuery<R> poolable(boolean poolable);
@NotNull
@Override
CloseableResultQuery<R> queryTimeout(int timeout);
@NotNull
@Override
CloseableResultQuery<R> keepStatement(boolean keepStatement);
@Override
@NotNull
CloseableResultQuery<R> maxRows(int rows);
@Override
@NotNull
CloseableResultQuery<R> fetchSize(int rows);
@Override
@NotNull
CloseableResultQuery<R> resultSetConcurrency(int resultSetConcurrency);
@Override
@NotNull
CloseableResultQuery<R> resultSetType(int resultSetType);
@Override
@NotNull
CloseableResultQuery<R> resultSetHoldability(int resultSetHoldability);
/**
* @deprecated - 3.10 - [#6254] - This functionality is no longer supported
* and will be removed in 4.0
*/
@Override
@NotNull
@Deprecated(forRemoval = true, since = "3.10")
CloseableResultQuery<R> intern(Field<?>... fields);
/**
* @deprecated - 3.10 - [#6254] - This functionality is no longer supported
* and will be removed in 4.0
*/
@Override
@NotNull
@Deprecated(forRemoval = true, since = "3.10")
CloseableResultQuery<R> intern(int... fieldIndexes);
/**
* @deprecated - 3.10 - [#6254] - This functionality is no longer supported
* and will be removed in 4.0
*/
@Override
@NotNull
@Deprecated(forRemoval = true, since = "3.10")
CloseableResultQuery<R> intern(String... fieldNames);
/**
* @deprecated - 3.10 - [#6254] - This functionality is no longer supported
* and will be removed in 4.0
*/
@Override
@NotNull
@Deprecated(forRemoval = true, since = "3.10")
CloseableResultQuery<R> intern(Name... fieldNames);
@Override
@NotNull
<X extends Record> CloseableResultQuery<X> coerce(Table<X> table);
@Override
@NotNull
CloseableResultQuery<Record> coerce(Field<?>... fields);
@Override
@NotNull
CloseableResultQuery<Record> coerce(Collection<? extends Field<?>> fields);
@NotNull
@Override
<T1> CloseableResultQuery<Record1<T1>> coerce(Field<T1> field1);
@NotNull
@Override
<T1, T2> CloseableResultQuery<Record2<T1, T2>> coerce(Field<T1> field1, Field<T2> field2);
@NotNull
@Override
<T1, T2, T3> CloseableResultQuery<Record3<T1, T2, T3>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3);
@NotNull
@Override
<T1, T2, T3, T4> CloseableResultQuery<Record4<T1, T2, T3, T4>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4);
@NotNull
@Override
<T1, T2, T3, T4, T5> CloseableResultQuery<Record5<T1, T2, T3, T4, T5>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6> CloseableResultQuery<Record6<T1, T2, T3, T4, T5, T6>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7> CloseableResultQuery<Record7<T1, T2, T3, T4, T5, T6, T7>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7, T8> CloseableResultQuery<Record8<T1, T2, T3, T4, T5, T6, T7, T8>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7, Field<T8> field8);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7, T8, T9> CloseableResultQuery<Record9<T1, T2, T3, T4, T5, T6, T7, T8, T9>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7, Field<T8> field8, Field<T9> field9);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> CloseableResultQuery<Record10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7, Field<T8> field8, Field<T9> field9, Field<T10> field10);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> CloseableResultQuery<Record11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7, Field<T8> field8, Field<T9> field9, Field<T10> field10, Field<T11> field11);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> CloseableResultQuery<Record12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7, Field<T8> field8, Field<T9> field9, Field<T10> field10, Field<T11> field11, Field<T12> field12);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> CloseableResultQuery<Record13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7, Field<T8> field8, Field<T9> field9, Field<T10> field10, Field<T11> field11, Field<T12> field12, Field<T13> field13);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> CloseableResultQuery<Record14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7, Field<T8> field8, Field<T9> field9, Field<T10> field10, Field<T11> field11, Field<T12> field12, Field<T13> field13, Field<T14> field14);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> CloseableResultQuery<Record15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7, Field<T8> field8, Field<T9> field9, Field<T10> field10, Field<T11> field11, Field<T12> field12, Field<T13> field13, Field<T14> field14, Field<T15> field15);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> CloseableResultQuery<Record16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7, Field<T8> field8, Field<T9> field9, Field<T10> field10, Field<T11> field11, Field<T12> field12, Field<T13> field13, Field<T14> field14, Field<T15> field15, Field<T16> field16);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17> CloseableResultQuery<Record17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7, Field<T8> field8, Field<T9> field9, Field<T10> field10, Field<T11> field11, Field<T12> field12, Field<T13> field13, Field<T14> field14, Field<T15> field15, Field<T16> field16, Field<T17> field17);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> CloseableResultQuery<Record18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7, Field<T8> field8, Field<T9> field9, Field<T10> field10, Field<T11> field11, Field<T12> field12, Field<T13> field13, Field<T14> field14, Field<T15> field15, Field<T16> field16, Field<T17> field17, Field<T18> field18);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19> CloseableResultQuery<Record19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7, Field<T8> field8, Field<T9> field9, Field<T10> field10, Field<T11> field11, Field<T12> field12, Field<T13> field13, Field<T14> field14, Field<T15> field15, Field<T16> field16, Field<T17> field17, Field<T18> field18, Field<T19> field19);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20> CloseableResultQuery<Record20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7, Field<T8> field8, Field<T9> field9, Field<T10> field10, Field<T11> field11, Field<T12> field12, Field<T13> field13, Field<T14> field14, Field<T15> field15, Field<T16> field16, Field<T17> field17, Field<T18> field18, Field<T19> field19, Field<T20> field20);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21> CloseableResultQuery<Record21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7, Field<T8> field8, Field<T9> field9, Field<T10> field10, Field<T11> field11, Field<T12> field12, Field<T13> field13, Field<T14> field14, Field<T15> field15, Field<T16> field16, Field<T17> field17, Field<T18> field18, Field<T19> field19, Field<T20> field20, Field<T21> field21);
@NotNull
@Override
<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> CloseableResultQuery<Record22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>> coerce(Field<T1> field1, Field<T2> field2, Field<T3> field3, Field<T4> field4, Field<T5> field5, Field<T6> field6, Field<T7> field7, Field<T8> field8, Field<T9> field9, Field<T10> field10, Field<T11> field11, Field<T12> field12, Field<T13> field13, Field<T14> field14, Field<T15> field15, Field<T16> field16, Field<T17> field17, Field<T18> field18, Field<T19> field19, Field<T20> field20, Field<T21> field21, Field<T22> field22);
}