/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * 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.alibaba.druid.filter;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import com.alibaba.druid.proxy.jdbc.*;

import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.math.BigDecimal;
import java.sql.*;
import java.util.Calendar;
import java.util.Properties;
import java.util.concurrent.Executor;

/**
 * @author wenshao [szujobs@hotmail.com]
 */
public interface Filter extends Wrapper {
    void init(DataSourceProxy dataSource);

    void destroy();

    void configFromProperties(Properties properties);

    boolean isWrapperFor(java.lang.Class<?> iface);

    <T> T unwrap(java.lang.Class<T> iface);

    ConnectionProxy connection_connect(FilterChain chain, Properties info) throws SQLException;

    StatementProxy connection_createStatement(FilterChain chain, ConnectionProxy connection) throws SQLException;

    PreparedStatementProxy connection_prepareStatement(FilterChain chain, ConnectionProxy connection, String sql)
            throws SQLException;

    CallableStatementProxy connection_prepareCall(FilterChain chain, ConnectionProxy connection, String sql)
            throws SQLException;

    String connection_nativeSQL(FilterChain chain, ConnectionProxy connection, String sql) throws SQLException;

    void connection_setAutoCommit(FilterChain chain, ConnectionProxy connection, boolean autoCommit)
            throws SQLException;

    boolean connection_getAutoCommit(FilterChain chain, ConnectionProxy connection) throws SQLException;

    void connection_commit(FilterChain chain, ConnectionProxy connection) throws SQLException;

    void connection_rollback(FilterChain chain, ConnectionProxy connection) throws SQLException;

    void connection_close(FilterChain chain, ConnectionProxy connection) throws SQLException;

    boolean connection_isClosed(FilterChain chain, ConnectionProxy connection) throws SQLException;

    DatabaseMetaData connection_getMetaData(FilterChain chain, ConnectionProxy connection) throws SQLException;

    void connection_setReadOnly(FilterChain chain, ConnectionProxy connection, boolean readOnly) throws SQLException;

    boolean connection_isReadOnly(FilterChain chain, ConnectionProxy connection) throws SQLException;

    void connection_setCatalog(FilterChain chain, ConnectionProxy connection, String catalog) throws SQLException;

    String connection_getCatalog(FilterChain chain, ConnectionProxy connection) throws SQLException;

    void connection_setTransactionIsolation(FilterChain chain, ConnectionProxy connection, int level)
            throws SQLException;

    int connection_getTransactionIsolation(FilterChain chain, ConnectionProxy connection) throws SQLException;

    SQLWarning connection_getWarnings(FilterChain chain, ConnectionProxy connection) throws SQLException;

    void connection_clearWarnings(FilterChain chain, ConnectionProxy connection) throws SQLException;

    StatementProxy connection_createStatement(FilterChain chain, ConnectionProxy connection, int resultSetType,
                                              int resultSetConcurrency) throws SQLException;

    PreparedStatementProxy connection_prepareStatement(FilterChain chain, ConnectionProxy connection, String sql,
                                                       int resultSetType, int resultSetConcurrency) throws SQLException;

    CallableStatementProxy connection_prepareCall(FilterChain chain, ConnectionProxy connection, String sql,
                                                  int resultSetType, int resultSetConcurrency) throws SQLException;

    java.util.Map<String, Class<?>> connection_getTypeMap(FilterChain chain, ConnectionProxy connection)
            throws SQLException;

    void connection_setTypeMap(FilterChain chain, ConnectionProxy connection, java.util.Map<String, Class<?>> map)
            throws SQLException;

    void connection_setHoldability(FilterChain chain, ConnectionProxy connection, int holdability) throws SQLException;

    int connection_getHoldability(FilterChain chain, ConnectionProxy connection) throws SQLException;

    Savepoint connection_setSavepoint(FilterChain chain, ConnectionProxy connection) throws SQLException;

    Savepoint connection_setSavepoint(FilterChain chain, ConnectionProxy connection, String name) throws SQLException;

    void connection_rollback(FilterChain chain, ConnectionProxy connection, Savepoint savepoint) throws SQLException;

    void connection_releaseSavepoint(FilterChain chain, ConnectionProxy connection, Savepoint savepoint)
            throws SQLException;

    StatementProxy connection_createStatement(FilterChain chain, ConnectionProxy connection, int resultSetType,
                                              int resultSetConcurrency, int resultSetHoldability) throws SQLException;

    PreparedStatementProxy connection_prepareStatement(FilterChain chain, ConnectionProxy connection, String sql,
                                                       int resultSetType, int resultSetConcurrency,
                                                       int resultSetHoldability) throws SQLException;

    CallableStatementProxy connection_prepareCall(FilterChain chain, ConnectionProxy connection, String sql,
                                                  int resultSetType, int resultSetConcurrency, int resultSetHoldability)
            throws SQLException;

    PreparedStatementProxy connection_prepareStatement(FilterChain chain, ConnectionProxy connection, String sql,
                                                       int autoGeneratedKeys) throws SQLException;

    PreparedStatementProxy connection_prepareStatement(FilterChain chain, ConnectionProxy connection, String sql,
                                                       int[] columnIndexes) throws SQLException;

    PreparedStatementProxy connection_prepareStatement(FilterChain chain, ConnectionProxy connection, String sql,
                                                       String[] columnNames) throws SQLException;

    Clob connection_createClob(FilterChain chain, ConnectionProxy connection) throws SQLException;

    Blob connection_createBlob(FilterChain chain, ConnectionProxy connection) throws SQLException;

    NClob connection_createNClob(FilterChain chain, ConnectionProxy connection) throws SQLException;

    SQLXML connection_createSQLXML(FilterChain chain, ConnectionProxy connection) throws SQLException;

    boolean connection_isValid(FilterChain chain, ConnectionProxy connection, int timeout) throws SQLException;

    void connection_setClientInfo(FilterChain chain, ConnectionProxy connection, String name, String value)
            throws SQLClientInfoException;

    void connection_setClientInfo(FilterChain chain, ConnectionProxy connection, Properties properties)
            throws SQLClientInfoException;

    String connection_getClientInfo(FilterChain chain, ConnectionProxy connection, String name) throws SQLException;

    Properties connection_getClientInfo(FilterChain chain, ConnectionProxy connection) throws SQLException;

    Array connection_createArrayOf(FilterChain chain, ConnectionProxy connection, String typeName, Object[] elements)
            throws SQLException;

    Struct connection_createStruct(FilterChain chain, ConnectionProxy connection, String typeName, Object[] attributes)
            throws SQLException;

    String connection_getSchema(FilterChain chain, ConnectionProxy connection) throws SQLException;

    void connection_setSchema(FilterChain chain, ConnectionProxy connection, String schema) throws SQLException;

    void connection_abort(FilterChain chain, ConnectionProxy connection, Executor executor) throws SQLException;

    void connection_setNetworkTimeout(FilterChain chain,
                                      ConnectionProxy connection,
                                      Executor executor,
                                      int milliseconds) throws SQLException;

    int connection_getNetworkTimeout(FilterChain chain, ConnectionProxy connection) throws SQLException;

    // ///////////////
    boolean resultSet_next(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    void resultSet_close(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    boolean resultSet_wasNull(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    String resultSet_getString(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    boolean resultSet_getBoolean(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    byte resultSet_getByte(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    short resultSet_getShort(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    int resultSet_getInt(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    long resultSet_getLong(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    float resultSet_getFloat(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    double resultSet_getDouble(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    BigDecimal resultSet_getBigDecimal(FilterChain chain, ResultSetProxy resultSet, int columnIndex, int scale)
            throws SQLException;

    byte[] resultSet_getBytes(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    Date resultSet_getDate(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    Time resultSet_getTime(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    Timestamp resultSet_getTimestamp(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    java.io.InputStream resultSet_getAsciiStream(FilterChain chain, ResultSetProxy resultSet, int columnIndex)
            throws SQLException;

    java.io.InputStream resultSet_getUnicodeStream(FilterChain chain, ResultSetProxy resultSet, int columnIndex)
            throws SQLException;

    java.io.InputStream resultSet_getBinaryStream(FilterChain chain, ResultSetProxy resultSet, int columnIndex)
            throws SQLException;

    String resultSet_getString(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    boolean resultSet_getBoolean(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    byte resultSet_getByte(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    short resultSet_getShort(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    int resultSet_getInt(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    long resultSet_getLong(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    float resultSet_getFloat(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    double resultSet_getDouble(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    BigDecimal resultSet_getBigDecimal(FilterChain chain, ResultSetProxy resultSet, String columnLabel, int scale)
            throws SQLException;

    byte[] resultSet_getBytes(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    java.sql.Date resultSet_getDate(FilterChain chain, ResultSetProxy resultSet, String columnLabel)
            throws SQLException;

    java.sql.Time resultSet_getTime(FilterChain chain, ResultSetProxy resultSet, String columnLabel)
            throws SQLException;

    java.sql.Timestamp resultSet_getTimestamp(FilterChain chain, ResultSetProxy resultSet, String columnLabel)
            throws SQLException;

    java.io.InputStream resultSet_getAsciiStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel)
            throws SQLException;

    java.io.InputStream resultSet_getUnicodeStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel)
            throws SQLException;

    java.io.InputStream resultSet_getBinaryStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel)
            throws SQLException;

    SQLWarning resultSet_getWarnings(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    void resultSet_clearWarnings(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    String resultSet_getCursorName(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    ResultSetMetaData resultSet_getMetaData(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    Object resultSet_getObject(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    <T> T resultSet_getObject(FilterChain chain,
                              ResultSetProxy resultSet,
                              int columnIndex,
                              Class<T> type) throws SQLException;

    Object resultSet_getObject(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    <T> T resultSet_getObject(FilterChain chain,
                              ResultSetProxy resultSet,
                              String columnLabel,
                              Class<T> type) throws SQLException;

    int resultSet_findColumn(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    java.io.Reader resultSet_getCharacterStream(FilterChain chain, ResultSetProxy resultSet, int columnIndex)
            throws SQLException;

    java.io.Reader resultSet_getCharacterStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel)
            throws SQLException;

    BigDecimal resultSet_getBigDecimal(FilterChain chain, ResultSetProxy resultSet, int columnIndex)
            throws SQLException;

    BigDecimal resultSet_getBigDecimal(FilterChain chain, ResultSetProxy resultSet, String columnLabel)
            throws SQLException;

    boolean resultSet_isBeforeFirst(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    boolean resultSet_isAfterLast(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    boolean resultSet_isFirst(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    boolean resultSet_isLast(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    void resultSet_beforeFirst(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    void resultSet_afterLast(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    boolean resultSet_first(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    boolean resultSet_last(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    int resultSet_getRow(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    boolean resultSet_absolute(FilterChain chain, ResultSetProxy resultSet, int row) throws SQLException;

    boolean resultSet_relative(FilterChain chain, ResultSetProxy resultSet, int rows) throws SQLException;

    boolean resultSet_previous(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    void resultSet_setFetchDirection(FilterChain chain, ResultSetProxy resultSet, int direction) throws SQLException;

    int resultSet_getFetchDirection(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    void resultSet_setFetchSize(FilterChain chain, ResultSetProxy resultSet, int rows) throws SQLException;

    int resultSet_getFetchSize(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    int resultSet_getType(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    int resultSet_getConcurrency(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    boolean resultSet_rowUpdated(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    boolean resultSet_rowInserted(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    boolean resultSet_rowDeleted(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    void resultSet_updateNull(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    void resultSet_updateBoolean(FilterChain chain, ResultSetProxy resultSet, int columnIndex, boolean x)
            throws SQLException;

    void resultSet_updateByte(FilterChain chain, ResultSetProxy resultSet, int columnIndex, byte x) throws SQLException;

    void resultSet_updateShort(FilterChain chain, ResultSetProxy resultSet, int columnIndex, short x)
            throws SQLException;

    void resultSet_updateInt(FilterChain chain, ResultSetProxy resultSet, int columnIndex, int x) throws SQLException;

    void resultSet_updateLong(FilterChain chain, ResultSetProxy resultSet, int columnIndex, long x) throws SQLException;

    void resultSet_updateFloat(FilterChain chain, ResultSetProxy resultSet, int columnIndex, float x)
            throws SQLException;

    void resultSet_updateDouble(FilterChain chain, ResultSetProxy resultSet, int columnIndex, double x)
            throws SQLException;

    void resultSet_updateBigDecimal(FilterChain chain, ResultSetProxy resultSet, int columnIndex, BigDecimal x)
            throws SQLException;

    void resultSet_updateString(FilterChain chain, ResultSetProxy resultSet, int columnIndex, String x)
            throws SQLException;

    void resultSet_updateBytes(FilterChain chain, ResultSetProxy resultSet, int columnIndex, byte[] x)
            throws SQLException;

    void resultSet_updateDate(FilterChain chain, ResultSetProxy resultSet, int columnIndex, java.sql.Date x)
            throws SQLException;

    void resultSet_updateTime(FilterChain chain, ResultSetProxy resultSet, int columnIndex, java.sql.Time x)
            throws SQLException;

    void resultSet_updateTimestamp(FilterChain chain, ResultSetProxy resultSet, int columnIndex, java.sql.Timestamp x)
            throws SQLException;

    void resultSet_updateAsciiStream(FilterChain chain, ResultSetProxy resultSet, int columnIndex,
                                     java.io.InputStream x, int length) throws SQLException;

    void resultSet_updateBinaryStream(FilterChain chain, ResultSetProxy resultSet, int columnIndex,
                                      java.io.InputStream x, int length) throws SQLException;

    void resultSet_updateCharacterStream(FilterChain chain, ResultSetProxy resultSet, int columnIndex,
                                         java.io.Reader x, int length) throws SQLException;

    void resultSet_updateObject(FilterChain chain, ResultSetProxy resultSet, int columnIndex, Object x,
                                int scaleOrLength) throws SQLException;

    void resultSet_updateObject(FilterChain chain, ResultSetProxy resultSet, int columnIndex, Object x)
            throws SQLException;

    void resultSet_updateNull(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    void resultSet_updateBoolean(FilterChain chain, ResultSetProxy resultSet, String columnLabel, boolean x)
            throws SQLException;

    void resultSet_updateByte(FilterChain chain, ResultSetProxy resultSet, String columnLabel, byte x)
            throws SQLException;

    void resultSet_updateShort(FilterChain chain, ResultSetProxy resultSet, String columnLabel, short x)
            throws SQLException;

    void resultSet_updateInt(FilterChain chain, ResultSetProxy resultSet, String columnLabel, int x)
            throws SQLException;

    void resultSet_updateLong(FilterChain chain, ResultSetProxy resultSet, String columnLabel, long x)
            throws SQLException;

    void resultSet_updateFloat(FilterChain chain, ResultSetProxy resultSet, String columnLabel, float x)
            throws SQLException;

    void resultSet_updateDouble(FilterChain chain, ResultSetProxy resultSet, String columnLabel, double x)
            throws SQLException;

    void resultSet_updateBigDecimal(FilterChain chain, ResultSetProxy resultSet, String columnLabel, BigDecimal x)
            throws SQLException;

    void resultSet_updateString(FilterChain chain, ResultSetProxy resultSet, String columnLabel, String x)
            throws SQLException;

    void resultSet_updateBytes(FilterChain chain, ResultSetProxy resultSet, String columnLabel, byte[] x)
            throws SQLException;

    void resultSet_updateDate(FilterChain chain, ResultSetProxy resultSet, String columnLabel, java.sql.Date x)
            throws SQLException;

    void resultSet_updateTime(FilterChain chain, ResultSetProxy resultSet, String columnLabel, java.sql.Time x)
            throws SQLException;

    void resultSet_updateTimestamp(FilterChain chain,
                                   ResultSetProxy resultSet,
                                   String columnLabel,
                                   java.sql.Timestamp x)
            throws SQLException;

    void resultSet_updateAsciiStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel,
                                     java.io.InputStream x, int length) throws SQLException;

    void resultSet_updateBinaryStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel,
                                      java.io.InputStream x, int length) throws SQLException;

    void resultSet_updateCharacterStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel,
                                         java.io.Reader reader, int length) throws SQLException;

    void resultSet_updateObject(FilterChain chain, ResultSetProxy resultSet, String columnLabel, Object x,
                                int scaleOrLength) throws SQLException;

    void resultSet_updateObject(FilterChain chain, ResultSetProxy resultSet, String columnLabel, Object x)
            throws SQLException;

    void resultSet_insertRow(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    void resultSet_updateRow(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    void resultSet_deleteRow(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    void resultSet_refreshRow(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    void resultSet_cancelRowUpdates(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    void resultSet_moveToInsertRow(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    void resultSet_moveToCurrentRow(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    Statement resultSet_getStatement(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    Object resultSet_getObject(FilterChain chain, ResultSetProxy resultSet, int columnIndex,
                               java.util.Map<String, Class<?>> map) throws SQLException;

    Ref resultSet_getRef(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    Blob resultSet_getBlob(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    Clob resultSet_getClob(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    Array resultSet_getArray(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    Object resultSet_getObject(FilterChain chain, ResultSetProxy resultSet, String columnLabel,
                               java.util.Map<String, Class<?>> map) throws SQLException;

    Ref resultSet_getRef(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    Blob resultSet_getBlob(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    Clob resultSet_getClob(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    Array resultSet_getArray(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    java.sql.Date resultSet_getDate(FilterChain chain, ResultSetProxy resultSet, int columnIndex, Calendar cal)
            throws SQLException;

    java.sql.Date resultSet_getDate(FilterChain chain, ResultSetProxy resultSet, String columnLabel, Calendar cal)
            throws SQLException;

    java.sql.Time resultSet_getTime(FilterChain chain, ResultSetProxy resultSet, int columnIndex, Calendar cal)
            throws SQLException;

    java.sql.Time resultSet_getTime(FilterChain chain, ResultSetProxy resultSet, String columnLabel, Calendar cal)
            throws SQLException;

    java.sql.Timestamp resultSet_getTimestamp(FilterChain chain,
                                              ResultSetProxy resultSet,
                                              int columnIndex,
                                              Calendar cal)
            throws SQLException;

    java.sql.Timestamp resultSet_getTimestamp(FilterChain chain, ResultSetProxy resultSet, String columnLabel,
                                              Calendar cal) throws SQLException;

    java.net.URL resultSet_getURL(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    java.net.URL resultSet_getURL(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    void resultSet_updateRef(FilterChain chain, ResultSetProxy resultSet, int columnIndex, java.sql.Ref x)
            throws SQLException;

    void resultSet_updateRef(FilterChain chain, ResultSetProxy resultSet, String columnLabel, java.sql.Ref x)
            throws SQLException;

    void resultSet_updateBlob(FilterChain chain, ResultSetProxy resultSet, int columnIndex, java.sql.Blob x)
            throws SQLException;

    void resultSet_updateBlob(FilterChain chain, ResultSetProxy resultSet, String columnLabel, java.sql.Blob x)
            throws SQLException;

    void resultSet_updateClob(FilterChain chain, ResultSetProxy resultSet, int columnIndex, java.sql.Clob x)
            throws SQLException;

    void resultSet_updateClob(FilterChain chain, ResultSetProxy resultSet, String columnLabel, java.sql.Clob x)
            throws SQLException;

    void resultSet_updateArray(FilterChain chain, ResultSetProxy resultSet, int columnIndex, java.sql.Array x)
            throws SQLException;

    void resultSet_updateArray(FilterChain chain, ResultSetProxy resultSet, String columnLabel, java.sql.Array x)
            throws SQLException;

    RowId resultSet_getRowId(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    RowId resultSet_getRowId(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    void resultSet_updateRowId(FilterChain chain, ResultSetProxy resultSet, int columnIndex, RowId x)
            throws SQLException;

    void resultSet_updateRowId(FilterChain chain, ResultSetProxy resultSet, String columnLabel, RowId x)
            throws SQLException;

    int resultSet_getHoldability(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    boolean resultSet_isClosed(FilterChain chain, ResultSetProxy resultSet) throws SQLException;

    void resultSet_updateNString(FilterChain chain, ResultSetProxy resultSet, int columnIndex, String nString)
            throws SQLException;

    void resultSet_updateNString(FilterChain chain, ResultSetProxy resultSet, String columnLabel, String nString)
            throws SQLException;

    void resultSet_updateNClob(FilterChain chain, ResultSetProxy resultSet, int columnIndex, NClob nClob)
            throws SQLException;

    void resultSet_updateNClob(FilterChain chain, ResultSetProxy resultSet, String columnLabel, NClob nClob)
            throws SQLException;

    NClob resultSet_getNClob(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    NClob resultSet_getNClob(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    SQLXML resultSet_getSQLXML(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    SQLXML resultSet_getSQLXML(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    void resultSet_updateSQLXML(FilterChain chain, ResultSetProxy resultSet, int columnIndex, SQLXML xmlObject)
            throws SQLException;

    void resultSet_updateSQLXML(FilterChain chain, ResultSetProxy resultSet, String columnLabel, SQLXML xmlObject)
            throws SQLException;

    String resultSet_getNString(FilterChain chain, ResultSetProxy resultSet, int columnIndex) throws SQLException;

    String resultSet_getNString(FilterChain chain, ResultSetProxy resultSet, String columnLabel) throws SQLException;

    java.io.Reader resultSet_getNCharacterStream(FilterChain chain, ResultSetProxy resultSet, int columnIndex)
            throws SQLException;

    java.io.Reader resultSet_getNCharacterStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel)
            throws SQLException;

    void resultSet_updateNCharacterStream(FilterChain chain, ResultSetProxy resultSet, int columnIndex,
                                          java.io.Reader x, long length) throws SQLException;

    void resultSet_updateNCharacterStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel,
                                          java.io.Reader reader, long length) throws SQLException;

    void resultSet_updateAsciiStream(FilterChain chain, ResultSetProxy resultSet, int columnIndex,
                                     java.io.InputStream x, long length) throws SQLException;

    void resultSet_updateBinaryStream(FilterChain chain, ResultSetProxy resultSet, int columnIndex,
                                      java.io.InputStream x, long length) throws SQLException;

    void resultSet_updateCharacterStream(FilterChain chain, ResultSetProxy resultSet, int columnIndex,
                                         java.io.Reader x, long length) throws SQLException;

    void resultSet_updateAsciiStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel,
                                     java.io.InputStream x, long length) throws SQLException;

    void resultSet_updateBinaryStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel,
                                      java.io.InputStream x, long length) throws SQLException;

    void resultSet_updateCharacterStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel,
                                         Reader reader, long length) throws SQLException;

    void resultSet_updateBlob(FilterChain chain, ResultSetProxy resultSet, int columnIndex, InputStream inputStream,
                              long length) throws SQLException;

    void resultSet_updateBlob(FilterChain chain, ResultSetProxy resultSet, String columnLabel, InputStream inputStream,
                              long length) throws SQLException;

    void resultSet_updateClob(FilterChain chain, ResultSetProxy resultSet, int columnIndex, Reader reader, long length)
            throws SQLException;

    void resultSet_updateClob(FilterChain chain, ResultSetProxy resultSet, String columnLabel, Reader reader,
                              long length) throws SQLException;

    void resultSet_updateNClob(FilterChain chain, ResultSetProxy resultSet, int columnIndex, Reader reader, long length)
            throws SQLException;

    void resultSet_updateNClob(FilterChain chain, ResultSetProxy resultSet, String columnLabel, Reader reader,
                               long length) throws SQLException;

    void resultSet_updateNCharacterStream(FilterChain chain,
                                          ResultSetProxy resultSet,
                                          int columnIndex,
                                          java.io.Reader x)
            throws SQLException;

    void resultSet_updateNCharacterStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel,
                                          java.io.Reader reader) throws SQLException;

    void resultSet_updateAsciiStream(FilterChain chain,
                                     ResultSetProxy resultSet,
                                     int columnIndex,
                                     java.io.InputStream x)
            throws SQLException;

    void resultSet_updateBinaryStream(FilterChain chain, ResultSetProxy resultSet, int columnIndex,
                                      java.io.InputStream x) throws SQLException;

    void resultSet_updateCharacterStream(FilterChain chain, ResultSetProxy resultSet, int columnIndex, java.io.Reader x)
            throws SQLException;

    void resultSet_updateAsciiStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel,
                                     java.io.InputStream x) throws SQLException;

    void resultSet_updateBinaryStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel,
                                      java.io.InputStream x) throws SQLException;

    void resultSet_updateCharacterStream(FilterChain chain, ResultSetProxy resultSet, String columnLabel,
                                         java.io.Reader reader) throws SQLException;

    void resultSet_updateBlob(FilterChain chain, ResultSetProxy resultSet, int columnIndex, InputStream inputStream)
            throws SQLException;

    void resultSet_updateBlob(FilterChain chain, ResultSetProxy resultSet, String columnLabel, InputStream inputStream)
            throws SQLException;

    void resultSet_updateClob(FilterChain chain, ResultSetProxy resultSet, int columnIndex, Reader reader)
            throws SQLException;

    void resultSet_updateClob(FilterChain chain, ResultSetProxy resultSet, String columnLabel, Reader reader)
            throws SQLException;

    void resultSet_updateNClob(FilterChain chain, ResultSetProxy resultSet, int columnIndex, Reader reader)
            throws SQLException;

    void resultSet_updateNClob(FilterChain chain, ResultSetProxy resultSet, String columnLabel, Reader reader)
            throws SQLException;

    // / statement

    ResultSetProxy statement_executeQuery(FilterChain chain, StatementProxy statement, String sql) throws SQLException;

    int statement_executeUpdate(FilterChain chain, StatementProxy statement, String sql) throws SQLException;

    void statement_close(FilterChain chain, StatementProxy statement) throws SQLException;

    int statement_getMaxFieldSize(FilterChain chain, StatementProxy statement) throws SQLException;

    void statement_setMaxFieldSize(FilterChain chain, StatementProxy statement, int max) throws SQLException;

    int statement_getMaxRows(FilterChain chain, StatementProxy statement) throws SQLException;

    void statement_setMaxRows(FilterChain chain, StatementProxy statement, int max) throws SQLException;

    void statement_setEscapeProcessing(FilterChain chain, StatementProxy statement, boolean enable) throws SQLException;

    int statement_getQueryTimeout(FilterChain chain, StatementProxy statement) throws SQLException;

    void statement_setQueryTimeout(FilterChain chain, StatementProxy statement, int seconds) throws SQLException;

    void statement_cancel(FilterChain chain, StatementProxy statement) throws SQLException;

    SQLWarning statement_getWarnings(FilterChain chain, StatementProxy statement) throws SQLException;

    void statement_clearWarnings(FilterChain chain, StatementProxy statement) throws SQLException;

    void statement_setCursorName(FilterChain chain, StatementProxy statement, String name) throws SQLException;

    boolean statement_execute(FilterChain chain, StatementProxy statement, String sql) throws SQLException;

    ResultSetProxy statement_getResultSet(FilterChain chain, StatementProxy statement) throws SQLException;

    int statement_getUpdateCount(FilterChain chain, StatementProxy statement) throws SQLException;

    boolean statement_getMoreResults(FilterChain chain, StatementProxy statement) throws SQLException;

    void statement_setFetchDirection(FilterChain chain, StatementProxy statement, int direction) throws SQLException;

    int statement_getFetchDirection(FilterChain chain, StatementProxy statement) throws SQLException;

    void statement_setFetchSize(FilterChain chain, StatementProxy statement, int rows) throws SQLException;

    int statement_getFetchSize(FilterChain chain, StatementProxy statement) throws SQLException;

    int statement_getResultSetConcurrency(FilterChain chain, StatementProxy statement) throws SQLException;

    int statement_getResultSetType(FilterChain chain, StatementProxy statement) throws SQLException;

    void statement_addBatch(FilterChain chain, StatementProxy statement, String sql) throws SQLException;

    void statement_clearBatch(FilterChain chain, StatementProxy statement) throws SQLException;

    int[] statement_executeBatch(FilterChain chain, StatementProxy statement) throws SQLException;

    Connection statement_getConnection(FilterChain chain, StatementProxy statement) throws SQLException;

    boolean statement_getMoreResults(FilterChain chain, StatementProxy statement, int current) throws SQLException;

    ResultSetProxy statement_getGeneratedKeys(FilterChain chain, StatementProxy statement) throws SQLException;

    int statement_executeUpdate(FilterChain chain, StatementProxy statement, String sql, int autoGeneratedKeys)
            throws SQLException;

    int statement_executeUpdate(FilterChain chain, StatementProxy statement, String sql, int[] columnIndexes)
            throws SQLException;

    int statement_executeUpdate(FilterChain chain, StatementProxy statement, String sql, String[] columnNames)
            throws SQLException;

    boolean statement_execute(FilterChain chain, StatementProxy statement, String sql, int autoGeneratedKeys)
            throws SQLException;

    boolean statement_execute(FilterChain chain, StatementProxy statement, String sql, int[] columnIndexes)
            throws SQLException;

    boolean statement_execute(FilterChain chain, StatementProxy statement, String sql, String[] columnNames)
            throws SQLException;

    int statement_getResultSetHoldability(FilterChain chain, StatementProxy statement) throws SQLException;

    boolean statement_isClosed(FilterChain chain, StatementProxy statement) throws SQLException;

    void statement_setPoolable(FilterChain chain, StatementProxy statement, boolean poolable) throws SQLException;

    boolean statement_isPoolable(FilterChain chain, StatementProxy statement) throws SQLException;

    // ///

    ResultSetProxy preparedStatement_executeQuery(FilterChain chain, PreparedStatementProxy statement)
            throws SQLException;

    int preparedStatement_executeUpdate(FilterChain chain, PreparedStatementProxy statement) throws SQLException;

    void preparedStatement_setNull(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, int sqlType)
            throws SQLException;

    void preparedStatement_setBoolean(FilterChain chain,
                                      PreparedStatementProxy statement,
                                      int parameterIndex,
                                      boolean x)
            throws SQLException;

    void preparedStatement_setByte(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, byte x)
            throws SQLException;

    void preparedStatement_setShort(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, short x)
            throws SQLException;

    void preparedStatement_setInt(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, int x)
            throws SQLException;

    void preparedStatement_setLong(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, long x)
            throws SQLException;

    void preparedStatement_setFloat(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, float x)
            throws SQLException;

    void preparedStatement_setDouble(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, double x)
            throws SQLException;

    void preparedStatement_setBigDecimal(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                         BigDecimal x) throws SQLException;

    void preparedStatement_setString(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, String x)
            throws SQLException;

    void preparedStatement_setBytes(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, byte[] x)
            throws SQLException;

    void preparedStatement_setDate(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                   java.sql.Date x) throws SQLException;

    void preparedStatement_setTime(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                   java.sql.Time x) throws SQLException;

    void preparedStatement_setTimestamp(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                        java.sql.Timestamp x) throws SQLException;

    void preparedStatement_setAsciiStream(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                          java.io.InputStream x, int length) throws SQLException;

    void preparedStatement_setUnicodeStream(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                            java.io.InputStream x, int length) throws SQLException;

    void preparedStatement_setBinaryStream(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                           java.io.InputStream x, int length) throws SQLException;

    void preparedStatement_clearParameters(FilterChain chain, PreparedStatementProxy statement) throws SQLException;

    void preparedStatement_setObject(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, Object x,
                                     int targetSqlType) throws SQLException;

    void preparedStatement_setObject(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, Object x)
            throws SQLException;

    boolean preparedStatement_execute(FilterChain chain, PreparedStatementProxy statement) throws SQLException;

    void preparedStatement_addBatch(FilterChain chain, PreparedStatementProxy statement) throws SQLException;

    void preparedStatement_setCharacterStream(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                              java.io.Reader reader, int length) throws SQLException;

    void preparedStatement_setRef(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, Ref x)
            throws SQLException;

    void preparedStatement_setBlob(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, Blob x)
            throws SQLException;

    void preparedStatement_setClob(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, Clob x)
            throws SQLException;

    void preparedStatement_setArray(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, Array x)
            throws SQLException;

    ResultSetMetaData preparedStatement_getMetaData(FilterChain chain, PreparedStatementProxy statement)
            throws SQLException;

    void preparedStatement_setDate(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                   java.sql.Date x, Calendar cal) throws SQLException;

    void preparedStatement_setTime(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                   java.sql.Time x, Calendar cal) throws SQLException;

    void preparedStatement_setTimestamp(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                        java.sql.Timestamp x, Calendar cal) throws SQLException;

    void preparedStatement_setNull(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                   int sqlType, String typeName) throws SQLException;

    void preparedStatement_setURL(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                  java.net.URL x) throws SQLException;

    ParameterMetaData preparedStatement_getParameterMetaData(FilterChain chain, PreparedStatementProxy statement)
            throws SQLException;

    void preparedStatement_setRowId(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, RowId x)
            throws SQLException;

    void preparedStatement_setNString(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                      String value) throws SQLException;

    void preparedStatement_setNCharacterStream(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                               Reader value, long length) throws SQLException;

    void preparedStatement_setNClob(FilterChain chain,
                                    PreparedStatementProxy statement,
                                    int parameterIndex,
                                    NClob value)
            throws SQLException;

    void preparedStatement_setClob(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                   Reader reader, long length) throws SQLException;

    void preparedStatement_setBlob(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                   InputStream inputStream, long length) throws SQLException;

    void preparedStatement_setNClob(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                    Reader reader, long length) throws SQLException;

    void preparedStatement_setSQLXML(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                     SQLXML xmlObject) throws SQLException;

    void preparedStatement_setObject(FilterChain chain, PreparedStatementProxy statement, int parameterIndex, Object x,
                                     int targetSqlType, int scaleOrLength) throws SQLException;

    void preparedStatement_setAsciiStream(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                          java.io.InputStream x, long length) throws SQLException;

    void preparedStatement_setBinaryStream(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                           java.io.InputStream x, long length) throws SQLException;

    void preparedStatement_setCharacterStream(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                              java.io.Reader reader, long length) throws SQLException;

    void preparedStatement_setAsciiStream(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                          java.io.InputStream x) throws SQLException;

    void preparedStatement_setBinaryStream(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                           java.io.InputStream x) throws SQLException;

    void preparedStatement_setCharacterStream(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                              java.io.Reader reader) throws SQLException;

    void preparedStatement_setNCharacterStream(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                               Reader value) throws SQLException;

    void preparedStatement_setClob(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                   Reader reader) throws SQLException;

    void preparedStatement_setBlob(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                   InputStream inputStream) throws SQLException;

    void preparedStatement_setNClob(FilterChain chain, PreparedStatementProxy statement, int parameterIndex,
                                    Reader reader) throws SQLException;

    // ///////////////////////////////////

    void callableStatement_registerOutParameter(FilterChain chain, CallableStatementProxy statement,
                                                int parameterIndex, int sqlType) throws SQLException;

    void callableStatement_registerOutParameter(FilterChain chain, CallableStatementProxy statement,
                                                int parameterIndex, int sqlType, int scale) throws SQLException;

    boolean callableStatement_wasNull(FilterChain chain, CallableStatementProxy statement) throws SQLException;

    String callableStatement_getString(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    boolean callableStatement_getBoolean(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    byte callableStatement_getByte(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    short callableStatement_getShort(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    int callableStatement_getInt(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    long callableStatement_getLong(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    float callableStatement_getFloat(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    double callableStatement_getDouble(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    BigDecimal callableStatement_getBigDecimal(FilterChain chain, CallableStatementProxy statement, int parameterIndex,
                                               int scale) throws SQLException;

    byte[] callableStatement_getBytes(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    java.sql.Date callableStatement_getDate(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    java.sql.Time callableStatement_getTime(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    java.sql.Timestamp callableStatement_getTimestamp(FilterChain chain, CallableStatementProxy statement,
                                                      int parameterIndex) throws SQLException;

    Object callableStatement_getObject(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    BigDecimal callableStatement_getBigDecimal(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    Object callableStatement_getObject(FilterChain chain, CallableStatementProxy statement, int parameterIndex,
                                       java.util.Map<String, Class<?>> map) throws SQLException;

    Ref callableStatement_getRef(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    Blob callableStatement_getBlob(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    Clob callableStatement_getClob(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    Array callableStatement_getArray(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    java.sql.Date callableStatement_getDate(FilterChain chain, CallableStatementProxy statement, int parameterIndex,
                                            Calendar cal) throws SQLException;

    java.sql.Time callableStatement_getTime(FilterChain chain, CallableStatementProxy statement, int parameterIndex,
                                            Calendar cal) throws SQLException;

    java.sql.Timestamp callableStatement_getTimestamp(FilterChain chain, CallableStatementProxy statement,
                                                      int parameterIndex, Calendar cal) throws SQLException;

    void callableStatement_registerOutParameter(FilterChain chain, CallableStatementProxy statement,
                                                int parameterIndex, int sqlType, String typeName) throws SQLException;

    void callableStatement_registerOutParameter(FilterChain chain, CallableStatementProxy statement,
                                                String parameterName, int sqlType) throws SQLException;

    void callableStatement_registerOutParameter(FilterChain chain, CallableStatementProxy statement,
                                                String parameterName, int sqlType, int scale) throws SQLException;

    void callableStatement_registerOutParameter(FilterChain chain, CallableStatementProxy statement,
                                                String parameterName, int sqlType, String typeName) throws SQLException;

    java.net.URL callableStatement_getURL(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    void callableStatement_setURL(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                  java.net.URL val) throws SQLException;

    void callableStatement_setNull(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                   int sqlType) throws SQLException;

    void callableStatement_setBoolean(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                      boolean x) throws SQLException;

    void callableStatement_setByte(FilterChain chain, CallableStatementProxy statement, String parameterName, byte x)
            throws SQLException;

    void callableStatement_setShort(FilterChain chain, CallableStatementProxy statement, String parameterName, short x)
            throws SQLException;

    void callableStatement_setInt(FilterChain chain, CallableStatementProxy statement, String parameterName, int x)
            throws SQLException;

    void callableStatement_setLong(FilterChain chain, CallableStatementProxy statement, String parameterName, long x)
            throws SQLException;

    void callableStatement_setFloat(FilterChain chain, CallableStatementProxy statement, String parameterName, float x)
            throws SQLException;

    void callableStatement_setDouble(FilterChain chain,
                                     CallableStatementProxy statement,
                                     String parameterName,
                                     double x)
            throws SQLException;

    void callableStatement_setBigDecimal(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                         BigDecimal x) throws SQLException;

    void callableStatement_setString(FilterChain chain,
                                     CallableStatementProxy statement,
                                     String parameterName,
                                     String x)
            throws SQLException;

    void callableStatement_setBytes(FilterChain chain, CallableStatementProxy statement, String parameterName, byte[] x)
            throws SQLException;

    void callableStatement_setDate(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                   java.sql.Date x) throws SQLException;

    void callableStatement_setTime(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                   java.sql.Time x) throws SQLException;

    void callableStatement_setTimestamp(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                        java.sql.Timestamp x) throws SQLException;

    void callableStatement_setAsciiStream(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                          java.io.InputStream x, int length) throws SQLException;

    void callableStatement_setBinaryStream(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                           java.io.InputStream x, int length) throws SQLException;

    void callableStatement_setObject(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                     Object x, int targetSqlType, int scale) throws SQLException;

    void callableStatement_setObject(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                     Object x, int targetSqlType) throws SQLException;

    void callableStatement_setObject(FilterChain chain,
                                     CallableStatementProxy statement,
                                     String parameterName,
                                     Object x)
            throws SQLException;

    void callableStatement_setCharacterStream(FilterChain chain, CallableStatementProxy statement,
                                              String parameterName, java.io.Reader reader, int length)
            throws SQLException;

    void callableStatement_setDate(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                   java.sql.Date x, Calendar cal) throws SQLException;

    void callableStatement_setTime(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                   java.sql.Time x, Calendar cal) throws SQLException;

    void callableStatement_setTimestamp(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                        java.sql.Timestamp x, Calendar cal) throws SQLException;

    void callableStatement_setNull(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                   int sqlType, String typeName) throws SQLException;

    String callableStatement_getString(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    boolean callableStatement_getBoolean(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    byte callableStatement_getByte(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    short callableStatement_getShort(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    int callableStatement_getInt(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    long callableStatement_getLong(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    float callableStatement_getFloat(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    double callableStatement_getDouble(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    byte[] callableStatement_getBytes(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    java.sql.Date callableStatement_getDate(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    java.sql.Time callableStatement_getTime(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    java.sql.Timestamp callableStatement_getTimestamp(FilterChain chain, CallableStatementProxy statement,
                                                      String parameterName) throws SQLException;

    Object callableStatement_getObject(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    BigDecimal callableStatement_getBigDecimal(FilterChain chain,
                                               CallableStatementProxy statement,
                                               String parameterName)
            throws SQLException;

    Object callableStatement_getObject(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                       java.util.Map<String, Class<?>> map) throws SQLException;

    Ref callableStatement_getRef(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    Blob callableStatement_getBlob(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    Clob callableStatement_getClob(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    Array callableStatement_getArray(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    java.sql.Date callableStatement_getDate(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                            Calendar cal) throws SQLException;

    java.sql.Time callableStatement_getTime(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                            Calendar cal) throws SQLException;

    java.sql.Timestamp callableStatement_getTimestamp(FilterChain chain, CallableStatementProxy statement,
                                                      String parameterName, Calendar cal) throws SQLException;

    java.net.URL callableStatement_getURL(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    RowId callableStatement_getRowId(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    RowId callableStatement_getRowId(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    void callableStatement_setRowId(FilterChain chain, CallableStatementProxy statement, String parameterName, RowId x)
            throws SQLException;

    void callableStatement_setNString(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                      String value) throws SQLException;

    void callableStatement_setNCharacterStream(FilterChain chain, CallableStatementProxy statement,
                                               String parameterName, Reader value, long length) throws SQLException;

    void callableStatement_setNClob(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                    NClob value) throws SQLException;

    void callableStatement_setClob(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                   Reader reader, long length) throws SQLException;

    void callableStatement_setBlob(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                   InputStream inputStream, long length) throws SQLException;

    void callableStatement_setNClob(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                    Reader reader, long length) throws SQLException;

    NClob callableStatement_getNClob(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    NClob callableStatement_getNClob(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    void callableStatement_setSQLXML(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                     SQLXML xmlObject) throws SQLException;

    SQLXML callableStatement_getSQLXML(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    SQLXML callableStatement_getSQLXML(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    String callableStatement_getNString(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
            throws SQLException;

    String callableStatement_getNString(FilterChain chain, CallableStatementProxy statement, String parameterName)
            throws SQLException;

    java.io.Reader callableStatement_getNCharacterStream(FilterChain chain, CallableStatementProxy statement,
                                                         int parameterIndex) throws SQLException;

    java.io.Reader callableStatement_getNCharacterStream(FilterChain chain, CallableStatementProxy statement,
                                                         String parameterName) throws SQLException;

    java.io.Reader callableStatement_getCharacterStream(FilterChain chain, CallableStatementProxy statement,
                                                        int parameterIndex) throws SQLException;

    java.io.Reader callableStatement_getCharacterStream(FilterChain chain, CallableStatementProxy statement,
                                                        String parameterName) throws SQLException;

    void callableStatement_setBlob(FilterChain chain, CallableStatementProxy statement, String parameterName, Blob x)
            throws SQLException;

    void callableStatement_setClob(FilterChain chain, CallableStatementProxy statement, String parameterName, Clob x)
            throws SQLException;

    void callableStatement_setAsciiStream(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                          java.io.InputStream x, long length) throws SQLException;

    void callableStatement_setBinaryStream(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                           java.io.InputStream x, long length) throws SQLException;

    void callableStatement_setCharacterStream(FilterChain chain, CallableStatementProxy statement,
                                              String parameterName, java.io.Reader reader, long length)
            throws SQLException;

    void callableStatement_setAsciiStream(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                          java.io.InputStream x) throws SQLException;

    void callableStatement_setBinaryStream(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                           java.io.InputStream x) throws SQLException;

    void callableStatement_setCharacterStream(FilterChain chain, CallableStatementProxy statement,
                                              String parameterName, java.io.Reader reader) throws SQLException;

    void callableStatement_setNCharacterStream(FilterChain chain, CallableStatementProxy statement,
                                               String parameterName, Reader value) throws SQLException;

    void callableStatement_setClob(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                   Reader reader) throws SQLException;

    void callableStatement_setBlob(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                   InputStream inputStream) throws SQLException;

    void callableStatement_setNClob(FilterChain chain, CallableStatementProxy statement, String parameterName,
                                    Reader reader) throws SQLException;

    <T> T unwrap(FilterChain chain, Wrapper wrapper, java.lang.Class<T> iface) throws java.sql.SQLException;

    boolean isWrapperFor(FilterChain chain, Wrapper wrapper, java.lang.Class<?> iface) throws java.sql.SQLException;

    void clob_free(FilterChain chain, ClobProxy wrapper) throws SQLException;

    InputStream clob_getAsciiStream(FilterChain chain, ClobProxy wrapper) throws SQLException;

    Reader clob_getCharacterStream(FilterChain chain, ClobProxy wrapper) throws SQLException;

    Reader clob_getCharacterStream(FilterChain chain, ClobProxy wrapper, long pos, long length) throws SQLException;

    String clob_getSubString(FilterChain chain, ClobProxy wrapper, long pos, int length) throws SQLException;

    long clob_length(FilterChain chain, ClobProxy wrapper) throws SQLException;

    long clob_position(FilterChain chain, ClobProxy wrapper, String searchstr, long start) throws SQLException;

    long clob_position(FilterChain chain, ClobProxy wrapper, Clob searchstr, long start) throws SQLException;

    OutputStream clob_setAsciiStream(FilterChain chain, ClobProxy wrapper, long pos) throws SQLException;

    Writer clob_setCharacterStream(FilterChain chain, ClobProxy wrapper, long pos) throws SQLException;

    int clob_setString(FilterChain chain, ClobProxy wrapper, long pos, String str) throws SQLException;

    int clob_setString(FilterChain chain, ClobProxy wrapper, long pos, String str, int offset, int len)
            throws SQLException;

    void clob_truncate(FilterChain chain, ClobProxy wrapper, long len) throws SQLException;

    void dataSource_releaseConnection(FilterChain chain, DruidPooledConnection connection) throws SQLException;

    DruidPooledConnection dataSource_getConnection(FilterChain chain, DruidDataSource dataSource, long maxWaitMillis)
            throws SQLException;

    // /////////////////
    int resultSetMetaData_getColumnCount(FilterChain chain, ResultSetMetaDataProxy metaData) throws SQLException;

    boolean resultSetMetaData_isAutoIncrement(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    boolean resultSetMetaData_isCaseSensitive(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    boolean resultSetMetaData_isSearchable(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    boolean resultSetMetaData_isCurrency(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    int resultSetMetaData_isNullable(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    boolean resultSetMetaData_isSigned(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    int resultSetMetaData_getColumnDisplaySize(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    String resultSetMetaData_getColumnLabel(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    String resultSetMetaData_getColumnName(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    String resultSetMetaData_getSchemaName(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    int resultSetMetaData_getPrecision(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    int resultSetMetaData_getScale(FilterChain chain, ResultSetMetaDataProxy metaData, int column) throws SQLException;

    String resultSetMetaData_getTableName(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    String resultSetMetaData_getCatalogName(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    int resultSetMetaData_getColumnType(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    String resultSetMetaData_getColumnTypeName(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    boolean resultSetMetaData_isReadOnly(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    boolean resultSetMetaData_isWritable(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    boolean resultSetMetaData_isDefinitelyWritable(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

    String resultSetMetaData_getColumnClassName(FilterChain chain, ResultSetMetaDataProxy metaData, int column)
            throws SQLException;

}
