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 2011/03/25 21:33:53 UTC

svn commit: r1085551 - in /db/derby/code/branches/10.4: ./ java/engine/org/apache/derby/impl/sql/execute/ java/testing/org/apache/derbyTesting/functionTests/tests/lang/

Author: kmarsden
Date: Fri Mar 25 20:33:53 2011
New Revision: 1085551

URL: http://svn.apache.org/viewvc?rev=1085551&view=rev
Log: (empty)

Modified:
    db/derby/code/branches/10.4/   (props changed)
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/CallStatementResultSet.java
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/DeleteResultSet.java
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/DeleteVTIResultSet.java
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/InsertResultSet.java
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/InsertVTIResultSet.java
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/MiscResultSet.java
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/NoRowsResultSetImpl.java
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/SetTransactionResultSet.java
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/UpdateResultSet.java
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/UpdateVTIResultSet.java
    db/derby/code/branches/10.4/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ResultSetsFromPreparedStatementTest.java

Propchange: db/derby/code/branches/10.4/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Mar 25 20:33:53 2011
@@ -1,3 +1,3 @@
-/db/derby/code/branches/10.5:814216,958230
+/db/derby/code/branches/10.5:814216,904472,958230
 /db/derby/code/branches/10.6:1055601
-/db/derby/code/trunk:788436,788968,793588,794303,796316,796372,797147,798347,798742,800523,803548,805696,809643,812669,816536,835286,882732,898635,915177,915733,917771,928065,934996,946794,954544,958163,958230,959550,980684,999119,1053724,1057542,1062096
+/db/derby/code/trunk:788436,788968,793588,794303,796316,796372,797147,798347,798742,800523,803548,805696,809643,812669,816536,835286,882732,898635,903108,915177,915733,917771,928065,934996,946794,954544,958163,958230,959550,980684,999119,1053724,1057542,1062096

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/CallStatementResultSet.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/CallStatementResultSet.java?rev=1085551&r1=1085550&r2=1085551&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/CallStatementResultSet.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/CallStatementResultSet.java Fri Mar 25 20:33:53 2011
@@ -59,7 +59,6 @@ class CallStatementResultSet extends NoR
     CallStatementResultSet(
 				GeneratedMethod methodCall,
 				Activation a) 
-			throws StandardException
     {
 		super(a);
 		this.methodCall = methodCall;

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/DeleteResultSet.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/DeleteResultSet.java?rev=1085551&r1=1085550&r2=1085551&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/DeleteResultSet.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/DeleteResultSet.java Fri Mar 25 20:33:53 2011
@@ -200,9 +200,6 @@ class DeleteResultSet extends DMLWriteRe
 		activation.checkStatementValidity();
 
 		/* Get or re-use the row changer.
-		 * NOTE: We need to set ourself as the top result set
-		 * if this is not the 1st execution.  (Done in constructor
-		 * for 1st execution.)
 		 */
 		if (firstExecute)
 		{
@@ -223,10 +220,7 @@ class DeleteResultSet extends DMLWriteRe
 								constants.getStreamStorableHeapColIds(),
 								activation);
 		}
-		else
-		{
-			lcc.getStatementContext().setTopResultSet(this, subqueryTrackingArray);
-		}
+
 		/* decode the lock mode for the execution isolation level */
 		lockMode = decodeLockMode(constants.lockMode);
 

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/DeleteVTIResultSet.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/DeleteVTIResultSet.java?rev=1085551&r1=1085550&r2=1085551&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/DeleteVTIResultSet.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/DeleteVTIResultSet.java Fri Mar 25 20:33:53 2011
@@ -75,8 +75,6 @@ class DeleteVTIResultSet extends DMLVTIR
 	*/
 	protected void openCore() throws StandardException
 	{
-		lcc.getStatementContext().setTopResultSet(this, subqueryTrackingArray);
-
 		ExecRow row = getNextRowCore(sourceResultSet);
 
 		if (row != null)

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/InsertResultSet.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/InsertResultSet.java?rev=1085551&r1=1085550&r2=1085551&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/InsertResultSet.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/InsertResultSet.java Fri Mar 25 20:33:53 2011
@@ -877,9 +877,6 @@ class InsertResultSet extends DMLWriteRe
                 long user_autoinc=0;
                         
 		/* Get or re-use the row changer.
-		 * NOTE: We need to set ourself as the top result set
-		 * if this is not the 1st execution.  (Done in constructor
-		 * for 1st execution.)
 		 */
 		if (firstExecute)
 		{
@@ -900,10 +897,6 @@ class InsertResultSet extends DMLWriteRe
 							       );
 			rowChanger.setIndexNames(constants.indexNames);
 		}
-		else
-		{
-			lcc.getStatementContext().setTopResultSet(this, subqueryTrackingArray);
-		}
 
 		/* decode lock mode for the execution isolation level */
 		int lockMode = decodeLockMode(constants.lockMode);

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/InsertVTIResultSet.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/InsertVTIResultSet.java?rev=1085551&r1=1085550&r2=1085551&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/InsertVTIResultSet.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/InsertVTIResultSet.java Fri Mar 25 20:33:53 2011
@@ -107,16 +107,6 @@ class InsertVTIResultSet extends DMLVTIR
 			throw StandardException.unexpectedUserException(t);
 		}
 
-		/* Get or re-use the row changer.
-		 * NOTE: We need to set ourself as the top result set
-		 * if this is not the 1st execution.  (Done in constructor
-		 * for 1st execution.)
-		 */
-		if (! firstExecute)
-		{
-			lcc.getStatementContext().setTopResultSet(this, subqueryTrackingArray);
-		}
-
 		/* The source does not know whether or not we are doing a
 		 * deferred mode insert.  If we are, then we must clear the
 		 * index scan info from the activation so that the row changer

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/MiscResultSet.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/MiscResultSet.java?rev=1085551&r1=1085550&r2=1085551&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/MiscResultSet.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/MiscResultSet.java Fri Mar 25 20:33:53 2011
@@ -43,11 +43,8 @@ class MiscResultSet extends NoRowsResult
      * Construct a MiscResultSet
 	 *
 	 *  @param activation		Describes run-time environment.
-	 *
-	 *  @exception StandardException Standard Derby error policy.
      */
     MiscResultSet(Activation activation)
-		 throws StandardException
     {
 		super(activation);
 	}

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/NoRowsResultSetImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/NoRowsResultSetImpl.java?rev=1085551&r1=1085550&r2=1085551&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/NoRowsResultSetImpl.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/NoRowsResultSetImpl.java Fri Mar 25 20:33:53 2011
@@ -59,7 +59,7 @@ abstract class NoRowsResultSetImpl imple
 {
 	final Activation    activation;
 	private boolean dumpedStats;
-	NoPutResultSet[]	subqueryTrackingArray;
+	private NoPutResultSet[]	subqueryTrackingArray;
 
 	private final boolean statisticsTimingOn;
 	/** True if the result set has been opened, and not yet closed. */
@@ -73,7 +73,6 @@ abstract class NoRowsResultSetImpl imple
 	protected long endExecutionTime;
 
 	NoRowsResultSetImpl(Activation activation)
-		throws StandardException
 	{
 		this.activation = activation;
 
@@ -91,12 +90,6 @@ abstract class NoRowsResultSetImpl imple
 		 */
 		beginTime = getCurrentTimeMillis();
 		beginExecutionTime = beginTime;
-
-		StatementContext sc = lcc.getStatementContext();
-		sc.setTopResultSet(this, (NoPutResultSet[]) null);
-
-		// Pick up any materialized subqueries
-		subqueryTrackingArray = sc.getSubqueryTrackingArray();
 	}
 
 	/**
@@ -107,6 +100,14 @@ abstract class NoRowsResultSetImpl imple
 	 */
 	void setup() throws StandardException {
 		isOpen = true;
+
+        StatementContext sc = lcc.getStatementContext();
+        sc.setTopResultSet(this, subqueryTrackingArray);
+
+        // Pick up any materialized subqueries
+        if (subqueryTrackingArray == null) {
+            subqueryTrackingArray = sc.getSubqueryTrackingArray();
+        }
 	}
 
     /**

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/SetTransactionResultSet.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/SetTransactionResultSet.java?rev=1085551&r1=1085550&r2=1085551&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/SetTransactionResultSet.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/SetTransactionResultSet.java Fri Mar 25 20:33:53 2011
@@ -40,11 +40,8 @@ class SetTransactionResultSet extends Mi
      * Construct a SetTransactionResultSet
 	 *
 	 *  @param activation		Describes run-time environment.
-	 *
-	 *  @exception StandardException Standard Derby error policy.
      */
     SetTransactionResultSet(Activation activation)
-		 throws StandardException
     {
 		super(activation);
 	}

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/UpdateResultSet.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/UpdateResultSet.java?rev=1085551&r1=1085550&r2=1085551&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/UpdateResultSet.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/UpdateResultSet.java Fri Mar 25 20:33:53 2011
@@ -293,9 +293,6 @@ class UpdateResultSet extends DMLWriteRe
 		}
 
 		/* Get or re-use the row changer.
-		 * NOTE: We need to set ourself as the top result set
-		 * if this is not the 1st execution.  (Done in constructor
-		 * for 1st execution.)
 		 */
 		if (firstOpen)
 		{
@@ -316,10 +313,6 @@ class UpdateResultSet extends DMLWriteRe
 										 activation);
 			rowChanger.setIndexNames(constants.indexNames);
 		}
-		else
-		{
-			lcc.getStatementContext().setTopResultSet(this, subqueryTrackingArray);
-		}
 
 
 		/* Open the RowChanger before the source ResultSet so that

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/UpdateVTIResultSet.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/UpdateVTIResultSet.java?rev=1085551&r1=1085550&r2=1085551&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/UpdateVTIResultSet.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/sql/execute/UpdateVTIResultSet.java Fri Mar 25 20:33:53 2011
@@ -76,8 +76,6 @@ class UpdateVTIResultSet extends DMLVTIR
 
         if( null != row)
             rowLocationColumn = row.nColumns();
-		if (!firstExecute)
-			lcc.getStatementContext().setTopResultSet(this, subqueryTrackingArray);
 
 		/* The source does not know whether or not we are doing a
 		 * deferred mode insert.  If we are, then we must clear the

Modified: db/derby/code/branches/10.4/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ResultSetsFromPreparedStatementTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ResultSetsFromPreparedStatementTest.java?rev=1085551&r1=1085550&r2=1085551&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ResultSetsFromPreparedStatementTest.java (original)
+++ db/derby/code/branches/10.4/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ResultSetsFromPreparedStatementTest.java Fri Mar 25 20:33:53 2011
@@ -172,6 +172,8 @@ public class ResultSetsFromPreparedState
 
     private static final long DERBY_DEFAULT_TIMEOUT = 60;
 
+    private static final String SQLSTATE_NULL_INTO_NON_NULL = "23502";
+
     /**
      * Creates a String containing an insert statement for the
      * specified table containing the specified number of '?'
@@ -2521,4 +2523,30 @@ public class ResultSetsFromPreparedState
         stm.execute("SET SCHEMA " + schema);
         stm.close();
     }
+
+    /**
+     * Test case for DERBY-4488, where the third execution of a statement
+     * that attempted to insert a NULL into a non-nullable column failed with
+     * a NullPointerException.
+     */
+    public void testInsertNullIntoNonNullableColumn() throws SQLException {
+        setAutoCommit(false);
+
+        Statement s = createStatement();
+        s.execute("create table d4488_t1 (pk int primary key)");
+        s.execute("insert into d4488_t1 values 1");
+        s.execute("create table d4488_t2 (c1 int, c2 int not null)");
+        commit();
+
+        PreparedStatement ps = prepareStatement(
+                "insert into d4488_t2(c1) select 1 from d4488_t1");
+        for (int i = 0; i < 5; i++) {
+            // Expect this to fail, but not with NullPointerException.
+            assertStatementError(SQLSTATE_NULL_INTO_NON_NULL, ps);
+            // Need a rollback here in order to close the index scan on
+            // D4488_T1, otherwise the NPE won't reproduce. Alternatively,
+            // run with auto-commit enabled.
+            rollback();
+        }
+    }
 }