From: Roman R. <rro...@us...> - 2003-07-28 22:29:58
|
Update of /cvsroot/firebird/client-java/src/main/org/firebirdsql/jdbc In directory sc8-pr-cvs1:/tmp/cvs-serv10992/jdbc Modified Files: Tag: Branch_1_0 FBResultSet.java FBRowSet.java FBStatement.java Added Files: Tag: Branch_1_0 FBObjectListener.java Log Message: fixed recently introduced bug when result set is closed in statement.close() --- FBObjectListener.java ADDED --- Index: FBResultSet.java =================================================================== RCS file: /cvsroot/firebird/client-java/src/main/org/firebirdsql/jdbc/FBResultSet.java,v retrieving revision 1.20.2.2 retrieving revision 1.20.2.3 diff -b -U3 -r1.20.2.2 -r1.20.2.3 --- FBResultSet.java 19 Jul 2003 22:23:59 -0000 1.20.2.2 +++ FBResultSet.java 28 Jul 2003 22:00:34 -0000 1.20.2.3 @@ -89,6 +89,7 @@ private java.util.HashMap colNames = new java.util.HashMap(); private String cursorName; + private FBObjectListener.ResultSetListener listener; /** * Creates a new <code>FBResultSet</code> instance. * @@ -96,11 +97,12 @@ * @param fbstatement a <code>FBStatement</code> value * @param stmt an <code>isc_stmt_handle</code> value */ - FBResultSet(FBConnection c, FBStatement fbstatement, isc_stmt_handle stmt) - throws SQLException + FBResultSet(FBConnection c, FBStatement fbstatement, isc_stmt_handle stmt, + FBObjectListener.ResultSetListener listener) throws SQLException { this.c = c; this.cursorName = fbstatement.getCursorName(); + this.listener = listener; xsqlvars = stmt.getOutSqlda().sqlvar; maxRows = fbstatement.getMaxRows(); @@ -124,9 +126,14 @@ * in {@link FBDatabaseMetaData} class). * @throws SQLException if database access error occurs */ - FBResultSet(FBConnection c, FBStatement fbStatement,isc_stmt_handle stmt, boolean trimStrings) throws SQLException { + FBResultSet(FBConnection c, FBStatement fbStatement,isc_stmt_handle stmt, + boolean trimStrings, FBObjectListener.ResultSetListener listener) + throws SQLException + { this.c = c; this.trimStrings = trimStrings; + this.listener = listener; + maxRows = fbStatement.getMaxRows(); xsqlvars = stmt.getOutSqlda().sqlvar; prepareVars(true); @@ -214,6 +221,9 @@ } finally { fbFetcher.close(); } + + if (listener != null) + listener.resultSetClosed(this); } Index: FBRowSet.java =================================================================== RCS file: /cvsroot/firebird/client-java/src/main/org/firebirdsql/jdbc/FBRowSet.java,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -b -U3 -r1.1 -r1.1.2.1 --- FBRowSet.java 29 Aug 2002 13:41:05 -0000 1.1 +++ FBRowSet.java 28 Jul 2003 22:00:35 -0000 1.1.2.1 @@ -43,8 +43,8 @@ */ public class FBRowSet extends FBResultSet implements RowSet { - FBRowSet(FBConnection c, FBStatement fbstatement, isc_stmt_handle stmt) throws SQLException{ - super(c, fbstatement, stmt); + FBRowSet(FBConnection c, FBStatement fbstatement, isc_stmt_handle stmt, FBObjectListener.ResultSetListener listener) throws SQLException{ + super(c, fbstatement, stmt, listener); } Index: FBStatement.java =================================================================== RCS file: /cvsroot/firebird/client-java/src/main/org/firebirdsql/jdbc/FBStatement.java,v retrieving revision 1.14.2.4 retrieving revision 1.14.2.5 diff -b -U3 -r1.14.2.4 -r1.14.2.5 --- FBStatement.java 22 Jul 2003 20:32:16 -0000 1.14.2.4 +++ FBStatement.java 28 Jul 2003 22:00:35 -0000 1.14.2.5 @@ -83,6 +83,29 @@ private int rsConcurrency; + private FBObjectListener.ResultSetListener resultSetListener = new RSListener(); + + /** + * Listener for the result sets. + */ + private class RSListener implements FBObjectListener.ResultSetListener { + + /** + * Notify that result set was closed. This method cleans the result + * set reference, so that call to {@link #close()} method will not cause + * exception. + * + * @param rs result set that was closed. + */ + public void resultSetClosed(ResultSet rs) { + if (currentRs == rs) + currentRs = null; + else + if (currentCachedResultSet == rs) + currentCachedResultSet = null; + } + } + FBStatement(FBConnection c, int rsConcurrency) { this.c = c; this.rsConcurrency = rsConcurrency; @@ -580,7 +603,7 @@ } // end of if () else { if (isResultSet){ - currentRs = new FBResultSet(c, this, fixedStmt); + currentRs = new FBResultSet(c, this, fixedStmt, resultSetListener); return currentRs; } else @@ -595,7 +618,7 @@ if (fixedStmt == null) { throw new SQLException("No statement just executed"); } - currentCachedResultSet = new FBResultSet(c, this, fixedStmt, trimStrings); + currentCachedResultSet = new FBResultSet(c, this, fixedStmt, trimStrings, resultSetListener); return currentCachedResultSet; } |