/*Copyright (C) 2026 the APIJSON group. All rights reserved.
This source code is licensed under the Apache License Version 2.0.*/
package apijson.orm;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Savepoint;
import java.sql.Statement;
import java.util.List;
import java.util.Map;
import apijson.*;
/**executor for query(read) or update(write) MySQL database
* @author Lemon
*/
public interface SQLExecutor {
Parser getParser();
SQLExecutor setParser(Parser parser);
/**
* @param sql
* @param list
* @param config
*/
void putCache(String sql, List list, SQLConfig config);
/**
* @param sql
* @param config
* @return
*/
List getCache(String sql, SQLConfig config);
/**
* @param sql
* @param position
* @param config
* @return
*/
M getCacheItem(String sql, int position, SQLConfig config);
/**
* @param sql
* @param config
*/
void removeCache(String sql, SQLConfig config);
/**SQL
* @param config
* @param unknownType
* @return
* @throws Exception
*/
M execute(@NotNull SQLConfig config, boolean unknownType) throws Exception;
//executeQueryexecuteUpdate
/**
* @param config
* @return
* @throws SQLException
*/
default ResultSet executeQuery(@NotNull SQLConfig config) throws Exception {
return executeQuery(config, null);
}
ResultSet executeQuery(@NotNull SQLConfig config, String sql) throws Exception;
/**
* @param config
* @return
* @throws SQLException
*/
default int executeUpdate(@NotNull SQLConfig config) throws Exception {
return executeUpdate(config, null);
}
int executeUpdate(@NotNull SQLConfig config, String sql) throws Exception;
/**JSON
* @param config
* @param rsmd
* @param position
* @param label
* @return
*/
boolean isJSONType(@NotNull SQLConfig config, ResultSetMetaData rsmd, int position, String label);
/**
* Convert a JDBC value to a JSON-serializable Java value. Database adapters can
* override this hook without replacing the complete result-set traversal.
*/
default Object mapResultValue(@NotNull SQLConfig config, Object value, int jdbcType
, String typeName, String label) throws Exception {
return value;
}
Connection getConnection(@NotNull SQLConfig config) throws Exception;
default Statement getStatement(@NotNull SQLConfig config) throws Exception {
return getStatement(config, null);
}
Statement getStatement(@NotNull SQLConfig config, String sql) throws Exception;
int getTransactionIsolation();
void setTransactionIsolation(int transactionIsolation);
/**
* @throws SQLException
*/
void begin(int transactionIsolation) throws SQLException;
/**
* @throws SQLException
*/
void rollback() throws SQLException;
/**
* @throws SQLException
*/
void rollback(Savepoint savepoint) throws SQLException;
/**
* @throws SQLException
*/
void commit() throws SQLException;
/**
*/
void close();
ResultSet executeQuery(@NotNull Statement statement, String sql) throws Exception;
int executeUpdate(@NotNull Statement statement, String sql) throws Exception;
ResultSet execute(@NotNull Statement statement, String sql) throws Exception;
int getGeneratedSQLCount();
int getCachedSQLCount();
int getExecutedSQLCount();
long getExecutedSQLDuration();
long getSqlResultDuration();
}