| Bug #51666 | StatementInterceptors don't bypass original statement | ||
|---|---|---|---|
| Submitted: | 2 Mar 2010 23:42 | Modified: | 3 Mar 2010 14:21 |
| Reporter: | Todd Farmer (OCA) | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | Connector / J | Severity: | S3 (Non-critical) |
| Version: | 5.1.12 | OS: | Any |
| Assigned to: | Mark Matthews | CPU Architecture: | Any |
[2 Mar 2010 23:42]
Todd Farmer
[3 Mar 2010 0:48]
Todd Farmer
Test case:
public void testBug51666() throws Exception {
Connection testConn = getConnectionWithProps(
"statementInterceptors=" + IncrementStatementCountInterceptor.class.getName());
createTable("testStatementInterceptorCount", "(field1 int)");
this.stmt.executeUpdate("INSERT INTO testStatementInterceptorCount VALUES (0)");
ResultSet rs = testConn.createStatement().executeQuery("SHOW SESSION STATUS LIKE 'Com_select'" );
rs.next();
int s = rs.getInt(2);
testConn.createStatement().executeQuery("SELECT 1");
rs = testConn.createStatement().executeQuery("SHOW SESSION STATUS LIKE 'Com_select'" );
rs.next();
assertEquals(s+ 1, rs.getInt(2));
}
public static class IncrementStatementCountInterceptor implements StatementInterceptorV2{
public void destroy() {}
public boolean executeTopLevelOnly() {
return false;
}
public void init(com.mysql.jdbc.Connection conn, Properties props)
throws SQLException {}
public ResultSetInternalMethods postProcess(String sql,
com.mysql.jdbc.Statement interceptedStatement,
ResultSetInternalMethods originalResultSet,
com.mysql.jdbc.Connection connection, int warningCount,
boolean noIndexUsed, boolean noGoodIndexUsed,
SQLException statementException) throws SQLException {
return null;
}
public ResultSetInternalMethods preProcess(String sql,
com.mysql.jdbc.Statement interceptedStatement,
com.mysql.jdbc.Connection conn) throws SQLException {
java.sql.Statement test = conn.createStatement();
if(sql.equals("SELECT 1")){
return (ResultSetInternalMethods) test.executeQuery("/* execute this, not the original */ SELECT 1");
}
return null;
}
}
[3 Mar 2010 0:51]
Todd Farmer
Verified fix by Mark Matthews in r909 using test case. Pushed test case and CHANGES updates in r910.
[3 Mar 2010 14:21]
Tony Bedford
An entry has been added to the 5.1.13 changelog: When a StatementInterceptor was used and an alternate ResultSet was returned from preProcess(), the original statement was still executed.
