# Class AbstractQueryReport

java.lang.Object
org.apache.tomcat.jdbc.pool.JdbcInterceptor
org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor
org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport

All Implemented Interfaces:
  `InvocationHandler`

Direct Known Subclasses:
  `ResetAbandonedTimer, SlowQueryReport`

public abstract class AbstractQueryReport extends AbstractCreateStatementInterceptor
Abstract class that wraps statements and intercepts query executions.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `protected class`
  `AbstractQueryReport.StatementProxy`
  Class to measure query execute time

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected long`
  `threshold`
  The threshold in milliseconds.

  ### Fields inherited from class AbstractCreateStatementInterceptor

  `constructors, CREATE_STATEMENT, CREATE_STATEMENT_IDX, EXECUTE, EXECUTE_BATCH, EXECUTE_QUERY, EXECUTE_TYPES, EXECUTE_UPDATE, GET_GENERATED_KEYS, GET_RESULTSET, GET_STATEMENT, PREPARE_CALL, PREPARE_CALL_IDX, PREPARE_STATEMENT, PREPARE_STATEMENT_IDX, RESULTSET_IDX, STATEMENT_TYPE_COUNT, STATEMENT_TYPES`

  ### Fields inherited from class JdbcInterceptor

  `CLOSE_VAL, EQUALS_VAL, GETCONNECTION_VAL, HASHCODE_VAL, ISCLOSED_VAL, ISVALID_VAL, ISWRAPPERFOR_VAL, properties, TOSTRING_VAL, UNWRAP_VAL`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `AbstractQueryReport()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Object`
  `createStatement(Object proxy, Method method, Object[] args, Object statement, long time)`
  Creates a statement interceptor to monitor query response times
  `long`
  `getThreshold()`
  returns the query measure threshold.
  `protected abstract void`
  `prepareCall(String query, long time)`
  Invoked when prepareCall has been called and completed.
  `protected abstract void`
  `prepareStatement(String sql, long time)`
  Invoked when prepareStatement has been called and completed.
  `protected String`
  `reportFailedQuery(String query, Object[] args, String name, long start, Throwable t)`
  Invoked when a query execution, a call to execute/executeQuery or executeBatch failed.
  `protected String`
  `reportQuery(String query, Object[] args, String name, long start, long delta)`
  Invoked when a query execution, a call to execute/executeQuery or executeBatch succeeded and was within the timing threshold
  `protected String`
  `reportSlowQuery(String query, Object[] args, String name, long start, long delta)`
  Invoked when a query execution, a call to execute/executeQuery or executeBatch succeeded and was exceeded the timing threshold
  `void`
  `setThreshold(long threshold)`
  Sets the query measurement threshold.

  ### Methods inherited from class AbstractCreateStatementInterceptor

  `closeInvoked, getConstructor, invoke, isExecute, isStatement, process, reset`

  ### Methods inherited from class JdbcInterceptor

  `compare, compare, disconnected, getNext, getProperties, isUseEquals, poolClosed, poolStarted, setNext, setProperties, setUseEquals`

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### threshold

    protected long threshold
    The threshold in milliseconds. If the query is faster than this, we don't measure it

- ## Constructor Details

  - ### AbstractQueryReport

    public AbstractQueryReport()

- ## Method Details

  - ### prepareStatement

    protected abstract void prepareStatement(String sql, long time)
    Invoked when prepareStatement has been called and completed.
    Parameters:
      `sql` - - the string used to prepare the statement with
      `time` - - the time it took to invoke prepare

  - ### prepareCall

    protected abstract void prepareCall(String query, long time)
    Invoked when prepareCall has been called and completed.
    Parameters:
      `query` - - the string used to prepare the statement with
      `time` - - the time it took to invoke prepare

  - ### reportFailedQuery

    protected String reportFailedQuery(String query, Object[] args, String name, long start, Throwable t)
    Invoked when a query execution, a call to execute/executeQuery or executeBatch failed.
    Parameters:
      `query` - the query that was executed and failed
      `args` - the arguments to the execution
      `name` - the name of the method used to execute `AbstractCreateStatementInterceptor.isExecute(Method, boolean)`
      `start` - the time the query execution started
      `t` - the exception that happened
    Returns:
      - the SQL that was executed or the string "batch" if it was a batch execution

  - ### reportQuery

    protected String reportQuery(String query, Object[] args, String name, long start, long delta)
    Invoked when a query execution, a call to execute/executeQuery or executeBatch succeeded and was within the timing threshold
    Parameters:
      `query` - the query that was executed and failed
      `args` - the arguments to the execution
      `name` - the name of the method used to execute `AbstractCreateStatementInterceptor.isExecute(Method, boolean)`
      `start` - the time the query execution started
      `delta` - the time the execution took
    Returns:
      - the SQL that was executed or the string "batch" if it was a batch execution

  - ### reportSlowQuery

    protected String reportSlowQuery(String query, Object[] args, String name, long start, long delta)
    Invoked when a query execution, a call to execute/executeQuery or executeBatch succeeded and was exceeded the timing threshold
    Parameters:
      `query` - the query that was executed and failed
      `args` - the arguments to the execution
      `name` - the name of the method used to execute `AbstractCreateStatementInterceptor.isExecute(Method, boolean)`
      `start` - the time the query execution started
      `delta` - the time the execution took
    Returns:
      - the SQL that was executed or the string "batch" if it was a batch execution

  - ### getThreshold

    public long getThreshold()
    returns the query measure threshold. This value is in milliseconds. If the query is faster than this threshold than it won't be accounted for
    Returns:
      the threshold in milliseconds

  - ### setThreshold

    public void setThreshold(long threshold)
    Sets the query measurement threshold. The value is in milliseconds. If the query goes faster than this threshold it will not be recorded.
    Parameters:
      `threshold` - set to -1 to record every query. Value is in milliseconds.

  - ### createStatement

    public Object createStatement(Object proxy, Method method, Object[] args, Object statement, long time)
    Creates a statement interceptor to monitor query response times
    Specified by:
      `createStatement` in class `AbstractCreateStatementInterceptor`
    Parameters:
      `proxy` - the actual proxy object
      `method` - the method that was called. It will be one of the methods defined in `AbstractCreateStatementInterceptor.STATEMENT_TYPES`
      `args` - the arguments to the method
      `statement` - the statement that the underlying connection created
      `time` - Elapsed time
    Returns:
      a `Statement` object