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 2005/01/22 17:11:06 UTC

svn commit: r126039 - in incubator/derby/code/trunk/java/engine/org/apache/derby: iapi/sql/conn impl/jdbc impl/sql/conn jdbc

Author: djd
Date: Sat Jan 22 08:11:05 2005
New Revision: 126039

URL: http://svn.apache.org/viewcvs?view=rev&rev=126039
Log:
Fix Derby-130 - IDENTITY_VAL_LOCAL not reset when EmbedConnection object re-used from pool.
Added generic resetFromPool method to handle future situations.

Modified:
   incubator/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/conn/LanguageConnectionContext.java
   incubator/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection20.java
   incubator/derby/code/trunk/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java
   incubator/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection.java

Modified: incubator/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/conn/LanguageConnectionContext.java
Url: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/conn/LanguageConnectionContext.java?view=diff&rev=126039&p1=incubator/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/conn/LanguageConnectionContext.java&r1=126038&p2=incubator/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/conn/LanguageConnectionContext.java&r2=126039
==============================================================================
--- incubator/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/conn/LanguageConnectionContext.java	(original)
+++ incubator/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/conn/LanguageConnectionContext.java	Sat Jan 22 08:11:05 2005
@@ -233,12 +233,10 @@
 	public TableDescriptor getTableDescriptorForDeclaredGlobalTempTable(String tableName);
 
 	/**
-	 * Drop all the declared global temporary tables associated with this connection. This gets called
-	 * when a getConnection() is done on a PooledConnection. This will ensure all the temporary tables
-	 * declared on earlier connection handle associated with this physical database connection are dropped
-	 * before a new connection handle is issued on that same physical database connection.
+		Reset the connection before it is returned (indirectly) by
+		a PooledConnection object. See EmbeddedConnection.
 	 */
-	public void dropAllDeclaredGlobalTempTables()
+	public void resetFromPool()
 		 throws StandardException;
 
 	/**

Modified: incubator/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection20.java
Url: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection20.java?view=diff&rev=126039&p1=incubator/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection20.java&r1=126038&p2=incubator/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection20.java&r2=126039
==============================================================================
--- incubator/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection20.java	(original)
+++ incubator/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection20.java	Sat Jan 22 08:11:05 2005
@@ -62,18 +62,19 @@
 	}
 
 	/**
-	 * Drop all the declared global temporary tables associated with this connection. This gets called
-	 * when a getConnection() is done on a PooledConnection. This will ensure all the temporary tables
-	 * declared on earlier connection handle associated with this physical database connection are dropped
-	 * before a new connection handle is issued on that same physical database connection.
-	 *
+		Reset the connection before it is returned from a PooledConnection
+		to a new application request (wrapped by a BrokeredConnection).
+		Examples of reset covered here is dropping session temporary tables
+		and reseting IDENTITY_VAL_LOCAL.
+		Most JDBC level reset is handled by calling standard java.sql.Connection
+		methods from EmbedPooledConnection.
 	 */
-	public void dropAllDeclaredGlobalTempTables() throws SQLException {
+	public void resetFromPool() throws SQLException {
 		synchronized (getConnectionSynchronization())
 		{
 			setupContextStack();
 			try {
-				getLanguageConnection().dropAllDeclaredGlobalTempTables();
+				getLanguageConnection().resetFromPool();
 			} catch (StandardException t) {
 				throw handleException(t);
 			}

Modified: incubator/derby/code/trunk/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java
Url: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java?view=diff&rev=126039&p1=incubator/derby/code/trunk/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java&r1=126038&p2=incubator/derby/code/trunk/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java&r2=126039
==============================================================================
--- incubator/derby/code/trunk/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java	(original)
+++ incubator/derby/code/trunk/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java	Sat Jan 22 08:11:05 2005
@@ -523,9 +523,26 @@
 	}
 
 	/**
-	 * @see LanguageConnectionContext#dropAllDeclaredGlobalTempTables
+		Reset the connection before it is returned (indirectly) by
+		a PooledConnection object. See EmbeddedConnection.
 	 */
-	public void dropAllDeclaredGlobalTempTables() throws StandardException {
+	public void resetFromPool()
+		 throws StandardException
+	{
+		// Reset IDENTITY_VAL_LOCAL
+		identityNotNull = false;
+
+		// drop all temp tables.
+		dropAllDeclaredGlobalTempTables();
+	}
+
+	/**
+	 * Drop all the declared global temporary tables associated with this connection. This gets called
+	 * when a getConnection() is done on a PooledConnection. This will ensure all the temporary tables
+	 * declared on earlier connection handle associated with this physical database connection are dropped
+	 * before a new connection handle is issued on that same physical database connection.
+	 */
+	private void dropAllDeclaredGlobalTempTables() throws StandardException {
 		if (allDeclaredGlobalTempTables == null)
 			return;
     

Modified: incubator/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection.java
Url: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection.java?view=diff&rev=126039&p1=incubator/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection.java&r1=126038&p2=incubator/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection.java&r2=126039
==============================================================================
--- incubator/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection.java	(original)
+++ incubator/derby/code/trunk/java/engine/org/apache/derby/jdbc/EmbedPooledConnection.java	Sat Jan 22 08:11:05 2005
@@ -202,8 +202,8 @@
 		if (realConnection.getHoldability() != JDBC30Translation.HOLD_CURSORS_OVER_COMMIT)
 			realConnection.setHoldability(JDBC30Translation.HOLD_CURSORS_OVER_COMMIT);
 
-		// drop any temporary tables that may have been declared by the previous user
-		realConnection.dropAllDeclaredGlobalTempTables();
+		// reset any remaining state of the connection
+		realConnection.resetFromPool();
 	}
 
 	/**