From 295ff59ab7ee2a1df9d737110096ed9dc8a3a458 Mon Sep 17 00:00:00 2001 From: Brett Wooldridge Date: Wed, 23 Sep 2015 23:11:08 +0900 Subject: [PATCH] Fixes #425 a low impact change to satisfy an edge-case. Still, relying on object identities from getResultSet() is an extremely bad idea, regardless of how some drivers seem to implement it. Relying on that implementation artifact is contrary to the Statement interface documentation, and likely to fail in a variety of environments. HikariCP itself does not and will not guarantee the future behaviour of this method. --- .../java/com/zaxxer/hikari/pool/ProxyStatement.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/zaxxer/hikari/pool/ProxyStatement.java b/src/main/java/com/zaxxer/hikari/pool/ProxyStatement.java index 307ae955..ff706fd1 100644 --- a/src/main/java/com/zaxxer/hikari/pool/ProxyStatement.java +++ b/src/main/java/com/zaxxer/hikari/pool/ProxyStatement.java @@ -33,6 +33,7 @@ public abstract class ProxyStatement implements Statement protected final Statement delegate; private boolean isClosed; + private ResultSet proxyResultSet; protected ProxyStatement(ProxyConnection connection, Statement statement) { @@ -212,9 +213,14 @@ public abstract class ProxyStatement implements Statement public ResultSet getResultSet() throws SQLException { final ResultSet resultSet = delegate.getResultSet(); if (resultSet != null) { - return ProxyFactory.getProxyResultSet(connection, this, resultSet); + if (proxyResultSet == null || ((ProxyResultSet) proxyResultSet).delegate != resultSet) { + proxyResultSet = ProxyFactory.getProxyResultSet(connection, this, resultSet); + } } - return null; + else { + proxyResultSet = null; + } + return proxyResultSet; } /** {@inheritDoc} */