This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 9.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 6cef465571cb898684e182e7a184f24d3797342b Author: Mark Thomas <ma...@apache.org> AuthorDate: Tue Jul 23 10:21:40 2024 +0100 Follow-up to BZ 69206 fix. Change log entry and code clean-up. --- .../apache/tomcat/jdbc/pool/StatementFacade.java | 56 ++++++----- .../AbstractCreateStatementInterceptor.java | 86 +++++++++-------- .../tomcat/jdbc/test/ProxiedResultSetTest.java | 103 ++++++++++----------- .../tomcat/jdbc/test/ProxiedStatementTest.java | 20 ++-- .../apache/tomcat/jdbc/test/driver/ResultSet.java | 2 - .../apache/tomcat/jdbc/test/driver/Statement.java | 5 - webapps/docs/changelog.xml | 11 +++ 7 files changed, 145 insertions(+), 138 deletions(-) diff --git a/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/StatementFacade.java b/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/StatementFacade.java index e30f7d91ec..e9cae3a734 100644 --- a/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/StatementFacade.java +++ b/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/StatementFacade.java @@ -60,16 +60,16 @@ public class StatementFacade extends AbstractCreateStatementInterceptor { } else if (compare(PREPARE_STATEMENT, name)) { // prepareStatement constructor = getConstructor(PREPARE_STATEMENT_IDX, PreparedStatement.class); - sql = (String)args[0]; + sql = (String) args[0]; } else if (compare(PREPARE_CALL, name)) { // prepareCall constructor = getConstructor(PREPARE_CALL_IDX, CallableStatement.class); - sql = (String)args[0]; + sql = (String) args[0]; } else { // do nothing return statement; } - return constructor.newInstance(new Object[] { new StatementProxy(statement,sql) }); + return constructor.newInstance(new Object[] { new StatementProxy(statement, sql) }); } catch (Exception x) { logger.warn("Unable to create statement proxy.", x); } @@ -83,6 +83,7 @@ public class StatementFacade extends AbstractCreateStatementInterceptor { protected boolean closed = false; protected Object delegate; protected final String query; + public StatementProxy(Object parent, String query) { this.delegate = parent; this.query = query; @@ -90,47 +91,49 @@ public class StatementFacade extends AbstractCreateStatementInterceptor { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - if (compare(TOSTRING_VAL,method)) { + if (compare(TOSTRING_VAL, method)) { return toString(); } if (compare(EQUALS_VAL, method)) { if (args[0] == null || !Proxy.isProxyClass(args[0].getClass())) { return Boolean.FALSE; } - return Boolean.valueOf( - this.equals(Proxy.getInvocationHandler(args[0]))); + return Boolean.valueOf(this.equals(Proxy.getInvocationHandler(args[0]))); } if (compare(HASHCODE_VAL, method)) { return Integer.valueOf(this.hashCode()); } if (compare(CLOSE_VAL, method)) { if (delegate == null) { - return null; + return null; } } if (compare(ISCLOSED_VAL, method)) { if (delegate == null) { - return Boolean.TRUE; + return Boolean.TRUE; } } if (delegate == null) { - throw new SQLException("Statement closed."); + throw new SQLException("Statement closed."); } if (compare(GET_RESULTSET, method)) { - return getConstructor(RESULTSET_IDX, ResultSet.class).newInstance(new ResultSetProxy(method.invoke(delegate,args), proxy)); + return getConstructor(RESULTSET_IDX, ResultSet.class) + .newInstance(new ResultSetProxy(method.invoke(delegate, args), proxy)); } if (compare(GET_GENERATED_KEYS, method)) { - return getConstructor(RESULTSET_IDX, ResultSet.class).newInstance(new ResultSetProxy(method.invoke(delegate,args), proxy)); + return getConstructor(RESULTSET_IDX, ResultSet.class) + .newInstance(new ResultSetProxy(method.invoke(delegate, args), proxy)); } if (compare(EXECUTE_QUERY, method)) { - return getConstructor(RESULTSET_IDX, ResultSet.class).newInstance(new ResultSetProxy(method.invoke(delegate,args), proxy)); + return getConstructor(RESULTSET_IDX, ResultSet.class) + .newInstance(new ResultSetProxy(method.invoke(delegate, args), proxy)); } - Object result = null; + Object result = null; try { - //invoke next - result = method.invoke(delegate,args); + // invoke next + result = method.invoke(delegate, args); } catch (Throwable t) { if (t instanceof InvocationTargetException && t.getCause() != null) { throw t.getCause(); @@ -138,7 +141,7 @@ public class StatementFacade extends AbstractCreateStatementInterceptor { throw t; } } - //perform close cleanup + // perform close cleanup if (compare(CLOSE_VAL, method)) { delegate = null; } @@ -152,7 +155,7 @@ public class StatementFacade extends AbstractCreateStatementInterceptor { @Override public boolean equals(Object obj) { - return this==obj; + return this == obj; } @Override @@ -181,15 +184,14 @@ public class StatementFacade extends AbstractCreateStatementInterceptor { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - if (compare(TOSTRING_VAL,method)) { + if (compare(TOSTRING_VAL, method)) { return toString(); } if (compare(EQUALS_VAL, method)) { if (args[0] == null || !Proxy.isProxyClass(args[0].getClass())) { return Boolean.FALSE; } - return Boolean.valueOf( - this.equals(Proxy.getInvocationHandler(args[0]))); + return Boolean.valueOf(this.equals(Proxy.getInvocationHandler(args[0]))); } if (compare(HASHCODE_VAL, method)) { return Integer.valueOf(this.hashCode()); @@ -214,8 +216,8 @@ public class StatementFacade extends AbstractCreateStatementInterceptor { Object result; try { - //invoke next - result = method.invoke(delegate,args); + // invoke next + result = method.invoke(delegate, args); } catch (Throwable t) { if (t instanceof InvocationTargetException && t.getCause() != null) { throw t.getCause(); @@ -223,7 +225,7 @@ public class StatementFacade extends AbstractCreateStatementInterceptor { throw t; } } - //perform close cleanup + // perform close cleanup if (compare(CLOSE_VAL, method)) { delegate = null; } @@ -237,16 +239,12 @@ public class StatementFacade extends AbstractCreateStatementInterceptor { @Override public boolean equals(Object obj) { - return this==obj; + return this == obj; } @Override public String toString() { - return ResultSetProxy.class.getName() + "[Proxy=" + - hashCode() + - "; Delegate=" + - delegate + - ']'; + return ResultSetProxy.class.getName() + "[Proxy=" + hashCode() + "; Delegate=" + delegate + ']'; } } diff --git a/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/AbstractCreateStatementInterceptor.java b/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/AbstractCreateStatementInterceptor.java index 14ccaae07b..0481f38fb1 100644 --- a/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/AbstractCreateStatementInterceptor.java +++ b/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/interceptor/AbstractCreateStatementInterceptor.java @@ -28,17 +28,17 @@ import org.apache.tomcat.jdbc.pool.JdbcInterceptor; import org.apache.tomcat.jdbc.pool.PooledConnection; /** - * Abstraction interceptor. This component intercepts all calls to create some type of SQL statement. - * By extending this class, one can intercept queries and update statements by overriding the {@link #createStatement(Object, Method, Object[], Object, long)} - * method. + * Abstraction interceptor. This component intercepts all calls to create some type of SQL statement. By extending this + * class, one can intercept queries and update statements by overriding the + * {@link #createStatement(Object, Method, Object[], Object, long)} method. */ -public abstract class AbstractCreateStatementInterceptor extends JdbcInterceptor { - protected static final String CREATE_STATEMENT = "createStatement"; - protected static final int CREATE_STATEMENT_IDX = 0; - protected static final String PREPARE_STATEMENT = "prepareStatement"; - protected static final int PREPARE_STATEMENT_IDX = 1; - protected static final String PREPARE_CALL = "prepareCall"; - protected static final int PREPARE_CALL_IDX = 2; +public abstract class AbstractCreateStatementInterceptor extends JdbcInterceptor { + protected static final String CREATE_STATEMENT = "createStatement"; + protected static final int CREATE_STATEMENT_IDX = 0; + protected static final String PREPARE_STATEMENT = "prepareStatement"; + protected static final int PREPARE_STATEMENT_IDX = 1; + protected static final String PREPARE_CALL = "prepareCall"; + protected static final int PREPARE_CALL_IDX = 2; /** * {@link Statement#getResultSet()} @@ -55,30 +55,30 @@ public abstract class AbstractCreateStatementInterceptor extends JdbcIntercepto */ protected static final String GET_STATEMENT = "getStatement"; - protected static final int RESULTSET_IDX = 3; + protected static final int RESULTSET_IDX = 3; - protected static final String[] STATEMENT_TYPES = {CREATE_STATEMENT, PREPARE_STATEMENT, PREPARE_CALL}; - protected static final int STATEMENT_TYPE_COUNT = STATEMENT_TYPES.length; + protected static final String[] STATEMENT_TYPES = { CREATE_STATEMENT, PREPARE_STATEMENT, PREPARE_CALL }; + protected static final int STATEMENT_TYPE_COUNT = STATEMENT_TYPES.length; - protected static final String EXECUTE = "execute"; - protected static final String EXECUTE_QUERY = "executeQuery"; + protected static final String EXECUTE = "execute"; + protected static final String EXECUTE_QUERY = "executeQuery"; protected static final String EXECUTE_UPDATE = "executeUpdate"; - protected static final String EXECUTE_BATCH = "executeBatch"; + protected static final String EXECUTE_BATCH = "executeBatch"; - protected static final String[] EXECUTE_TYPES = {EXECUTE, EXECUTE_QUERY, EXECUTE_UPDATE, EXECUTE_BATCH}; + protected static final String[] EXECUTE_TYPES = { EXECUTE, EXECUTE_QUERY, EXECUTE_UPDATE, EXECUTE_BATCH }; /** * the constructors that are used to create statement proxies */ protected static final Constructor<?>[] constructors = new Constructor[STATEMENT_TYPE_COUNT + 1]; - public AbstractCreateStatementInterceptor() { + public AbstractCreateStatementInterceptor() { super(); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - if (compare(CLOSE_VAL,method)) { + if (compare(CLOSE_VAL, method)) { closeInvoked(); return super.invoke(proxy, method, args); } else { @@ -86,11 +86,11 @@ public abstract class AbstractCreateStatementInterceptor extends JdbcIntercepto process = isStatement(method, process); if (process) { long start = System.currentTimeMillis(); - Object statement = super.invoke(proxy,method,args); + Object statement = super.invoke(proxy, method, args); long delta = System.currentTimeMillis() - start; - return createStatement(proxy,method,args,statement, delta); + return createStatement(proxy, method, args, statement, delta); } else { - return super.invoke(proxy,method,args); + return super.invoke(proxy, method, args); } } } @@ -98,11 +98,11 @@ public abstract class AbstractCreateStatementInterceptor extends JdbcIntercepto /** * Creates a constructor for a proxy class, if one doesn't already exist * - * @param idx - * - the index of the constructor - * @param clazz - * - the interface that the proxy will implement + * @param idx - the index of the constructor + * @param clazz - the interface that the proxy will implement + * * @return - returns a constructor used to create new instances + * * @throws NoSuchMethodException Constructor not found */ protected Constructor<?> getConstructor(int idx, Class<?> clazz) throws NoSuchMethodException { @@ -116,14 +116,16 @@ public abstract class AbstractCreateStatementInterceptor extends JdbcIntercepto /** * This method will be invoked after a successful statement creation. This method can choose to return a wrapper - * around the statement or return the statement itself. - * If this method returns a wrapper then it should return a wrapper object that implements one of the following interfaces. - * {@link java.sql.Statement}, {@link java.sql.PreparedStatement} or {@link java.sql.CallableStatement} - * @param proxy the actual proxy object - * @param method the method that was called. It will be one of the methods defined in {@link #STATEMENT_TYPES} - * @param args the arguments to the method + * around the statement or return the statement itself. If this method returns a wrapper then it should return a + * wrapper object that implements one of the following interfaces. {@link java.sql.Statement}, + * {@link java.sql.PreparedStatement} or {@link java.sql.CallableStatement} + * + * @param proxy the actual proxy object + * @param method the method that was called. It will be one of the methods defined in {@link #STATEMENT_TYPES} + * @param args the arguments to the method * @param statement the statement that the underlying connection created - * @param time Elapsed time + * @param time Elapsed time + * * @return a {@link java.sql.Statement} object */ public abstract Object createStatement(Object proxy, Method method, Object[] args, Object statement, long time); @@ -136,36 +138,42 @@ public abstract class AbstractCreateStatementInterceptor extends JdbcIntercepto /** * Returns true if the method that is being invoked matches one of the statement types. * - * @param method the method being invoked on the proxy + * @param method the method being invoked on the proxy * @param process boolean result used for recursion + * * @return returns true if the method name matched */ - protected boolean isStatement(Method method, boolean process){ + protected boolean isStatement(Method method, boolean process) { return process(STATEMENT_TYPES, method, process); } /** * Returns true if the method that is being invoked matches one of the execute types. * - * @param method the method being invoked on the proxy + * @param method the method being invoked on the proxy * @param process boolean result used for recursion + * * @return returns true if the method name matched */ - protected boolean isExecute(Method method, boolean process){ + protected boolean isExecute(Method method, boolean process) { return process(EXECUTE_TYPES, method, process); } /* * Returns true if the method that is being invoked matches one of the method names passed in + * * @param names list of method names that we want to intercept + * * @param method the method being invoked on the proxy + * * @param process boolean result used for recursion + * * @return returns true if the method name matched */ protected boolean process(String[] names, Method method, boolean process) { final String name = method.getName(); - for (int i=0; (!process) && i<names.length; i++) { - process = compare(names[i],name); + for (int i = 0; (!process) && i < names.length; i++) { + process = compare(names[i], name); } return process; } diff --git a/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/ProxiedResultSetTest.java b/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/ProxiedResultSetTest.java index ae4d951f2c..17699c9886 100644 --- a/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/ProxiedResultSetTest.java +++ b/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/ProxiedResultSetTest.java @@ -16,19 +16,16 @@ */ package org.apache.tomcat.jdbc.test; -import org.apache.tomcat.jdbc.test.driver.Driver; -import org.junit.Test; - import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; +import org.junit.Assert; +import org.junit.Test; + +import org.apache.tomcat.jdbc.test.driver.Driver; public class ProxiedResultSetTest extends DefaultTestCase { @@ -37,9 +34,9 @@ public class ProxiedResultSetTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = this.datasource.getConnection(); - PreparedStatement statement = con.prepareStatement(""); - ResultSet resultSet = statement.executeQuery()) { - assertEquals(statement, resultSet.getStatement()); + PreparedStatement statement = con.prepareStatement(""); + ResultSet resultSet = statement.executeQuery()) { + Assert.assertEquals(statement, resultSet.getStatement()); } } @@ -48,9 +45,9 @@ public class ProxiedResultSetTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = this.datasource.getConnection(); - Statement statement = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); - ResultSet resultSet = statement.getGeneratedKeys()) { - assertEquals(statement, resultSet.getStatement()); + Statement statement = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); + ResultSet resultSet = statement.getGeneratedKeys()) { + Assert.assertEquals(statement, resultSet.getStatement()); } } @@ -59,9 +56,9 @@ public class ProxiedResultSetTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = this.datasource.getConnection(); - Statement statement = con.createStatement(); - ResultSet resultSet = statement.executeQuery("")) { - assertEquals(statement, resultSet.getStatement()); + Statement statement = con.createStatement(); + ResultSet resultSet = statement.executeQuery("")) { + Assert.assertEquals(statement, resultSet.getStatement()); } } @@ -70,9 +67,9 @@ public class ProxiedResultSetTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = this.datasource.getConnection(); - Statement statement = con.createStatement(); - ResultSet resultSet = statement.getResultSet()) { - assertEquals(statement, resultSet.getStatement()); + Statement statement = con.createStatement(); + ResultSet resultSet = statement.getResultSet()) { + Assert.assertEquals(statement, resultSet.getStatement()); } } @@ -81,11 +78,11 @@ public class ProxiedResultSetTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = datasource.getConnection(); - Statement statement = con.createStatement(); - ResultSet resultSet = statement.getResultSet()) { - assertFalse(resultSet.isClosed()); + Statement statement = con.createStatement(); + ResultSet resultSet = statement.getResultSet()) { + Assert.assertFalse(resultSet.isClosed()); resultSet.close(); - assertTrue(resultSet.isClosed()); + Assert.assertTrue(resultSet.isClosed()); } } @@ -94,11 +91,11 @@ public class ProxiedResultSetTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = datasource.getConnection(); - Statement statement = con.createStatement(); - ResultSet resultSet = statement.getResultSet()) { + Statement statement = con.createStatement(); + ResultSet resultSet = statement.getResultSet()) { int hashcode = resultSet.hashCode(); resultSet.close(); - assertEquals(hashcode, resultSet.hashCode()); + Assert.assertEquals(hashcode, resultSet.hashCode()); } } @@ -107,13 +104,13 @@ public class ProxiedResultSetTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = datasource.getConnection(); - Statement statement = con.createStatement(); - ResultSet resultSet = statement.getResultSet()) { - assertNotEquals(resultSet, ""); - assertEquals(resultSet, resultSet); + Statement statement = con.createStatement(); + ResultSet resultSet = statement.getResultSet()) { + Assert.assertNotEquals(resultSet, ""); + Assert.assertEquals(resultSet, resultSet); resultSet.close(); - assertNotEquals(resultSet, ""); - assertEquals(resultSet, resultSet); + Assert.assertNotEquals(resultSet, ""); + Assert.assertEquals(resultSet, resultSet); } } @@ -123,12 +120,12 @@ public class ProxiedResultSetTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = datasource.getConnection(); - Statement statement = con.createStatement(); - ResultSet resultSet = statement.getResultSet()) { + Statement statement = con.createStatement(); + ResultSet resultSet = statement.getResultSet()) { String toStringResult = resultSet.toString(); resultSet.close(); // the delegate will change, so we can't compare the whole string - assertEquals(toStringResult.substring(0, 50), resultSet.toString().substring(0, 50)); + Assert.assertEquals(toStringResult.substring(0, 50), resultSet.toString().substring(0, 50)); } } @@ -138,9 +135,9 @@ public class ProxiedResultSetTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = this.datasource.getConnection(); - PreparedStatement statement = con.prepareStatement("sql"); - ResultSet resultSet = statement.executeQuery()) { - assertNotEquals(resultSet, null); + PreparedStatement statement = con.prepareStatement("sql"); + ResultSet resultSet = statement.executeQuery()) { + Assert.assertNotEquals(resultSet, null); } } @@ -149,9 +146,9 @@ public class ProxiedResultSetTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = this.datasource.getConnection(); - PreparedStatement statement = con.prepareStatement("sql"); - ResultSet resultSet = statement.executeQuery()) { - assertNotEquals(resultSet, ""); + PreparedStatement statement = con.prepareStatement("sql"); + ResultSet resultSet = statement.executeQuery()) { + Assert.assertNotEquals(resultSet, ""); } } @@ -160,9 +157,9 @@ public class ProxiedResultSetTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = this.datasource.getConnection(); - PreparedStatement statement = con.prepareStatement("sql"); - ResultSet resultSet = statement.executeQuery()) { - assertNotEquals(resultSet, new org.apache.tomcat.jdbc.test.driver.ResultSet(statement)); + PreparedStatement statement = con.prepareStatement("sql"); + ResultSet resultSet = statement.executeQuery()) { + Assert.assertNotEquals(resultSet, new org.apache.tomcat.jdbc.test.driver.ResultSet(statement)); } } @@ -171,9 +168,9 @@ public class ProxiedResultSetTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = this.datasource.getConnection(); - PreparedStatement statement = con.prepareStatement("sql"); - ResultSet resultSet = statement.executeQuery()) { - assertEquals(resultSet, resultSet); + PreparedStatement statement = con.prepareStatement("sql"); + ResultSet resultSet = statement.executeQuery()) { + Assert.assertEquals(resultSet, resultSet); } } @@ -182,12 +179,12 @@ public class ProxiedResultSetTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = this.datasource.getConnection(); - PreparedStatement statement = con.prepareStatement("sql"); - ResultSet resultSet = statement.executeQuery(); - Connection con2 = this.datasource.getConnection(); - PreparedStatement statement2 = con2.prepareStatement("sql"); - ResultSet resultSet2 = statement2.executeQuery()) { - assertNotEquals(resultSet, resultSet2); + PreparedStatement statement = con.prepareStatement("sql"); + ResultSet resultSet = statement.executeQuery(); + Connection con2 = this.datasource.getConnection(); + PreparedStatement statement2 = con2.prepareStatement("sql"); + ResultSet resultSet2 = statement2.executeQuery()) { + Assert.assertNotEquals(resultSet, resultSet2); } } } diff --git a/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/ProxiedStatementTest.java b/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/ProxiedStatementTest.java index c7b16b3125..2c76115c06 100644 --- a/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/ProxiedStatementTest.java +++ b/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/ProxiedStatementTest.java @@ -16,16 +16,16 @@ */ package org.apache.tomcat.jdbc.test; -import org.apache.tomcat.jdbc.test.driver.Driver; -import org.junit.Test; - import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import static org.junit.Assert.assertNotEquals; +import org.junit.Assert; +import org.junit.Test; + +import org.apache.tomcat.jdbc.test.driver.Driver; public class ProxiedStatementTest extends DefaultTestCase { @@ -34,8 +34,8 @@ public class ProxiedStatementTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = this.datasource.getConnection(); - PreparedStatement statement = con.prepareStatement("sql")) { - assertNotEquals(statement, null); + PreparedStatement statement = con.prepareStatement("sql")) { + Assert.assertNotEquals(statement, null); } } @@ -44,8 +44,8 @@ public class ProxiedStatementTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = this.datasource.getConnection(); - Statement statement = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)) { - assertNotEquals(statement, ""); + Statement statement = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)) { + Assert.assertNotEquals(statement, ""); } } @@ -54,8 +54,8 @@ public class ProxiedStatementTest extends DefaultTestCase { this.datasource.setDriverClassName(Driver.class.getName()); this.datasource.setUrl("jdbc:tomcat:test"); try (Connection con = this.datasource.getConnection(); - Statement statement = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)) { - assertNotEquals(statement, new org.apache.tomcat.jdbc.test.driver.Statement()); + Statement statement = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)) { + Assert.assertNotEquals(statement, new org.apache.tomcat.jdbc.test.driver.Statement()); } } } diff --git a/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/driver/ResultSet.java b/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/driver/ResultSet.java index 86ce153b7a..fb048ac30d 100644 --- a/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/driver/ResultSet.java +++ b/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/driver/ResultSet.java @@ -442,7 +442,6 @@ public class ResultSet implements java.sql.ResultSet { @Override public Statement getStatement() throws SQLException { - // TODO Auto-generated method stub return owner; } @@ -602,7 +601,6 @@ public class ResultSet implements java.sql.ResultSet { public boolean next() throws SQLException { boolean next = hasNext; hasNext = false; - // TODO Auto-generated method stub return next; } diff --git a/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/driver/Statement.java b/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/driver/Statement.java index 1d48adcc7e..d5a8e8ead6 100644 --- a/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/driver/Statement.java +++ b/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/driver/Statement.java @@ -728,7 +728,6 @@ public class Statement implements CallableStatement { @Override public ResultSet executeQuery() throws SQLException { - // TODO Auto-generated method stub return new org.apache.tomcat.jdbc.test.driver.ResultSet(this); } @@ -1100,7 +1099,6 @@ public class Statement implements CallableStatement { @Override public ResultSet executeQuery(String sql) throws SQLException { - // TODO Auto-generated method stub return new org.apache.tomcat.jdbc.test.driver.ResultSet(this); } @@ -1148,7 +1146,6 @@ public class Statement implements CallableStatement { @Override public ResultSet getGeneratedKeys() throws SQLException { - // TODO Auto-generated method stub return new org.apache.tomcat.jdbc.test.driver.ResultSet(this); } @@ -1178,13 +1175,11 @@ public class Statement implements CallableStatement { @Override public int getQueryTimeout() throws SQLException { - // TODO Auto-generated method stub return timeout; } @Override public ResultSet getResultSet() throws SQLException { - // TODO Auto-generated method stub return new org.apache.tomcat.jdbc.test.driver.ResultSet(this); } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index fad32fca8c..467639c60c 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -134,6 +134,17 @@ </add> </changelog> </subsection> + <subsection name="jdbc-pool"> + <changelog> + <fix> + <bug>69206</bug>: Ensure statements returned from <code>Statement</code> + methods <code>executeQuery()</code>, <code>getResultSet()</code> and + <code>getGeneratedKeys()</code> are correctly wrapped before being + returned to the caller. Based on pull request <pr>742</pr> provided by + Michael Clarke. + </fix> + </changelog> + </subsection> <subsection name="Other"> <changelog> <fix> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org