Top Description Fields Constructors Methods
com.mysql.cj

public Class NoSubInterceptorWrapper

extends Object
implements QueryInterceptor
Class Inheritance
All Implemented Interfaces
com.mysql.cj.interceptors.QueryInterceptor
Imports
java.util.Properties, java.util.function.Supplier, com.mysql.cj.interceptors.QueryInterceptor, com.mysql.cj.log.Log, com.mysql.cj.protocol.Message, .Resultset, .ServerSession

Wraps query interceptors during driver startup so that they don't produce different result sets than we expect.

Field Summary

Modifier and TypeField and Description
private final QueryInterceptor

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public void
destroy()

Implements com.mysql.cj.interceptors.QueryInterceptor.destroy.

Called by the driver when this extension should release any resources it is holding and cleanup internally before the connection is closed.

public boolean
executeTopLevelOnly()

Implements com.mysql.cj.interceptors.QueryInterceptor.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?

public QueryInterceptor
public QueryInterceptor
init(MysqlConnection
the connection for which this interceptor is being created
conn
,
Properties
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.
props
,
Log
logger
log
)

Implements com.mysql.cj.interceptors.QueryInterceptor.init.

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().

public <T extends Resultset> T
postProcess(Supplier<String>
the Supplier for SQL representation of the query
sql
,
Query
the actual Query instance being intercepted
interceptedQuery
,
T
a Resultset created from query execution
originalResultSet
,
ServerSession
ServerSession object after the query execution
serverSession
)

Implements com.mysql.cj.interceptors.QueryInterceptor.postProcess.

Called after the given query has been sent to the server for processing.

public <M extends Message> M
postProcess(M
query Message
queryPacket
,
M
response Message
originalResponsePacket
)

Overrides default com.mysql.cj.interceptors.QueryInterceptor.postProcess.

Called after the given query packet has been sent to the server for processing.

public <T extends Resultset> T
preProcess(Supplier<String>
the Supplier for SQL representation of the query
sql
,
Query
the actual Query instance being intercepted
interceptedQuery
)

Implements com.mysql.cj.interceptors.QueryInterceptor.preProcess.

Called before the given query is going to be sent to the server for processing.

public <M extends Message> M
preProcess(M
original Message
queryPacket
)

Overrides default com.mysql.cj.interceptors.QueryInterceptor.preProcess.

Called before the given query packet is going to be sent to the server for processing.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

underlyingInterceptorback to summary
private final QueryInterceptor underlyingInterceptor

Constructor Detail

NoSubInterceptorWrapperback to summary
public NoSubInterceptorWrapper(QueryInterceptor underlyingInterceptor)

Method Detail

destroyback to summary
public void destroy()

Implements com.mysql.cj.interceptors.QueryInterceptor.destroy.

Doc from com.mysql.cj.interceptors.QueryInterceptor.destroy.

Called by the driver when this extension should release any resources it is holding and cleanup internally before the connection is closed.

Annotations
@Override
executeTopLevelOnlyback to summary
public boolean executeTopLevelOnly()

Implements com.mysql.cj.interceptors.QueryInterceptor.executeTopLevelOnly.

Doc from com.mysql.cj.interceptors.QueryInterceptor.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.

Returns:boolean

true if the driver should ensure that this interceptor is only executed for the top-level "original" query.

Annotations
@Override
getUnderlyingInterceptorback to summary
public QueryInterceptor getUnderlyingInterceptor()
initback to summary
public QueryInterceptor init(MysqlConnection conn, Properties props, Log log)

Implements com.mysql.cj.interceptors.QueryInterceptor.init.

Doc from com.mysql.cj.interceptors.QueryInterceptor.init.

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().

Parameters
conn:MysqlConnection

the connection for which this interceptor is being created

props:Properties

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:Log

logger

Returns:QueryInterceptor

QueryInterceptor

Annotations
@Override
postProcessback to summary
public <T extends Resultset> T postProcess(Supplier<String> sql, Query interceptedQuery, T originalResultSet, ServerSession serverSession)

Implements com.mysql.cj.interceptors.QueryInterceptor.postProcess.

Doc from com.mysql.cj.interceptors.QueryInterceptor.postProcess.

Called after the given query has been sent to the server for processing. Interceptors are free to inspect the "original" result set, and if a different result set is returned by the interceptor, it is used in place of the "original" result set. This method will be called while the connection-level mutex is held, so it will only be called from one thread at a time.

Parameters
<T>
Resultset object
sql:Supplier<String>

the Supplier for SQL representation of the query

interceptedQuery:Query

the actual Query instance being intercepted

originalResultSet:T

a Resultset created from query execution

serverSession:ServerSession

ServerSession object after the query execution

Returns:T

a Resultset that should be returned to the application instead of results that are created from actual execution of the intercepted query.

Annotations
@Override
postProcessback to summary
public <M extends Message> M postProcess(M queryPacket, M originalResponsePacket)

Overrides default com.mysql.cj.interceptors.QueryInterceptor.postProcess.

Doc from com.mysql.cj.interceptors.QueryInterceptor.postProcess.

Called after the given query packet has been sent to the server for processing. Interceptors are free to return either a different PacketPayload than the originalResponsePacket or null. This method will be called while the connection-level mutex is held, so it will only be called from one thread at a time.

Parameters
<M>
Message object
queryPacket:M

query Message

originalResponsePacket:M

response Message

Returns:M

Message

Annotations
@Override
preProcessback to summary
public <T extends Resultset> T preProcess(Supplier<String> sql, Query interceptedQuery)

Implements com.mysql.cj.interceptors.QueryInterceptor.preProcess.

Doc from com.mysql.cj.interceptors.QueryInterceptor.preProcess.

Called before the given query is going to be sent to the server for processing. Interceptors are free to return a result set (which must implement the interface Resultset), 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.

Parameters
<T>
Resultset object
sql:Supplier<String>

the Supplier for SQL representation of the query

interceptedQuery:Query

the actual Query instance being intercepted

Returns:T

a Resultset that should be returned to the application instead of results that are created from actual execution of the intercepted query.

Annotations
@Override
preProcessback to summary
public <M extends Message> M preProcess(M queryPacket)

Overrides default com.mysql.cj.interceptors.QueryInterceptor.preProcess.

Doc from com.mysql.cj.interceptors.QueryInterceptor.preProcess.

Called before the given query packet is going to be sent to the server for processing. Interceptors are free to return a PacketPayload, and if so, the server will not execute the query, and the given PacketPayload 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.

Parameters
<M>
Message object
queryPacket:M

original Message

Returns:M

processed Message

Annotations
@Override