Package org.apache.tomcat.jdbc.pool.interceptor

## 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:
    `java.lang.reflect.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 org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor

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

    - ### Fields inherited from class org.apache.tomcat.jdbc.pool.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

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `java.lang.Object` | `createStatement​(java.lang.Object proxy, java.lang.reflect.Method method, java.lang.Object[] args, java.lang.Object statement, long time)` | Creates a statement interceptor to monitor query response times
    `long` | `getThreshold()` | returns the query measure threshold.
    `protected abstract void` | `prepareCall​(java.lang.String query, long time)` | Invoked when prepareCall has been called and completed.
    `protected abstract void` | `prepareStatement​(java.lang.String sql, long time)` | Invoked when prepareStatement has been called and completed.
    `protected java.lang.String` | `reportFailedQuery​(java.lang.String query, java.lang.Object[] args, java.lang.String name, long start, java.lang.Throwable t)` | Invoked when a query execution, a call to execute/executeQuery or executeBatch failed.
    `protected java.lang.String` | `reportQuery​(java.lang.String query, java.lang.Object[] args, java.lang.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 java.lang.String` | `reportSlowQuery​(java.lang.String query, java.lang.Object[] args, java.lang.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 org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor

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

    - ### Methods inherited from class org.apache.tomcat.jdbc.pool.JdbcInterceptor

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

    - ### Methods inherited from class java.lang.Object

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

- - ### Field Detail

    - #### threshold

          protected long threshold

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

  - ### Constructor Detail

    - #### AbstractQueryReport

          public AbstractQueryReport()

  - ### Method Detail

    - #### prepareStatement

          protected abstract void prepareStatement​(java.lang.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​(java.lang.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 java.lang.String reportFailedQuery​(java.lang.String query,
                                                       java.lang.Object[] args,
                                                       java.lang.String name,
                                                       long start,
                                                       java.lang.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 java.lang.String reportQuery​(java.lang.String query,
                                                 java.lang.Object[] args,
                                                 java.lang.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 java.lang.String reportSlowQuery​(java.lang.String query,
                                                     java.lang.Object[] args,
                                                     java.lang.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 java.lang.Object createStatement​(java.lang.Object proxy,
                                                  java.lang.reflect.Method method,
                                                  java.lang.Object[] args,
                                                  java.lang.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