
com.tqdev.metrics.jdbc.InstrumentedStatement Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of metrics-jdbc Show documentation
Show all versions of metrics-jdbc Show documentation
Instrumentation of statement execution in JDBC connected databases.
The newest version!
/* Copyright (C) 2017 Maurits van der Schee
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.tqdev.metrics.jdbc;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.List;
import com.tqdev.metrics.core.MetricRegistry;
/**
* Instrumentation wrapper class for {@link Statement}.
*/
public class InstrumentedStatement extends InstrumentedSqlWrapper implements Statement {
/** The wrapped statement. */
private Statement statement;
/** The batch statements. */
protected List batchStatements = new LinkedList<>();
/**
* Instantiates a new instrumented statement.
*
* @param statement
* the statement
* @param registry
* the registry
*/
InstrumentedStatement(Statement statement, MetricRegistry registry) {
super(registry);
this.statement = statement;
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#executeQuery(java.lang.String)
*/
@Override
public ResultSet executeQuery(String sql) throws SQLException {
return timedExecute(sql, () -> statement.executeQuery(sql));
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#executeUpdate(java.lang.String)
*/
@Override
public int executeUpdate(String sql) throws SQLException {
return timedExecute(sql, () -> statement.executeUpdate(sql));
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#execute(java.lang.String)
*/
@Override
public boolean execute(String sql) throws SQLException {
return timedExecute(sql, () -> statement.execute(sql));
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#executeBatch()
*/
@Override
public int[] executeBatch() throws SQLException {
String key = String.join(" ___ ", batchStatements);
return timedExecute(key, statement::executeBatch);
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#executeUpdate(java.lang.String, int)
*/
@Override
public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException {
return timedExecute(sql, () -> statement.executeUpdate(sql, autoGeneratedKeys));
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#executeUpdate(java.lang.String, int[])
*/
@Override
public int executeUpdate(String sql, int[] columnIndexes) throws SQLException {
return timedExecute(sql, () -> statement.executeUpdate(sql, columnIndexes));
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#executeUpdate(java.lang.String,
* java.lang.String[])
*/
@Override
public int executeUpdate(String sql, String[] columnNames) throws SQLException {
return timedExecute(sql, () -> statement.executeUpdate(sql, columnNames));
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#execute(java.lang.String, int)
*/
@Override
public boolean execute(String sql, int autoGeneratedKeys) throws SQLException {
return timedExecute(sql, () -> statement.execute(sql, autoGeneratedKeys));
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#execute(java.lang.String, int[])
*/
@Override
public boolean execute(String sql, int[] columnIndexes) throws SQLException {
return timedExecute(sql, () -> statement.execute(sql, columnIndexes));
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#execute(java.lang.String, java.lang.String[])
*/
@Override
public boolean execute(String sql, String[] columnNames) throws SQLException {
return timedExecute(sql, () -> statement.execute(sql, columnNames));
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#executeLargeBatch()
*/
// TODO
@Override
public long[] executeLargeBatch() throws SQLException {
String key = String.join(" ___ ", batchStatements);
return timedExecute(key, statement::executeLargeBatch);
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#executeLargeUpdate(java.lang.String)
*/
@Override
public long executeLargeUpdate(String sql) throws SQLException {
return timedExecute(sql, () -> statement.executeLargeUpdate(sql));
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#executeLargeUpdate(java.lang.String, int)
*/
@Override
public long executeLargeUpdate(String sql, int autoGeneratedKeys) throws SQLException {
return timedExecute(sql, () -> statement.executeLargeUpdate(sql, autoGeneratedKeys));
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#executeLargeUpdate(java.lang.String, int[])
*/
@Override
public long executeLargeUpdate(String sql, int[] columnIndexes) throws SQLException {
return timedExecute(sql, () -> statement.executeLargeUpdate(sql, columnIndexes));
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#executeLargeUpdate(java.lang.String,
* java.lang.String[])
*/
@Override
public long executeLargeUpdate(String sql, String[] columnNames) throws SQLException {
return timedExecute(sql, () -> statement.executeLargeUpdate(sql, columnNames));
}
//
// Untimed methods
//
/*
* (non-Javadoc)
*
* @see java.sql.Statement#close()
*/
@Override
public void close() throws SQLException {
statement.close();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getMaxFieldSize()
*/
@Override
public int getMaxFieldSize() throws SQLException {
return statement.getMaxFieldSize();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#setMaxFieldSize(int)
*/
@Override
public void setMaxFieldSize(int max) throws SQLException {
statement.setMaxFieldSize(max);
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getMaxRows()
*/
@Override
public int getMaxRows() throws SQLException {
return statement.getMaxRows();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#setMaxRows(int)
*/
@Override
public void setMaxRows(int max) throws SQLException {
statement.setMaxRows(max);
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#setEscapeProcessing(boolean)
*/
@Override
public void setEscapeProcessing(boolean enable) throws SQLException {
statement.setEscapeProcessing(enable);
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getQueryTimeout()
*/
@Override
public int getQueryTimeout() throws SQLException {
return statement.getQueryTimeout();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#setQueryTimeout(int)
*/
@Override
public void setQueryTimeout(int seconds) throws SQLException {
statement.setQueryTimeout(seconds);
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#cancel()
*/
@Override
public void cancel() throws SQLException {
statement.cancel();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getWarnings()
*/
@Override
public SQLWarning getWarnings() throws SQLException {
return statement.getWarnings();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#clearWarnings()
*/
@Override
public void clearWarnings() throws SQLException {
statement.clearWarnings();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#setCursorName(java.lang.String)
*/
@Override
public void setCursorName(String name) throws SQLException {
statement.setCursorName(name);
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getResultSet()
*/
@Override
public ResultSet getResultSet() throws SQLException {
return statement.getResultSet();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getUpdateCount()
*/
@Override
public int getUpdateCount() throws SQLException {
return statement.getUpdateCount();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getMoreResults()
*/
@Override
public boolean getMoreResults() throws SQLException {
return statement.getMoreResults();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#setFetchDirection(int)
*/
@Override
public void setFetchDirection(int direction) throws SQLException {
statement.setFetchDirection(direction);
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getFetchDirection()
*/
@Override
public int getFetchDirection() throws SQLException {
return statement.getFetchDirection();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#setFetchSize(int)
*/
@Override
public void setFetchSize(int rows) throws SQLException {
statement.setFetchSize(rows);
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getFetchSize()
*/
@Override
public int getFetchSize() throws SQLException {
return statement.getFetchSize();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getResultSetConcurrency()
*/
@Override
public int getResultSetConcurrency() throws SQLException {
return statement.getResultSetConcurrency();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getResultSetType()
*/
@Override
public int getResultSetType() throws SQLException {
return statement.getResultSetType();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#addBatch(java.lang.String)
*/
@Override
public void addBatch(String sql) throws SQLException {
statement.addBatch(sql);
this.batchStatements.add(sql);
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#clearBatch()
*/
@Override
public void clearBatch() throws SQLException {
statement.clearBatch();
this.batchStatements.clear();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getConnection()
*/
@Override
public Connection getConnection() throws SQLException {
return statement.getConnection();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getMoreResults(int)
*/
@Override
public boolean getMoreResults(int current) throws SQLException {
return statement.getMoreResults(current);
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getGeneratedKeys()
*/
@Override
public ResultSet getGeneratedKeys() throws SQLException {
return statement.getGeneratedKeys();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getResultSetHoldability()
*/
@Override
public int getResultSetHoldability() throws SQLException {
return statement.getResultSetHoldability();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#isClosed()
*/
@Override
public boolean isClosed() throws SQLException {
return statement.isClosed();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#setPoolable(boolean)
*/
@Override
public void setPoolable(boolean poolable) throws SQLException {
statement.setPoolable(poolable);
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#isPoolable()
*/
@Override
public boolean isPoolable() throws SQLException {
return statement.isPoolable();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#closeOnCompletion()
*/
@Override
public void closeOnCompletion() throws SQLException {
statement.closeOnCompletion();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#isCloseOnCompletion()
*/
@Override
public boolean isCloseOnCompletion() throws SQLException {
return statement.isCloseOnCompletion();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getLargeUpdateCount()
*/
@Override
public long getLargeUpdateCount() throws SQLException {
return statement.getLargeUpdateCount();
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#setLargeMaxRows(long)
*/
@Override
public void setLargeMaxRows(long max) throws SQLException {
statement.setLargeMaxRows(max);
}
/*
* (non-Javadoc)
*
* @see java.sql.Statement#getLargeMaxRows()
*/
@Override
public long getLargeMaxRows() throws SQLException {
return statement.getLargeMaxRows();
}
/*
* (non-Javadoc)
*
* @see java.sql.Wrapper#unwrap(java.lang.Class)
*/
@Override
public T unwrap(Class iface) throws SQLException {
return statement.unwrap(iface);
}
/*
* (non-Javadoc)
*
* @see java.sql.Wrapper#isWrapperFor(java.lang.Class)
*/
@Override
public boolean isWrapperFor(Class> iface) throws SQLException {
return statement.isWrapperFor(iface);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy