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/22 21:56:59 UTC

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

Author: rhillegas
Date: Wed Jan 22 20:56:58 2014
New Revision: 1560507

URL: http://svn.apache.org/r1560507
Log:
DERBY-3155: Basic support for views as the source tables of MERGE statements; commit derby-3155-18-aa-basicView.diff.

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.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/UpdateNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java?rev=1560507&r1=1560506&r2=1560507&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java Wed Jan 22 20:56:58 2014
@@ -381,7 +381,11 @@ public final class UpdateNode extends DM
 			((FromBaseTable) targetTable).markUpdated(
 												resultSet.getResultColumns());
 		}
-		else if (targetTable instanceof FromVTI)
+		else if
+            (
+             (targetTable instanceof FromVTI) ||
+             (targetTable instanceof FromSubquery)
+             )
 		{
             resultColumnList = resultSet.getResultColumns();
 		}

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=1560507&r1=1560506&r2=1560507&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 Wed Jan 22 20:56:58 2014
@@ -4756,6 +4756,75 @@ public class MergeStatementTest extends 
         goodStatement( dboConnection, "drop table t2_030" );
     }
     
+    /**
+     * <p>
+     * Verify the fix to a query involving a view.
+     * </p>
+     */
+    public  void    test_031_view()
+        throws Exception
+    {
+        Connection  dboConnection = openUserConnection( TEST_DBO );
+
+        //
+        // create schema
+        //
+        goodStatement
+            (
+             dboConnection,
+             "create table t1_031(x int, y int)"
+             );
+        goodStatement
+            (
+             dboConnection,
+             "create table tv_031(x int, y int)"
+             );
+        goodStatement
+            (
+             dboConnection,
+             "create view v_031 as select * from tv_031"
+             );
+        goodStatement
+            (
+             dboConnection,
+             "insert into t1_031 values ( 1, 100 ), ( 2, 200 ), ( 3, 300 )"
+             );
+        goodStatement
+            (
+             dboConnection,
+             "insert into tv_031 values ( 1, 1000 ), ( 3, 3000 ), ( 4, 4000 )"
+             );
+
+        // verify the fix
+        goodUpdate
+            (
+             dboConnection,
+             "merge into t1_031\n" +
+             "using v_031 on t1_031.x = v_031.x\n" +
+             "when matched then update set t1_031.y = v_031.y\n",
+             2
+             );
+        assertResults
+            (
+             dboConnection,
+             "select * from t1_031 order by x",
+             new String[][]
+             {
+                 { "1", "1000" },
+                 { "2", "200" },
+                 { "3", "3000" },
+             },
+             false
+             );
+
+        //
+        // drop schema
+        //
+        goodStatement( dboConnection, "drop view v_031" );
+        goodStatement( dboConnection, "drop table t1_031" );
+        goodStatement( dboConnection, "drop table tv_031" );
+    }
+    
     ///////////////////////////////////////////////////////////////////////////////////
     //
     // ROUTINES