You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by km...@apache.org on 2005/10/07 00:55:37 UTC
svn commit: r306950 - in
/db/derby/code/branches/10.1/java/client/org/apache/derby/client/am:
PreparedStatement.java ResultSet.java Statement.java
Author: kmarsden
Date: Thu Oct 6 15:55:33 2005
New Revision: 306950
URL: http://svn.apache.org/viewcvs?rev=306950&view=rev
Log:
DERBY-557
Client driver gets OutOfMemoryError when re-executing statement without closing ResultSet
Merged from trunk with
svn merge -r 289538:289539 https://svn.apache.org/repos/asf/db/derby/code/trunk
Contributed by Knut Anders Hatlen
Modified:
db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/PreparedStatement.java
db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/ResultSet.java
db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/Statement.java
Modified: db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/PreparedStatement.java
URL: http://svn.apache.org/viewcvs/db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/PreparedStatement.java?rev=306950&r1=306949&r2=306950&view=diff
==============================================================================
--- db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/PreparedStatement.java (original)
+++ db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/PreparedStatement.java Thu Oct 6 15:55:33 2005
@@ -1367,7 +1367,7 @@
connection_.completeTransactionStart();
}
- super.markResultSetsClosed();
+ super.markResultSetsClosed(true); // true means remove from list of commit and rollback listeners
switch (sqlMode_) {
case isUpdate__:
Modified: db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/ResultSet.java
URL: http://svn.apache.org/viewcvs/db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/ResultSet.java?rev=306950&r1=306949&r2=306950&view=diff
==============================================================================
--- db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/ResultSet.java (original)
+++ db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/ResultSet.java Thu Oct 6 15:55:33 2005
@@ -388,8 +388,7 @@
flowAutoCommitIfNotAutoCommitted(); // in case of early close
}
} finally {
- markClosed();
- connection_.CommitAndRollbackListeners_.remove(this);
+ markClosed(true);
}
flowAutoCommitIfLastOpenMultipleResultSetWasJustClosed();
@@ -3014,12 +3013,31 @@
}
}
+ /**
+ * Mark this ResultSet as closed. The ResultSet will not be
+ * removed from the commit and rollback listeners list in
+ * <code>org.apache.derby.client.am.Connection</code>.
+ */
void markClosed() {
+ markClosed(false);
+ }
+
+ /**
+ * Mark this ResultSet as closed.
+ *
+ * @param removeListener if true the ResultSet will be removed
+ * from the commit and rollback listeners list in
+ * <code>org.apache.derby.client.am.Connection</code>.
+ */
+ void markClosed(boolean removeListener) {
openOnClient_ = false;
openOnServer_ = false;
statement_.resetCursorNameAndRemoveFromWhereCurrentOfMappings(); // for SELECT...FOR UPDATE queries
statement_.removeClientCursorNameFromCache();
markPositionedUpdateDeletePreparedStatementsClosed();
+ if (removeListener) {
+ connection_.CommitAndRollbackListeners_.remove(this);
+ }
}
void markClosedOnServer() {
Modified: db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/Statement.java
URL: http://svn.apache.org/viewcvs/db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/Statement.java?rev=306950&r1=306949&r2=306950&view=diff
==============================================================================
--- db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/Statement.java (original)
+++ db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/Statement.java Thu Oct 6 15:55:33 2005
@@ -1393,20 +1393,38 @@
}
}
+ /**
+ * Mark all ResultSets associated with this statement as
+ * closed. The ResultSets will not be removed from the commit and
+ * rollback listeners list in
+ * <code>org.apache.derby.client.am.Connection</code>.
+ */
void markResultSetsClosed() {
+ markResultSetsClosed(false);
+ }
+
+ /**
+ * Mark all ResultSets associated with this statement as
+ * closed.
+ *
+ * @param removeListener if true the ResultSets will be removed
+ * from the commit and rollback listeners list in
+ * <code>org.apache.derby.client.am.Connection</code>.
+ */
+ void markResultSetsClosed(boolean removeListener) {
if (resultSetList_ != null) {
for (int i = 0; i < resultSetList_.length; i++) {
if (resultSetList_[i] != null) {
- resultSetList_[i].markClosed();
+ resultSetList_[i].markClosed(removeListener);
}
resultSetList_[i] = null;
}
}
if (generatedKeysResultSet_ != null) {
- generatedKeysResultSet_.markClosed();
+ generatedKeysResultSet_.markClosed(removeListener);
}
if (resultSet_ != null) {
- resultSet_.markClosed();
+ resultSet_.markClosed(removeListener);
}
resultSet_ = null;
resultSetList_ = null;
@@ -1544,7 +1562,7 @@
connection_.completeTransactionStart();
}
- markResultSetsClosed();
+ markResultSetsClosed(true); // true means remove from list of commit and rollback listeners
markClosedOnServer();
section_ = newSection;