
com.tqdev.metrics.jdbc.InstrumentedStatement Maven / Gradle / Ivy
package com.tqdev.metrics.jdbc;
import com.tqdev.metrics.core.MetricRegistry;
import java.sql.*;
import java.util.LinkedList;
import java.util.List;
/**
* Instrumentation wrapper class for {@link Statement}.
*/
public class InstrumentedStatement extends InstrumentedSqlWrapper implements Statement {
private Statement statement;
private List batchStatements = new LinkedList<>();
InstrumentedStatement(Statement statement, MetricRegistry registry) {
super(registry);
this.statement = statement;
}
@Override
public ResultSet executeQuery(String sql) throws SQLException {
return timedExecute(sql, () -> statement.executeQuery(sql));
}
@Override
public int executeUpdate(String sql) throws SQLException {
return timedExecute(sql, () -> statement.executeUpdate(sql));
}
@Override
public boolean execute(String sql) throws SQLException {
return timedExecute(sql, () -> statement.execute(sql));
}
@Override
public int[] executeBatch() throws SQLException {
String key = String.join(" ___ ", batchStatements);
return timedExecute(key, statement::executeBatch);
}
@Override
public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException {
return timedExecute(sql, () -> statement.executeUpdate(sql, autoGeneratedKeys));
}
@Override
public int executeUpdate(String sql, int[] columnIndexes) throws SQLException {
return timedExecute(sql, () -> statement.executeUpdate(sql, columnIndexes));
}
@Override
public int executeUpdate(String sql, String[] columnNames) throws SQLException {
return timedExecute(sql, () -> statement.executeUpdate(sql, columnNames));
}
@Override
public boolean execute(String sql, int autoGeneratedKeys) throws SQLException {
return timedExecute(sql, () -> statement.execute(sql, autoGeneratedKeys));
}
@Override
public boolean execute(String sql, int[] columnIndexes) throws SQLException {
return timedExecute(sql, () -> statement.execute(sql, columnIndexes));
}
@Override
public boolean execute(String sql, String[] columnNames) throws SQLException {
return timedExecute(sql, () -> statement.execute(sql, columnNames));
}
// TODO
@Override
public long[] executeLargeBatch() throws SQLException {
String key = String.join(" ___ ", batchStatements);
return timedExecute(key, statement::executeLargeBatch);
}
@Override
public long executeLargeUpdate(String sql) throws SQLException {
return timedExecute(sql, () -> statement.executeLargeUpdate(sql));
}
@Override
public long executeLargeUpdate(String sql, int autoGeneratedKeys) throws SQLException {
return timedExecute(sql, () -> statement.executeLargeUpdate(sql, autoGeneratedKeys));
}
@Override
public long executeLargeUpdate(String sql, int[] columnIndexes) throws SQLException {
return timedExecute(sql, () -> statement.executeLargeUpdate(sql, columnIndexes));
}
@Override
public long executeLargeUpdate(String sql, String[] columnNames) throws SQLException {
return timedExecute(sql, () -> statement.executeLargeUpdate(sql, columnNames));
}
//
// Untimed methods
//
@Override
public void close() throws SQLException {
statement.close();
}
@Override
public int getMaxFieldSize() throws SQLException {
return statement.getMaxFieldSize();
}
@Override
public void setMaxFieldSize(int max) throws SQLException {
statement.setMaxFieldSize(max);
}
@Override
public int getMaxRows() throws SQLException {
return statement.getMaxRows();
}
@Override
public void setMaxRows(int max) throws SQLException {
statement.setMaxRows(max);
}
@Override
public void setEscapeProcessing(boolean enable) throws SQLException {
statement.setEscapeProcessing(enable);
}
@Override
public int getQueryTimeout() throws SQLException {
return statement.getQueryTimeout();
}
@Override
public void setQueryTimeout(int seconds) throws SQLException {
statement.setQueryTimeout(seconds);
}
@Override
public void cancel() throws SQLException {
statement.cancel();
}
@Override
public SQLWarning getWarnings() throws SQLException {
return statement.getWarnings();
}
@Override
public void clearWarnings() throws SQLException {
statement.clearWarnings();
}
@Override
public void setCursorName(String name) throws SQLException {
statement.setCursorName(name);
}
@Override
public ResultSet getResultSet() throws SQLException {
return statement.getResultSet();
}
@Override
public int getUpdateCount() throws SQLException {
return statement.getUpdateCount();
}
@Override
public boolean getMoreResults() throws SQLException {
return statement.getMoreResults();
}
@Override
public void setFetchDirection(int direction) throws SQLException {
statement.setFetchDirection(direction);
}
@Override
public int getFetchDirection() throws SQLException {
return statement.getFetchDirection();
}
@Override
public void setFetchSize(int rows) throws SQLException {
statement.setFetchSize(rows);
}
@Override
public int getFetchSize() throws SQLException {
return statement.getFetchSize();
}
@Override
public int getResultSetConcurrency() throws SQLException {
return statement.getResultSetConcurrency();
}
@Override
public int getResultSetType() throws SQLException {
return statement.getResultSetType();
}
@Override
public void addBatch(String sql) throws SQLException {
statement.addBatch(sql);
this.batchStatements.add(sql);
}
@Override
public void clearBatch() throws SQLException {
statement.clearBatch();
this.batchStatements.clear();
}
@Override
public Connection getConnection() throws SQLException {
return statement.getConnection();
}
@Override
public boolean getMoreResults(int current) throws SQLException {
return statement.getMoreResults(current);
}
@Override
public ResultSet getGeneratedKeys() throws SQLException {
return statement.getGeneratedKeys();
}
@Override
public int getResultSetHoldability() throws SQLException {
return statement.getResultSetHoldability();
}
@Override
public boolean isClosed() throws SQLException {
return statement.isClosed();
}
@Override
public void setPoolable(boolean poolable) throws SQLException {
statement.setPoolable(poolable);
}
@Override
public boolean isPoolable() throws SQLException {
return statement.isPoolable();
}
@Override
public void closeOnCompletion() throws SQLException {
statement.closeOnCompletion();
}
@Override
public boolean isCloseOnCompletion() throws SQLException {
return statement.isCloseOnCompletion();
}
@Override
public long getLargeUpdateCount() throws SQLException {
return statement.getLargeUpdateCount();
}
@Override
public void setLargeMaxRows(long max) throws SQLException {
statement.setLargeMaxRows(max);
}
@Override
public long getLargeMaxRows() throws SQLException {
return statement.getLargeMaxRows();
}
@Override
public T unwrap(Class iface) throws SQLException {
return statement.unwrap(iface);
}
@Override
public boolean isWrapperFor(Class> iface) throws SQLException {
return statement.isWrapperFor(iface);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy