/**
* Copyright 2004-2017 the original author or authors.
*
* 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.
*/
package com.ibatis.sqlmap.engine.execution;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;
import com.ibatis.sqlmap.engine.config.SqlMapConfiguration;
import com.ibatis.sqlmap.engine.mapping.statement.RowHandlerCallback;
import com.ibatis.sqlmap.engine.scope.SessionScope;
import com.ibatis.sqlmap.engine.scope.StatementScope;
/**
* Classes responsible for executing the SQL implement this interface Support for custom SQL Executors.
*/
public interface SqlExecutor {
//
// Constants
//
/**
* Constant to let us know not to skip anything
*/
int NO_SKIPPED_RESULTS = 0;
/**
* Constant to let us know to include all records
*/
int NO_MAXIMUM_RESULTS = -999999;
/**
* Execute an update
*
* @param statementScope
* - the request scope
* @param conn
* - the database connection
* @param sql
* - the sql statement to execute
* @param parameters
* - the parameters for the sql statement
* @return - the number of records changed
* @throws SQLException
* - if the update fails
*/
public int executeUpdate(StatementScope statementScope, Connection conn, String sql, Object[] parameters)
throws SQLException;
/**
* Adds a statement to a batch
*
* @param statementScope
* - the request scope
* @param conn
* - the database connection
* @param sql
* - the sql statement
* @param parameters
* - the parameters for the statement
* @throws SQLException
* - if the statement fails
*/
public void addBatch(StatementScope statementScope, Connection conn, String sql, Object[] parameters)
throws SQLException;
/**
* Execute a batch of statements
*
* @param sessionScope
* - the session scope
* @return - the number of rows impacted by the batch
* @throws SQLException
* - if a statement fails
*/
public int executeBatch(SessionScope sessionScope) throws SQLException;
/**
* Execute a batch of statements
*
* @param sessionScope
* - the session scope
* @return - a List of BatchResult objects (may be null if no batch has been initiated). There will be one BatchResult
* object in the list for each sub-batch executed
* @throws SQLException
* if a database access error occurs, or the drive does not support batch statements
* @throws BatchException
* if the driver throws BatchUpdateException
*/
public List executeBatchDetailed(SessionScope sessionScope) throws SQLException, BatchException;
/**
* Long form of the method to execute a query
*
* @param statementScope
* - the request scope
* @param conn
* - the database connection
* @param sql
* - the SQL statement to execute
* @param parameters
* - the parameters for the statement
* @param skipResults
* - the number of results to skip
* @param maxResults
* - the maximum number of results to return
* @param callback
* - the row handler for the query
* @throws SQLException
* - if the query fails
*/
public void executeQuery(StatementScope statementScope, Connection conn, String sql, Object[] parameters,
int skipResults, int maxResults, RowHandlerCallback callback) throws SQLException;
/**
* Execute a stored procedure that updates data
*
* @param statementScope
* - the request scope
* @param conn
* - the database connection
* @param sql
* - the SQL to call the procedure
* @param parameters
* - the parameters for the procedure
* @return - the rows impacted by the procedure
* @throws SQLException
* - if the procedure fails
*/
public int executeUpdateProcedure(StatementScope statementScope, Connection conn, String sql, Object[] parameters)
throws SQLException;
/**
* Execute a stored procedure
*
* @param statementScope
* - the request scope
* @param conn
* - the database connection
* @param sql
* - the sql to call the procedure
* @param parameters
* - the parameters for the procedure
* @param skipResults
* - the number of results to skip
* @param maxResults
* - the maximum number of results to return
* @param callback
* - a row handler for processing the results
* @throws SQLException
* - if the procedure fails
*/
public void executeQueryProcedure(StatementScope statementScope, Connection conn, String sql, Object[] parameters,
int skipResults, int maxResults, RowHandlerCallback callback) throws SQLException;
/**
* Clean up any batches on the session
*
* @param sessionScope
* - the session to clean up
*/
public void cleanup(SessionScope sessionScope);
/**
* Initializing SQL Executor by passing configuration and global properties.
*
* @param config
* - the configuration class, which contains complete configuration info
* @param globalProps
*/
public void init(SqlMapConfiguration config, Properties globalProps);
}