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;
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
// **********************************************************************
@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
// java.sql.Connection implementation class. These methods are only

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

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