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 rh...@apache.org on 2013/06/14 18:26:05 UTC
svn commit: r1493146 - in /db/derby/code/branches/10.10: ./
java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java
java/testing/org/apache/derbyTesting/functionTests/tests/lang/DeclareGlobalTempTableJavaJDBC30Test.java
Author: rhillegas
Date: Fri Jun 14 16:26:05 2013
New Revision: 1493146
URL: http://svn.apache.org/r1493146
Log:
DERBY-6189: Merge 1469802 and 1469861 from trunk to 10.10 branch.
Modified:
db/derby/code/branches/10.10/ (props changed)
db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java
db/derby/code/branches/10.10/java/testing/org/apache/derbyTesting/functionTests/tests/lang/DeclareGlobalTempTableJavaJDBC30Test.java
Propchange: db/derby/code/branches/10.10/
------------------------------------------------------------------------------
Merged /db/derby/code/trunk:r1469802,1469861
Modified: db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java?rev=1493146&r1=1493145&r2=1493146&view=diff
==============================================================================
--- db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java (original)
+++ db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java Fri Jun 14 16:26:05 2013
@@ -953,6 +953,7 @@ public class GenericLanguageConnectionCo
// conglomerate associated with it
TableDescriptor td = tempTableInfo.getTableDescriptor();
+ invalidateCleanupDroppedTable( td );
//remove the conglomerate created for this temp table
tran.dropConglomerate(td.getHeapConglomerateId());
@@ -1006,10 +1007,7 @@ public class GenericLanguageConnectionCo
tempTableInfo.setModifiedInSavepointLevel(-1);
TableDescriptor td = tempTableInfo.getTableDescriptor();
- getDataDictionary().getDependencyManager().invalidateFor(
- td, DependencyManager.DROP_TABLE, this);
-
- cleanupTempTableOnCommitOrRollback(td, true);
+ invalidateCleanupDroppedTable( td );
}
// there is no else here because there is no special processing
// required for temp tables declares in earlier work of
@@ -1017,7 +1015,17 @@ public class GenericLanguageConnectionCo
}
if (allDeclaredGlobalTempTables.size() == 0)
+ {
allDeclaredGlobalTempTables = null;
+ }
+ }
+
+ /** Invalidate a dropped temp table */
+ private void invalidateCleanupDroppedTable( TableDescriptor td )
+ throws StandardException
+ {
+ getDataDictionary().getDependencyManager().invalidateFor( td, DependencyManager.DROP_TABLE, this );
+ cleanupTempTableOnCommitOrRollback( td, true );
}
/**
Modified: db/derby/code/branches/10.10/java/testing/org/apache/derbyTesting/functionTests/tests/lang/DeclareGlobalTempTableJavaJDBC30Test.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.10/java/testing/org/apache/derbyTesting/functionTests/tests/lang/DeclareGlobalTempTableJavaJDBC30Test.java?rev=1493146&r1=1493145&r2=1493146&view=diff
==============================================================================
--- db/derby/code/branches/10.10/java/testing/org/apache/derbyTesting/functionTests/tests/lang/DeclareGlobalTempTableJavaJDBC30Test.java (original)
+++ db/derby/code/branches/10.10/java/testing/org/apache/derbyTesting/functionTests/tests/lang/DeclareGlobalTempTableJavaJDBC30Test.java Fri Jun 14 16:26:05 2013
@@ -927,5 +927,26 @@ public class DeclareGlobalTempTableJavaJ
JDBC.assertSingleValueResultSet(s.executeQuery(
"select count(*) from SESSION.tx") , "3");
s.executeUpdate("drop table SESSION.tx");
- }
+ }
+
+ /**
+ * Test that we don't get an NPE when re-using a PreparedStatement
+ * on a temp table declared and then rolled back. See DERBY-6189.
+ */
+ public void test_derby_6189() throws Exception
+ {
+ Connection conn = getConnection();
+
+ conn.prepareStatement
+ ( "DECLARE GLOBAL TEMPORARY TABLE SESSION.t6189( c21 int, c22 int) not logged on commit preserve rows" )
+ .execute();
+ PreparedStatement pStmtInsert = conn.prepareStatement( "insert into SESSION.t6189 values (23, 1)" );
+
+ pStmtInsert.execute();
+
+ conn.rollback();
+
+ assertStatementError("42X05", pStmtInsert);
+ }
+
}