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 dj...@apache.org on 2007/03/30 01:54:28 UTC
svn commit: r523884 -
/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java
Author: djd
Date: Thu Mar 29 16:54:27 2007
New Revision: 523884
URL: http://svn.apache.org/viewvc?view=rev&rev=523884
Log:
DERBY-2490 (partial) Cleanup in GenericLanguageConnectionContext for the current use
of read-only nested transaction. Part of a series of changes to align the LCC use
of nested transactions with the api provided by the store, including moving
all calls to get a nested transaction for an LCC to be through the LCC and not via
its transaction directly.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java?view=diff&rev=523884&r1=523883&r2=523884
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java Thu Mar 29 16:54:27 2007
@@ -149,19 +149,20 @@
private final TransactionController tran;
/**
- * If non-null indicates that a nested user transaction is in progress.
+ * If non-null indicates that a read-only nested
+ * user transaction is in progress.
*/
- private TransactionController childTransaction;
+ private TransactionController readOnlyNestedTransaction;
/**
* queryNestingDepth is a counter used to keep track of how many calls
- * have been made to begin nested transactions. Only the first call
+ * have been made to begin read-only nested transactions. Only the first call
* actually starts a Nested User Transaction with the store. Subsequent
* calls simply increment this counter. commitNestedTransaction only
* decrements the counter and when it drops to 0 actually commits the
* nested user transaction.
*/
- protected int queryNestingDepth;
+ private int queryNestingDepth;
protected DataValueFactory dataFactory;
protected LanguageFactory langFactory;
@@ -1128,6 +1129,16 @@
{
finishDDTransaction();
}
+
+ // Check that any nested transaction has been destoyed
+ // before a commit.
+ if (SanityManager.DEBUG)
+ {
+ if (readOnlyNestedTransaction != null)
+ {
+ SanityManager.THROWASSERT("Nested transaction active!");
+ }
+ }
// now commit the Store transaction
TransactionController tc = getTransactionExecute();
@@ -1325,6 +1336,16 @@
tempTablesAndRollback();
finishDDTransaction();
+
+ // If a nested transaction is active then
+ // ensure it is destroyed before working
+ // with the user transaction.
+ if (readOnlyNestedTransaction != null)
+ {
+ readOnlyNestedTransaction.destroy();
+ readOnlyNestedTransaction = null;
+ queryNestingDepth = 0;
+ }
// now rollback the Store transaction
TransactionController tc = getTransactionExecute();
@@ -1334,6 +1355,7 @@
((XATransactionController)tc).xa_rollback();
else
tc.abort();
+
// reset the savepoints to the new
// location, since any outer nesting
// levels expet there to be a savepoint
@@ -1449,10 +1471,14 @@
*/
public void beginNestedTransaction(boolean readOnly) throws StandardException
{
- if (childTransaction == null)
- childTransaction = tran.startNestedUserTransaction(readOnly);
+ // DERBY-2490 incremental rework, currently this is only called
+ // with read-only true. Future changes will have this
+ // method support read-write nested transactions as well
+ // instead of callers using the startNestedUserTransaction
+ // directly on tran.
+ if (readOnlyNestedTransaction == null)
+ readOnlyNestedTransaction = tran.startNestedUserTransaction(readOnly);
queryNestingDepth++;
- return;
}
public void commitNestedTransaction()
@@ -1460,10 +1486,9 @@
{
if (--queryNestingDepth == 0)
{
- childTransaction.commit();
- childTransaction.destroy();
- childTransaction = null;
- return;
+ readOnlyNestedTransaction.commit();
+ readOnlyNestedTransaction.destroy();
+ readOnlyNestedTransaction = null;
}
}
@@ -1474,7 +1499,7 @@
*/
public TransactionController getTransactionCompile()
{
- return (childTransaction != null) ? childTransaction : tran;
+ return (readOnlyNestedTransaction != null) ? readOnlyNestedTransaction : tran;
}
public TransactionController getTransactionExecute()