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 2013/12/10 20:48:28 UTC
svn commit: r1549948 -
/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/MergeStatementTest.java
Author: rhillegas
Date: Tue Dec 10 19:48:28 2013
New Revision: 1549948
URL: http://svn.apache.org/r1549948
Log:
DERBY-3155: Add tests to verify that BEFORE triggers can't fire MERGE statements, just as they can't fire INSERT/UPDATE/DELETE statements; commit derby-3155-11-ab-beforeTriggersCantFireMerge.diff.
Modified:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/MergeStatementTest.java
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=1549948&r1=1549947&r2=1549948&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 Dec 10 19:48:28 2013
@@ -70,6 +70,7 @@ public class MergeStatementTest extends
private static final String DUPLICATE_SET_COLUMNS = "42X16";
private static final String MISSING_TABLE = "42X05";
private static final String NO_ROWS_AFFECTED = "02000";
+ private static final String NO_DML_IN_BEFORE_TRIGGERS = "42Z9D";
private static final String[] TRIGGER_HISTORY_COLUMNS = new String[] { "ACTION", "ACTION_VALUE" };
@@ -4155,6 +4156,150 @@ public class MergeStatementTest extends
}
///////////////////////////////////////////////////////////////////////////////////
+
+ /**
+ * <p>
+ * Verify that BEFORE triggers can't fire MERGE statements.
+ * </p>
+ */
+ public void test_024_mergeNotAllowedInBeforeTriggers()
+ throws Exception
+ {
+ Connection dboConnection = openUserConnection( TEST_DBO );
+
+ //
+ // create schema
+ //
+ goodStatement
+ (
+ dboConnection,
+ "create table t1_024( c1 int, c2 int, c3 int generated always as ( c1 + c2 ), c1_4 int )"
+ );
+ goodStatement
+ (
+ dboConnection,
+ "create table t2_024( c1 int, c2 int, c3 int, c4 int, c5 varchar( 5 ) )"
+ );
+ goodStatement
+ (
+ dboConnection,
+ "create table t3_024( a int )"
+ );
+
+ //
+ // BEFORE DELETE triggers can't fire DML statements.
+ //
+ expectCompilationError
+ ( dboConnection, NO_DML_IN_BEFORE_TRIGGERS,
+ "create trigger t3_024_del_insert_before\n" +
+ "no cascade before delete on t3_024\n" +
+ "for each statement\n" +
+ "insert into t1_024( c1, c2 ) values ( 1, 2 )\n"
+ );
+ expectCompilationError
+ ( dboConnection, NO_DML_IN_BEFORE_TRIGGERS,
+ "create trigger t3_024_del_update_before\n" +
+ "no cascade before delete on t3_024\n" +
+ "for each statement\n" +
+ "update t1_024 set c1 = 1\n"
+ );
+ expectCompilationError
+ ( dboConnection, NO_DML_IN_BEFORE_TRIGGERS,
+ "create trigger t3_024_del_delete_before\n" +
+ "no cascade before delete on t3_024\n" +
+ "for each statement\n" +
+ "delete from t1_024\n"
+ );
+ expectCompilationError
+ ( dboConnection, NO_DML_IN_BEFORE_TRIGGERS,
+ "create trigger t3_024_del_merge_before\n" +
+ "no cascade before delete on t3_024\n" +
+ "for each statement\n" +
+ "merge into t1_024\n" +
+ "using t2_024\n" +
+ "on t1_024.c1 = t2_024.c1\n" +
+ "when matched then delete\n"
+ );
+
+ //
+ // BEFORE INSERT triggers can't fire DML statements.
+ //
+ expectCompilationError
+ ( dboConnection, NO_DML_IN_BEFORE_TRIGGERS,
+ "create trigger t3_024_ins_insert_before\n" +
+ "no cascade before insert on t3_024\n" +
+ "for each statement\n" +
+ "insert into t1_024( c1, c2 ) values ( 1, 2 )\n"
+ );
+ expectCompilationError
+ ( dboConnection, NO_DML_IN_BEFORE_TRIGGERS,
+ "create trigger t3_024_ins_update_before\n" +
+ "no cascade before insert on t3_024\n" +
+ "for each statement\n" +
+ "update t1_024 set c1 = 1\n"
+ );
+ expectCompilationError
+ ( dboConnection, NO_DML_IN_BEFORE_TRIGGERS,
+ "create trigger t3_024_ins_delete_before\n" +
+ "no cascade before insert on t3_024\n" +
+ "for each statement\n" +
+ "delete from t1_024\n"
+ );
+ expectCompilationError
+ ( dboConnection, NO_DML_IN_BEFORE_TRIGGERS,
+ "create trigger t3_024_ins_merge_before\n" +
+ "no cascade before insert on t3_024\n" +
+ "for each statement\n" +
+ "merge into t1_024\n" +
+ "using t2_024\n" +
+ "on t1_024.c1 = t2_024.c1\n" +
+ "when matched then delete\n"
+ );
+
+ //
+ // BEFORE UPDATE triggers can't fire DML statements.
+ //
+ expectCompilationError
+ ( dboConnection, NO_DML_IN_BEFORE_TRIGGERS,
+ "create trigger t3_024_upd_insert_before\n" +
+ "no cascade before update on t3_024\n" +
+ "for each statement\n" +
+ "insert into t1_024( c1, c2 ) values ( 1, 2 )\n"
+ );
+ expectCompilationError
+ ( dboConnection, NO_DML_IN_BEFORE_TRIGGERS,
+ "create trigger t3_024_upd_update_before\n" +
+ "no cascade before update on t3_024\n" +
+ "for each statement\n" +
+ "update t1_024 set c1 = 1\n"
+ );
+ expectCompilationError
+ ( dboConnection, NO_DML_IN_BEFORE_TRIGGERS,
+ "create trigger t3_024_upd_delete_before\n" +
+ "no cascade before update on t3_024\n" +
+ "for each statement\n" +
+ "delete from t1_024\n"
+ );
+ expectCompilationError
+ ( dboConnection, NO_DML_IN_BEFORE_TRIGGERS,
+ "create trigger t3_024_upd_merge_before\n" +
+ "no cascade before update on t3_024\n" +
+ "for each statement\n" +
+ "merge into t1_024\n" +
+ "using t2_024\n" +
+ "on t1_024.c1 = t2_024.c1\n" +
+ "when matched then delete\n"
+ );
+
+ //
+ // drop schema
+ //
+ goodStatement( dboConnection, "drop table t3_024" );
+ goodStatement( dboConnection, "drop table t2_024" );
+ goodStatement( dboConnection, "drop table t1_024" );
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////
//
// ROUTINES
//