All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jooq.ExecuteContext Maven / Gradle / Ivy

There is a newer version: 3.19.15
Show newest version
/*
 * 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
 * Apache-2.0 license 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 java.util.stream.Collector;

import org.jooq.conf.Settings;
import org.jooq.conf.StatementType;
import org.jooq.exception.DataAccessException;
import org.jooq.impl.DSL;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

/**
 * A context object for {@link Query} execution passed to registered
 * {@link ExecuteListener}'s.
 * 

* This type implements {@link Scope} and thus has a lifecycle defined by the * query execution. *

* The {@link #data()} map contents are maintained for the entirety of the * execution, and are passed along to child {@link Scope} types, including e.g. *

    *
  • {@link BindingScope}: When passing bind values or reading results.
  • *
* * @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 {@link Configuration#connectionProvider()} * 's supplied connection. This proxy takes care of two things: *

    *
  • It takes care of properly implementing * {@link Settings#getStatementType()}
  • *
  • It takes care of properly returning a connection to * {@link ConnectionProvider#release(Connection)}, once jOOQ can release the * connection
  • *
*/ Connection connection(); /** * The type of database interaction that is being executed. * * @see ExecuteType */ @NotNull ExecuteType type(); /** * The jOOQ {@link 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 #routine() * @see #batchQueries() */ @Nullable Query query(); /** * 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 Query. *

* If a single Query is executed in non-batch mode, this will * return an array of length 1, containing that * Query * * @see #query() * @see #routine() * @return The executed Query object(s). This is never * null */ @NotNull Query @NotNull [] batchQueries(); /** * The jOOQ {@link Routine} that is being executed or null if * the query is unknown or if there was no jOOQ Routine. * * @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. */ @Nullable String sql(); /** * Override the SQL statement that is being executed. *

* 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 #query() * @see #routine() * @return The generated SQL statement(s). This is never null */ @NotNull String @NotNull [] batchSQL(); /** * Override the {@link Connection} that is being used for execution. *

* This may have no effect, if called at the wrong moment. * * @see ExecuteListener#start(ExecuteContext) */ void connectionProvider(ConnectionProvider connectionProvider); /** * The {@link 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 * {@link 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 {@link StatementType#STATIC_STATEMENT}
  • *
  • A java.sql.CallableStatement when you are executing a * jOOQ Routine
  • *
*/ @Nullable PreparedStatement statement(); /** * Override the {@link PreparedStatement} that is being executed. *

* 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 {@link Query#keepStatement(boolean)} is * activated. *

* 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 {@link ResultSet} that is being fetched or null if the * result set is unknown or if no result set is being fetched. */ @Nullable ResultSet resultSet(); /** * Override the {@link ResultSet} that is being fetched. *

* This may have no effect, if called at the wrong moment. * * @see ExecuteListener#executeEnd(ExecuteContext) * @see ExecuteListener#fetchStart(ExecuteContext) */ void resultSet(ResultSet resultSet); /** * The 0-based record nesting level for {@link #record()}, relevant when nested * result events are triggered via * {@link ExecuteListener#resultStart(ExecuteContext)} and * {@link ExecuteListener#resultEnd(ExecuteContext)}, e.g. in the presence * of {@link DSL#multiset(Select)}. */ int recordLevel(); /** * The last record that was fetched from the result set, or * null if no record has been fetched. */ @Nullable Record record(); /** * 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 {@link ExecuteListener#executeEnd(ExecuteContext)} event).
  • *
  • if affected rows are not applicable for the given statement * (statements that do not produce a JDBC * {@link Statement#getUpdateCount()}.
  • *
*/ int rows(); /** * 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 {@link #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 #rows() * @return The affected rows. This is never null */ int @NotNull [] batchRows(); /** * The 0-based result nesting level for {@link #result()}, relevant when nested * result events are triggered via * {@link ExecuteListener#resultStart(ExecuteContext)} and * {@link ExecuteListener#resultEnd(ExecuteContext)}, e.g. in the presence * of {@link DSL#multiset(Select)}. */ int resultLevel(); /** * The last result that was fetched from the result set, or * null if no result has been fetched, including when results * do not need to be buffered in a {@link Result} type, such as all * {@link ResultQuery#collect(Collector)} or {@link ResultQuery#iterator()} * based fetches. */ @Nullable Result result(); /** * Calling this has no effect. It is used by jOOQ internally. */ void result(Result result); /** * The {@link RuntimeException} being thrown. */ @Nullable RuntimeException exception(); /** * Override the {@link 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 {@link DataAccessException}. */ void exception(RuntimeException e); /** * The {@link SQLException} that was thrown by the database. */ @Nullable SQLException sqlException(); /** * Override the {@link SQLException} being thrown. *

* Any SQLException 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. *

* If null is being passed, jOOQ will internally translate the * "unavailable" exception to an unspecified {@link DataAccessException}. */ void sqlException(SQLException e); /** * The {@link SQLWarning} that was emitted by the database. *

* Note that fetching of warnings can be disabled using * {@link Settings#isFetchWarnings()}, in case of which this property will * be null. */ @Nullable SQLWarning sqlWarning(); /** * Override the {@link SQLWarning} being emitted. */ void sqlWarning(SQLWarning e); /** * Any server output collected from this statement when * {@link Settings#getFetchServerOutputSize()} > 0. * * @return The server output. This is never null. */ @NotNull String @NotNull [] serverOutput(); /** * Any server output collected from this statement when * {@link Settings#getFetchServerOutputSize()} > 0. */ void serverOutput(String[] output); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy