summaryrefslogtreecommitdiffstats
path: root/test/triggerG.test
diff options
context:
space:
mode:
Diffstat (limited to 'test/triggerG.test')
-rw-r--r--test/triggerG.test94
1 files changed, 94 insertions, 0 deletions
diff --git a/test/triggerG.test b/test/triggerG.test
new file mode 100644
index 0000000..8cf20b5
--- /dev/null
+++ b/test/triggerG.test
@@ -0,0 +1,94 @@
+# 2017-03-24
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice', here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+set testprefix triggerG
+ifcapable {!trigger} {
+ finish_test
+ return
+}
+
+# Test cases for ticket
+# https://www.sqlite.org/src/tktview/06796225f59c057cd120f
+#
+# The OP_Once opcode was not working correctly for recursive triggers.
+#
+do_execsql_test 100 {
+ PRAGMA recursive_triggers = 1;
+
+ CREATE TABLE t1(a);
+ CREATE INDEX i1 ON t1(a);
+ INSERT INTO t1(a) VALUES(0),(2),(3),(8),(9);
+ CREATE TABLE t2(b);
+ CREATE TABLE t3(c);
+
+ CREATE TRIGGER tr AFTER INSERT ON t3 BEGIN
+ INSERT INTO t3 SELECT new.c+1 WHERE new.c<5;
+ INSERT INTO t2 SELECT new.c*100+a FROM t1 WHERE a IN (1, 2, 3, 4);
+ END;
+
+ INSERT INTO t3 VALUES(2);
+ SELECT c FROM t3 ORDER BY c;;
+} {2 3 4 5}
+do_execsql_test 110 {
+ SELECT b FROM t2 ORDER BY b;
+} {202 203 302 303 402 403 502 503}
+
+do_execsql_test 200 {
+ DELETE FROM t1;
+ INSERT INTO t1(a) VALUES(0),(2),(3),(8),(9);
+ DELETE FROM t2;
+ DELETE FROM t3;
+ DROP TRIGGER tr;
+ CREATE TRIGGER tr AFTER INSERT ON t3 BEGIN
+ INSERT INTO t3 SELECT new.c+1 WHERE new.c<5;
+ INSERT INTO t2 SELECT new.c*10000+xx.a*100+yy.a
+ FROM t1 AS xx, t1 AS yy
+ WHERE xx.a IN (1,2,3,4)
+ AND yy.a IN (2,3,4,5);
+ END;
+
+ INSERT INTO t3 VALUES(2);
+ SELECT b FROM t2 ORDER BY b;
+} {20202 20203 20302 20303 30202 30203 30302 30303 40202 40203 40302 40303 50202 50203 50302 50303}
+
+# At one point the following was causing an assert() to fail.
+#
+do_execsql_test 300 {
+ CREATE TABLE t4(x);
+ CREATE TRIGGER tr4 AFTER INSERT ON t4 BEGIN
+ SELECT 0x2147483648e0e0099 AS y WHERE y;
+ END;
+}
+
+do_catchsql_test 310 {
+ INSERT INTO t4 VALUES(1);
+} {1 {hex literal too big: 0x2147483648e0e0099}}
+
+#-------------------------------------------------------------------------
+#
+do_execsql_test 400 {
+ CREATE VIEW v0(a) AS SELECT 1234;
+ CREATE TRIGGER t0001 INSTEAD OF DELETE ON v0 BEGIN
+ SELECT old.a;
+ END;
+}
+do_execsql_test 405 {
+ SELECT a FROM v0;
+} {1234}
+do_execsql_test 410 {
+ DELETE FROM v0;
+}
+
+
+finish_test