public class ResultSetScannerInterceptor extends java.lang.Object implements QueryInterceptor
| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
PNAME_resultSetScannerRegex |
protected java.util.regex.Pattern |
regexP |
| Constructor and Description |
|---|
ResultSetScannerInterceptor() |
| Modifier and Type | Method and Description |
|---|---|
void |
destroy()
Called by the driver when this extension should release any resources
it is holding and cleanup internally before the connection is
closed.
|
boolean |
executeTopLevelOnly()
Should the driver execute this interceptor only for the
"original" top-level query, and not put it in the execution
path for queries that may be executed from other interceptors?
If an interceptor issues queries using the connection it was created for,
and does not return
true for this method, it must ensure
that it does not cause infinite recursion. |
QueryInterceptor |
init(MysqlConnection conn,
java.util.Properties props,
Log log)
Called once per connection that wants to use the interceptor
The properties are the same ones passed in in the URL or arguments to
Driver.connect() or DriverManager.getConnection().
|
<T extends Resultset> |
postProcess(java.util.function.Supplier<java.lang.String> sql,
Query interceptedQuery,
T originalResultSet,
ServerSession serverSession)
Called after the given query has been sent to the server for processing.
|
<T extends Resultset> |
preProcess(java.util.function.Supplier<java.lang.String> sql,
Query interceptedQuery)
Called before the given query is going to be sent to the server for processing.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpostProcess, preProcesspublic static final java.lang.String PNAME_resultSetScannerRegex
protected java.util.regex.Pattern regexP
public QueryInterceptor init(MysqlConnection conn, java.util.Properties props, Log log)
QueryInterceptorinit in interface QueryInterceptorconn - the connection for which this interceptor is being createdprops - configuration values as passed to the connection. Note that
in order to support javax.sql.DataSources, configuration properties specific
to an interceptor must be passed via setURL() on the
DataSource. QueryInterceptor properties are not exposed via
accessor/mutator methods on DataSources.log - loggerQueryInterceptorpublic <T extends Resultset> T postProcess(java.util.function.Supplier<java.lang.String> sql, Query interceptedQuery, T originalResultSet, ServerSession serverSession)
QueryInterceptorpostProcess in interface QueryInterceptorT - Resultset objectsql - the Supplier for SQL representation of the queryinterceptedQuery - the actual Query instance being interceptedoriginalResultSet - a Resultset created from query executionserverSession - ServerSession object after the query executionResultset that should be returned to the application instead
of results that are created from actual execution of the intercepted
query.public <T extends Resultset> T preProcess(java.util.function.Supplier<java.lang.String> sql, Query interceptedQuery)
QueryInterceptorResultset), and if so,
the server will not execute the query, and the given result set will be
returned to the application instead.
This method will be called while the connection-level mutex is held, so
it will only be called from one thread at a time.preProcess in interface QueryInterceptorT - Resultset objectsql - the Supplier for SQL representation of the queryinterceptedQuery - the actual Query instance being interceptedResultset that should be returned to the application instead
of results that are created from actual execution of the intercepted
query.public boolean executeTopLevelOnly()
QueryInterceptortrue for this method, it must ensure
that it does not cause infinite recursion.executeTopLevelOnly in interface QueryInterceptorpublic void destroy()
QueryInterceptordestroy in interface QueryInterceptor