Make sure to wrap/inject all ResultSets and set the parent _statement otherwise we get an

NPE in _checkException() which needs to bubble-up to the Statement level.
pull/6/head
Brett Wooldridge 12 years ago
parent 7d066aa63e
commit 7c8d8d071e

@ -17,9 +17,6 @@
package com.zaxxer.hikari.proxy; package com.zaxxer.hikari.proxy;
import java.sql.CallableStatement; import java.sql.CallableStatement;
import java.sql.SQLException;
import com.zaxxer.hikari.javassist.HikariOverride;
/** /**
* *
@ -36,20 +33,6 @@ public abstract class CallableStatementProxy extends PreparedStatementProxy impl
// Overridden java.sql.CallableStatement Methods // Overridden java.sql.CallableStatement Methods
// ********************************************************************** // **********************************************************************
@HikariOverride
public void close() throws SQLException
{
_connection._unregisterStatement(this);
try
{
__close();
}
catch (SQLException e)
{
throw _checkException(e);
}
}
// *********************************************************************** // ***********************************************************************
// These methods contain code we do not want injected into the actual // These methods contain code we do not want injected into the actual
// java.sql.Connection implementation class. These methods are only // java.sql.Connection implementation class. These methods are only

@ -20,6 +20,8 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import com.zaxxer.hikari.javassist.HikariOverride;
/** /**
* *
* @author Brett Wooldridge * @author Brett Wooldridge
@ -35,19 +37,18 @@ public abstract class PreparedStatementProxy extends StatementProxy implements I
// Overridden java.sql.PreparedStatement Methods // Overridden java.sql.PreparedStatement Methods
// ********************************************************************** // **********************************************************************
@HikariOverride
public ResultSet executeQuery() throws SQLException public ResultSet executeQuery() throws SQLException
{ {
try try
{ {
ResultSet rs = ((PreparedStatement) delegate).executeQuery(); ResultSet rs = __executeQuery();
if (rs == null) if (rs != null)
{ {
return null; ((IHikariResultSetProxy) rs)._setProxyStatement(this);
} }
IHikariResultSetProxy resultSet = (IHikariResultSetProxy) PROXY_FACTORY.getProxyResultSet(this, rs); return rs;
resultSet._setProxyStatement(this);
return (ResultSet) resultSet;
} }
catch (SQLException e) catch (SQLException e)
{ {
@ -62,4 +63,13 @@ public abstract class PreparedStatementProxy extends StatementProxy implements I
// delegating proxies are used. // delegating proxies are used.
// *********************************************************************** // ***********************************************************************
public ResultSet __executeQuery() throws SQLException
{
ResultSet resultSet = ((PreparedStatement) delegate).executeQuery();
if (resultSet != null)
{
resultSet = PROXY_FACTORY.getProxyResultSet(this, resultSet);
}
return resultSet;
}
} }

@ -42,7 +42,8 @@ public abstract class ResultSetProxy implements IHikariResultSetProxy, ResultSet
{ {
return _statement._checkException(e); return _statement._checkException(e);
} }
@HikariInject
public void _setProxyStatement(IHikariStatementProxy statement) public void _setProxyStatement(IHikariStatementProxy statement)
{ {
this._statement = statement; this._statement = statement;

@ -35,7 +35,7 @@ public abstract class StatementProxy implements IHikariStatementProxy, Statement
@HikariInject protected boolean _isClosed; @HikariInject protected boolean _isClosed;
protected Statement delegate; protected final Statement delegate;
static static
{ {
@ -89,14 +89,14 @@ public abstract class StatementProxy implements IHikariStatementProxy, Statement
} }
} }
@HikariOverride
public ResultSet executeQuery(String sql) throws SQLException public ResultSet executeQuery(String sql) throws SQLException
{ {
try try
{ {
ResultSet rs = delegate.executeQuery(sql); ResultSet rs = __executeQuery(sql);
if (rs == null) if (rs != null)
{ {
rs = PROXY_FACTORY.getProxyResultSet(this, rs);
((IHikariResultSetProxy) rs)._setProxyStatement(this); ((IHikariResultSetProxy) rs)._setProxyStatement(this);
} }
@ -108,14 +108,14 @@ public abstract class StatementProxy implements IHikariStatementProxy, Statement
} }
} }
@HikariOverride
public ResultSet getResultSet() throws SQLException public ResultSet getResultSet() throws SQLException
{ {
try try
{ {
ResultSet rs = delegate.getResultSet(); ResultSet rs = __getResultSet();
if (rs != null) if (rs != null)
{ {
rs = PROXY_FACTORY.getProxyResultSet(this, rs);
((IHikariResultSetProxy) rs)._setProxyStatement(this); ((IHikariResultSetProxy) rs)._setProxyStatement(this);
} }
@ -127,14 +127,14 @@ public abstract class StatementProxy implements IHikariStatementProxy, Statement
} }
} }
@HikariOverride
public ResultSet getGeneratedKeys() throws SQLException public ResultSet getGeneratedKeys() throws SQLException
{ {
try try
{ {
ResultSet rs = delegate.getGeneratedKeys(); ResultSet rs = __getGeneratedKeys();
if (rs == null) if (rs != null)
{ {
rs = PROXY_FACTORY.getProxyResultSet(this, rs);
((IHikariResultSetProxy) rs)._setProxyStatement(this); ((IHikariResultSetProxy) rs)._setProxyStatement(this);
} }
@ -158,7 +158,7 @@ public abstract class StatementProxy implements IHikariStatementProxy, Statement
// delegating proxies are used. // delegating proxies are used.
// *********************************************************************** // ***********************************************************************
protected static void __static() private static void __static()
{ {
if (PROXY_FACTORY == null) if (PROXY_FACTORY == null)
{ {
@ -175,4 +175,34 @@ public abstract class StatementProxy implements IHikariStatementProxy, Statement
delegate.close(); delegate.close();
} }
public ResultSet __executeQuery(String sql) throws SQLException
{
ResultSet resultSet = delegate.executeQuery(sql);
if (resultSet != null)
{
resultSet = PROXY_FACTORY.getProxyResultSet(this, resultSet);
}
return resultSet;
}
public ResultSet __getGeneratedKeys() throws SQLException
{
ResultSet generatedKeys = delegate.getGeneratedKeys();
if (generatedKeys != null)
{
generatedKeys = PROXY_FACTORY.getProxyResultSet(this, generatedKeys);
}
return generatedKeys;
}
public ResultSet __getResultSet() throws SQLException
{
ResultSet resultSet = delegate.getResultSet();
if (resultSet != null)
{
resultSet = PROXY_FACTORY.getProxyResultSet(this, resultSet);
}
return resultSet;
}
} }
Loading…
Cancel
Save