Skip to content

Commit 1274bc8

Browse files
committed
Do not create a proxy when ResultSet is null
`Statement.getResultSet` can return `null`. In that case, do not create a `ResultSet` proxy. Resolves #117
1 parent baa4421 commit 1274bc8

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

src/main/java/net/ttddyy/dsproxy/proxy/StatementProxyLogic.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ protected Object performProxyLogic(Object proxy, Method method, Object[] args, M
293293
final boolean isResultSetReturningMethod = !isGetGeneratedKeysMethod && METHODS_TO_RETURN_RESULTSET.contains(methodName);
294294

295295
final boolean isCreateGeneratedKeysProxy = isGetGeneratedKeysMethod && this.proxyConfig.isGeneratedKeysProxyEnabled();
296-
final boolean isCreateResultSetProxy = isResultSetReturningMethod && this.proxyConfig.isResultSetProxyEnabled();
296+
final boolean isCreateResultSetProxy = (retVal != null && isResultSetReturningMethod && this.proxyConfig.isResultSetProxyEnabled());
297297

298298
// create proxy for returned ResultSet
299299
if (isCreateGeneratedKeysProxy) {

src/main/java/net/ttddyy/dsproxy/proxy/jdk/JdkJdbcProxyFactory.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@
88

99
import javax.sql.DataSource;
1010
import java.lang.reflect.Proxy;
11-
import java.sql.*;
11+
import java.sql.CallableStatement;
12+
import java.sql.Connection;
13+
import java.sql.PreparedStatement;
14+
import java.sql.ResultSet;
15+
import java.sql.Statement;
1216

1317
/**
1418
* Dynamic Proxy Class(Jdk Proxy) based {@link net.ttddyy.dsproxy.proxy.JdbcProxyFactory} implementation.

src/test/java/net/ttddyy/dsproxy/proxy/StatementProxyLogicMockTest.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -808,7 +808,6 @@ public void testEquals() throws Throwable {
808808

809809
@Test
810810
public void proxyResultSet() throws Throwable {
811-
812811
final AtomicReference<Object> listenerReceivedResult = new AtomicReference<Object>();
813812
QueryExecutionListener listener = new NoOpQueryExecutionListener() {
814813
@Override
@@ -817,13 +816,11 @@ public void afterQuery(ExecutionInfo execInfo, List<QueryInfo> queryInfoList) {
817816
}
818817
};
819818

820-
821819
ResultSetMetaData metaData = mock(ResultSetMetaData.class);
822820

823821
ResultSet resultSet = mock(ResultSet.class);
824822
when(resultSet.getMetaData()).thenReturn(metaData);
825823

826-
827824
Statement stmt = mock(Statement.class);
828825
when(stmt.executeQuery(anyString())).thenReturn(resultSet);
829826
when(stmt.getGeneratedKeys()).thenReturn(resultSet);
@@ -859,8 +856,18 @@ public void afterQuery(ExecutionInfo execInfo, List<QueryInfo> queryInfoList) {
859856
result = logic.invoke(null, getGeneratedKeysMethod, null);
860857
assertThat(result).isInstanceOf(ResultSet.class);
861858
assertFalse(Proxy.isProxyClass(result.getClass()));
859+
}
862860

861+
@Test
862+
public void resultSetIsNull() throws Throwable {
863+
Statement stmt = mock(Statement.class);
864+
when(stmt.getResultSet()).thenReturn(null);
865+
Method getResultSetMethod = Statement.class.getMethod("getResultSet");
863866

867+
StatementProxyLogic logic = getProxyLogic(stmt, null, null, true, false);
868+
Object result = logic.invoke(null, getResultSetMethod, null);
869+
870+
assertThat(result).isNull();
864871
}
865872

866873
@Test

0 commit comments

Comments
 (0)