/*
* 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.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.Statement;
import org.jooq.conf.Settings;
import org.jooq.conf.StatementType;
import org.jooq.exception.DataAccessException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
A context object for Query
execution passed to registered ExecuteListener
's. Author: Lukas Eder See Also:
/**
* A context object for {@link Query} execution passed to registered
* {@link ExecuteListener}'s.
*
* @author Lukas Eder
* @see ExecuteListener
*/
public interface ExecuteContext extends Scope {
The connection to be used in this execute context.
This returns a proxy to the Configuration.connectionProvider()
's supplied connection. This proxy takes care of two things:
- It takes care of properly implementing
Settings.getStatementType()
- It takes care of properly returning a connection to
ConnectionProvider.release(Connection)
, once jOOQ can release the connection
/**
* The connection to be used in this execute context.
* <p>
* This returns a proxy to the {@link Configuration#connectionProvider()}
* 's supplied connection. This proxy takes care of two things:
* <ul>
* <li>It takes care of properly implementing
* {@link Settings#getStatementType()}</li>
* <li>It takes care of properly returning a connection to
* {@link ConnectionProvider#release(Connection)}, once jOOQ can release the
* connection</li>
* </ul>
*/
Connection connection();
The type of database interaction that is being executed.
See Also: - ExecuteType
/**
* The type of database interaction that is being executed.
*
* @see ExecuteType
*/
ExecuteType type();
The jOOQ Query
that is being executed or null
if the
query is unknown, if it is a batch query, or if there was no jOOQ
Query
.
See Also:
/**
* The jOOQ {@link Query} that is being executed or <code>null</code> if the
* query is unknown, if it is a batch query, or if there was no jOOQ
* <code>Query</code>.
*
* @see #routine()
* @see #batchQueries()
*/
@Nullable
Query query();
The jOOQ Query
objects that are being executed in batch mode, or empty if the query is unknown or if there was no jOOQ Query
.
If a single Query
is executed in non-batch mode, this will
return an array of length 1
, containing that
Query
See Also: Returns: The executed Query
object(s). This is never
null
/**
* The jOOQ {@link Query} objects that are being executed in batch mode, or
* empty if the query is unknown or if there was no jOOQ <code>Query</code>.
* <p>
* If a single <code>Query</code> is executed in non-batch mode, this will
* return an array of length <code>1</code>, containing that
* <code>Query</code>
*
* @see #query()
* @see #routine()
* @return The executed <code>Query</code> object(s). This is never
* <code>null</code>
*/
@NotNull
Query[] batchQueries();
The jOOQ Routine
that is being executed or null
if
the query is unknown or if there was no jOOQ Routine
.
See Also:
/**
* The jOOQ {@link Routine} that is being executed or <code>null</code> if
* the query is unknown or if there was no jOOQ <code>Routine</code>.
*
* @see #routine()
*/
@Nullable
Routine<?> routine();
The SQL that is being executed or null
if the SQL statement
is unknown or if there was no SQL statement.
/**
* The SQL that is being executed or <code>null</code> if the SQL statement
* is unknown or if there was no SQL statement.
*/
@Nullable
String sql();
Override the SQL statement that is being executed.
This may have no effect, if called at the wrong moment.
See Also: - renderEnd.renderEnd(ExecuteContext)
- ExecuteListener.prepareStart(ExecuteContext)
/**
* Override the SQL statement that is being executed.
* <p>
* This may have no effect, if called at the wrong moment.
*
* @see ExecuteListener#renderEnd(ExecuteContext)
* @see ExecuteListener#prepareStart(ExecuteContext)
*/
void sql(String sql);
The generated SQL statements that are being executed in batch mode, or
empty if the query is unknown or if there was no SQL statement.
If a single Query
is executed in non-batch mode, this will
return an array of length 1
, containing that
Query
See Also: - query()
- routine()
Returns: The generated SQL statement(s). This is never null
/**
* The generated SQL statements that are being executed in batch mode, or
* empty if the query is unknown or if there was no SQL statement.
* <p>
* If a single <code>Query</code> is executed in non-batch mode, this will
* return an array of length <code>1</code>, containing that
* <code>Query</code>
*
* @see #query()
* @see #routine()
* @return The generated SQL statement(s). This is never <code>null</code>
*/
@NotNull
String[] batchSQL();
Override the Connection
that is being used for execution.
This may have no effect, if called at the wrong moment.
See Also:
/**
* Override the {@link Connection} that is being used for execution.
* <p>
* This may have no effect, if called at the wrong moment.
*
* @see ExecuteListener#start(ExecuteContext)
*/
void connectionProvider(ConnectionProvider connectionProvider);
The PreparedStatement
that is being executed or null
if the statement is unknown or if there was no statement.
This can be any of the following:
- A
java.sql.PreparedStatement
from your JDBC driver when
a jOOQ Query
is being executed as StatementType.PREPARED_STATEMENT
- A
java.sql.Statement
from your JDBC driver wrapped in a
java.sql.PreparedStatement
when your jOOQ Query
is being executed as StatementType.STATIC_STATEMENT
- A
java.sql.CallableStatement
when you are executing a
jOOQ Routine
/**
* The {@link PreparedStatement} that is being executed or <code>null</code>
* if the statement is unknown or if there was no statement.
* <p>
* This can be any of the following: <br/>
* <br/>
* <ul>
* <li>A <code>java.sql.PreparedStatement</code> from your JDBC driver when
* a jOOQ <code>Query</code> is being executed as
* {@link StatementType#PREPARED_STATEMENT}</li>
* <li>A <code>java.sql.Statement</code> from your JDBC driver wrapped in a
* <code>java.sql.PreparedStatement</code> when your jOOQ <code>Query</code>
* is being executed as {@link StatementType#STATIC_STATEMENT}</li>
* <li>A <code>java.sql.CallableStatement</code> when you are executing a
* jOOQ <code>Routine</code></li>
* </ul>
*/
@Nullable
PreparedStatement statement();
Override the PreparedStatement
that is being executed.
This may have no effect, if called at the wrong moment.
See Also:
/**
* Override the {@link PreparedStatement} that is being executed.
* <p>
* This may have no effect, if called at the wrong moment.
*
* @see ExecuteListener#prepareEnd(ExecuteContext)
* @see ExecuteListener#bindStart(ExecuteContext)
*/
void statement(PreparedStatement statement);
The number of times this particular statement has been executed.
Statements that are prepared by jOOQ can be executed multiple times without being closed if Query.keepStatement(boolean)
is activated.
This value will increment as soon as the statement is about to be executed (at the ExecuteListener.executeStart(ExecuteContext)
event).
See Also:
/**
* The number of times this particular statement has been executed.
* <p>
* Statements that are prepared by jOOQ can be executed multiple times
* without being closed if {@link Query#keepStatement(boolean)} is
* activated.
* <p>
* This value will increment as soon as the statement is about to be
* executed (at the {@link ExecuteListener#executeStart(ExecuteContext)}
* event).
*
* @see ExecuteListener#executeStart(ExecuteContext)
*/
int statementExecutionCount();
The ResultSet
that is being fetched or null
if the
result set is unknown or if no result set is being fetched.
/**
* The {@link ResultSet} that is being fetched or <code>null</code> if the
* result set is unknown or if no result set is being fetched.
*/
@Nullable
ResultSet resultSet();
Override the ResultSet
that is being fetched.
This may have no effect, if called at the wrong moment.
See Also:
/**
* Override the {@link ResultSet} that is being fetched.
* <p>
* This may have no effect, if called at the wrong moment.
*
* @see ExecuteListener#executeEnd(ExecuteContext)
* @see ExecuteListener#fetchStart(ExecuteContext)
*/
void resultSet(ResultSet resultSet);
The last record that was fetched from the result set, or
null
if no record has been fetched.
/**
* The last record that was fetched from the result set, or
* <code>null</code> if no record has been fetched.
*/
@Nullable
Record record();
Calling this has no effect. It is used by jOOQ internally.
/**
* Calling this has no effect. It is used by jOOQ internally.
*/
void record(Record record);
The number of rows that were affected by the last statement.
This returns -1
:
- if the number of affected rows is not yet available (e.g. prior to the
ExecuteListener.executeEnd(ExecuteContext)
event).
- if affected rows are not applicable for the given statement (statements that do not produce a JDBC
Statement.getUpdateCount()
.
/**
* The number of rows that were affected by the last statement.
* <p>
* This returns <code>-1</code>:
* <ul>
* <li>if the number of affected rows is not yet available (e.g. prior to
* the {@link ExecuteListener#executeEnd(ExecuteContext)} event).</li>
* <li>if affected rows are not applicable for the given statement
* (statements that do not produce a JDBC
* {@link Statement#getUpdateCount()}.</li>
* </ul>
*/
int rows();
Calling this has no effect. It is used by jOOQ internally.
/**
* Calling this has no effect. It is used by jOOQ internally.
*/
void rows(int rows);
The number of rows that were affected by the last statement executed in
batch mode.
If a single Query
is executed in non-batch mode, this will
return an array of length 1
, containing rows()
This returns -1
values if the number of affected rows is not
yet available, or if affected rows are not applicable for a given
statement.
See Also: Returns: The affected rows. This is never null
/**
* The number of rows that were affected by the last statement executed in
* batch mode.
* <p>
* If a single <code>Query</code> is executed in non-batch mode, this will
* return an array of length <code>1</code>, containing {@link #rows()}
* <p>
* This returns <code>-1</code> values if the number of affected rows is not
* yet available, or if affected rows are not applicable for a given
* statement.
*
* @see #rows()
* @return The affected rows. This is never <code>null</code>
*/
@NotNull
int[] batchRows();
The last result that was fetched from the result set, or
null
if no result has been fetched.
/**
* The last result that was fetched from the result set, or
* <code>null</code> if no result has been fetched.
*/
@Nullable
Result<?> result();
Calling this has no effect. It is used by jOOQ internally.
/**
* Calling this has no effect. It is used by jOOQ internally.
*/
void result(Result<?> result);
The RuntimeException
being thrown. /**
* The {@link RuntimeException} being thrown.
*/
@Nullable
RuntimeException exception();
Override the RuntimeException
being thrown.
This may have no effect, if called at the wrong moment.
If null
is being passed, jOOQ will internally translate the "unavailable" exception to an unspecified DataAccessException
.
/**
* Override the {@link RuntimeException} being thrown.
* <p>
* This may have no effect, if called at the wrong moment.
* <p>
* If <code>null</code> is being passed, jOOQ will internally translate the
* "unavailable" exception to an unspecified {@link DataAccessException}.
*/
void exception(RuntimeException e);
The SQLException
that was thrown by the database. /**
* The {@link SQLException} that was thrown by the database.
*/
@Nullable
SQLException sqlException();
Override the SQLException
being thrown.
Any SQLException
will be wrapped by jOOQ using an unchecked DataAccessException
. To have jOOQ throw your own custom RuntimeException
, use exception(RuntimeException)
instead. This may have no effect, if called at the wrong moment.
If null
is being passed, jOOQ will internally translate the "unavailable" exception to an unspecified DataAccessException
.
/**
* Override the {@link SQLException} being thrown.
* <p>
* Any <code>SQLException</code> will be wrapped by jOOQ using an unchecked
* {@link DataAccessException}. To have jOOQ throw your own custom
* {@link RuntimeException}, use {@link #exception(RuntimeException)}
* instead. This may have no effect, if called at the wrong moment.
* <p>
* If <code>null</code> is being passed, jOOQ will internally translate the
* "unavailable" exception to an unspecified {@link DataAccessException}.
*/
void sqlException(SQLException e);
The SQLWarning
that was emitted by the database. Note that fetching of warnings can be disabled using Settings.isFetchWarnings()
, in case of which this property will be null
.
/**
* The {@link SQLWarning} that was emitted by the database.
* <p>
* Note that fetching of warnings can be disabled using
* {@link Settings#isFetchWarnings()}, in case of which this property will
* be <code>null</code>.
*/
@Nullable
SQLWarning sqlWarning();
Override the SQLWarning
being emitted. /**
* Override the {@link SQLWarning} being emitted.
*/
void sqlWarning(SQLWarning e);
Any server output collected from this statement when
Settings.getFetchServerOutputSize()
> 0
.
Returns: The server output. This is never null
.
/**
* Any server output collected from this statement when
* <code>{@link Settings#getFetchServerOutputSize()} > 0</code>.
*
* @return The server output. This is never <code>null</code>.
*/
@NotNull
String[] serverOutput();
Any server output collected from this statement when
Settings.getFetchServerOutputSize()
> 0
.
/**
* Any server output collected from this statement when
* <code>{@link Settings#getFetchServerOutputSize()} > 0</code>.
*/
void serverOutput(String[] output);
}