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();
+ }
+ }
}