Return-Path: X-Original-To: apmail-db-derby-commits-archive@www.apache.org Delivered-To: apmail-db-derby-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 673C310093 for ; Fri, 17 Jan 2014 18:50:38 +0000 (UTC) Received: (qmail 75375 invoked by uid 500); 17 Jan 2014 18:50:38 -0000 Delivered-To: apmail-db-derby-commits-archive@db.apache.org Received: (qmail 75355 invoked by uid 500); 17 Jan 2014 18:50:38 -0000 Mailing-List: contact derby-commits-help@db.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: "Derby Development" List-Id: Delivered-To: mailing list derby-commits@db.apache.org Received: (qmail 75348 invoked by uid 99); 17 Jan 2014 18:50:37 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 17 Jan 2014 18:50:37 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 17 Jan 2014 18:50:36 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 74CAF2388993; Fri, 17 Jan 2014 18:50:16 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1559218 - in /db/derby/code/trunk/java: engine/org/apache/derby/impl/sql/execute/MergeResultSet.java testing/org/apache/derbyTesting/functionTests/tests/lang/MergeStatementTest.java Date: Fri, 17 Jan 2014 18:50:16 -0000 To: derby-commits@db.apache.org From: rhillegas@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140117185016.74CAF2388993@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: rhillegas Date: Fri Jan 17 18:50:15 2014 New Revision: 1559218 URL: http://svn.apache.org/r1559218 Log: DERBY-3155: Make cleanup logic in MergeResultSet more closely resemble the cleanup logic in InsertResultSet; commit derby-3155-15-aa-replumbMergeResultSetCleanup.diff. Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/MergeResultSet.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/execute/MergeResultSet.java URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/MergeResultSet.java?rev=1559218&r1=1559217&r2=1559218&view=diff ============================================================================== --- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/MergeResultSet.java (original) +++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/MergeResultSet.java Fri Jan 17 18:50:15 2014 @@ -60,6 +60,8 @@ class MergeResultSet extends NoRowsResul private long _rowCount; private TemporaryRowHolderImpl[] _thenRows; + private int numOpens; + /////////////////////////////////////////////////////////////////////////////////// // // CONSTRUCTOR @@ -95,6 +97,15 @@ class MergeResultSet extends NoRowsResul { setup(); + if (numOpens++ == 0) + { + _drivingLeftJoin.openCore(); + } + else + { + _drivingLeftJoin.reopenCore(); + } + boolean rowsFound = collectAffectedRows(); if ( !rowsFound ) { @@ -124,7 +135,6 @@ class MergeResultSet extends NoRowsResul } _rowCount = 0L; - _drivingLeftJoin.openCore(); } /** @@ -149,12 +159,15 @@ class MergeResultSet extends NoRowsResul _constants.getMatchingClause( i ).cleanUp(); } + + if ( _drivingLeftJoin != null ) { _drivingLeftJoin.close(); } + numOpens = 0; } public void finish() throws StandardException { - _drivingLeftJoin.finish(); + if ( _drivingLeftJoin != null ) { _drivingLeftJoin.finish(); } super.finish(); } 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=1559218&r1=1559217&r2=1559218&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 Fri Jan 17 18:50:15 2014 @@ -4565,6 +4565,75 @@ public class MergeStatementTest extends goodStatement( dboConnection, "drop table t1_027" ); } + /** + *

+ * Verify that you can drive MERGE statements from row-based triggers. + *

+ */ + public void test_028_basicRowTrigger() + throws Exception + { + Connection dboConnection = openUserConnection( TEST_DBO ); + + // + // create schema + // + goodStatement + ( + dboConnection, + "create view singlerow_028( x ) as values 1" + ); + goodStatement + ( + dboConnection, + "create table t1_028( x int )" + ); + goodStatement + ( + dboConnection, + "create table t2_028( y int )" + ); + goodStatement + ( + dboConnection, + "create trigger tr after insert on t1_028\n" + + "referencing new as new\n" + + "for each row\n" + + "merge into t2_028\n" + + "using singlerow_028 on t2_028.y = new.x\n" + + "when not matched then insert ( y ) values ( new.x )\n" + ); + + // now exercise the trigger + goodStatement + ( + dboConnection, + "insert into t1_028 values 1,2,3,4,5,4,3,2,1,1,1,2,3,100" + ); + assertResults + ( + dboConnection, + "select * from t2_028 order by y", + new String[][] + { + { "1" }, + { "2" }, + { "3" }, + { "4" }, + { "5" }, + { "100" }, + }, + false + ); + + // + // drop schema + // + goodStatement( dboConnection, "drop table t1_028" ); + goodStatement( dboConnection, "drop table t2_028" ); + goodStatement( dboConnection, "drop view singlerow_028" ); + } + /////////////////////////////////////////////////////////////////////////////////// // // ROUTINES