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 2014/01/21 19:38:08 UTC

svn commit: r1560134 - in /db/derby/code/trunk/java: engine/org/apache/derby/impl/sql/compile/ testing/org/apache/derbyTesting/functionTests/tests/lang/

Author: rhillegas
Date: Tue Jan 21 18:38:08 2014
New Revision: 1560134

URL: http://svn.apache.org/r1560134
Log:
DERBY-3155: Allow for row location columns in the result column list of base tables; tests passed cleanly for me on derby-3155-16-aa-treatCurrentRowLocationNodeLikeBaseColumnNode.diff.

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromBaseTable.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumnList.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/MergeStatementTest.java

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromBaseTable.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromBaseTable.java?rev=1560134&r1=1560133&r2=1560134&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromBaseTable.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromBaseTable.java Tue Jan 21 18:38:08 2014
@@ -2926,6 +2926,7 @@ class FromBaseTable extends FromTable
 		 */
 		ResultColumnList prRCList = resultColumns;
 		resultColumns = resultColumns.copyListAndObjects();
+		resultColumns.setIndexRow( baseConglomerateDescriptor.getConglomerateNumber(), forUpdate() );
 
 		/* Replace ResultColumn.expression with new VirtualColumnNodes
 		 * in the ProjectRestrictNode's ResultColumnList.  (VirtualColumnNodes include

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumnList.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumnList.java?rev=1560134&r1=1560133&r2=1560134&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumnList.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumnList.java Tue Jan 21 18:38:08 2014
@@ -3648,7 +3648,13 @@ class ResultColumnList extends QueryTree
 				 */
 				if (onlyBCNs && ! (oldCol.getExpression() instanceof BaseColumnNode))
 				{
-					continue;
+                    boolean skipable =
+                        ( ! (oldCol.getExpression() instanceof BaseColumnNode) ) &&
+                        ( ! (oldCol.getExpression() instanceof CurrentRowLocationNode) );
+                    if ( skipable )
+                    {
+                        continue;
+                    }
 				}
 				newReferencedCols.set(index);
 				colsAdded++;

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/MergeStatementTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/MergeStatementTest.java?rev=1560134&r1=1560133&r2=1560134&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/MergeStatementTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/MergeStatementTest.java Tue Jan 21 18:38:08 2014
@@ -4634,6 +4634,65 @@ public class MergeStatementTest extends 
         goodStatement( dboConnection, "drop view singlerow_028" );
     }
     
+    /**
+     * <p>
+     * This case tests a problem query which causes an index scan to
+     * be selected for the target table. Row locations weren't being treated
+     * as columns in the result row and conglomerate info was not being
+     * propagated to copied ResultColumnLists.
+     * </p>
+     */
+    public  void    test_029_scanViaIndex()
+        throws Exception
+    {
+        Connection  dboConnection = openUserConnection( TEST_DBO );
+
+        //
+        // create schema
+        //
+        goodStatement
+            (
+             dboConnection,
+             "create table t1_029(x int primary key)"
+             );
+        goodStatement
+            (
+             dboConnection,
+             "create table t2_029(x int)"
+             );
+        goodStatement
+            (
+             dboConnection,
+             "insert into t2_029 values( 33 )"
+             );
+
+        // this was the problem query
+        goodUpdate
+            (
+             dboConnection,
+             "merge into t1_029\n" +
+             "using t2_029 on t1_029.x = 42\n" +
+             "when not matched then insert (x) values (42)\n",
+             1
+             );
+        assertResults
+            (
+             dboConnection,
+             "select  * from t1_029 order by x",
+             new String[][]
+             {
+                 { "42" },
+             },
+             false
+             );
+
+        //
+        // drop schema
+        //
+        goodStatement( dboConnection, "drop table t1_029" );
+        goodStatement( dboConnection, "drop table t2_029" );
+    }
+    
     ///////////////////////////////////////////////////////////////////////////////////
     //
     // ROUTINES