Index: third_party/sqlite/src/test/autoinc.test |
diff --git a/third_party/sqlite/src/test/autoinc.test b/third_party/sqlite/src/test/autoinc.test |
index 4c8cf531eb39135a7226334665ed8eb7e6eca108..983b9b8321c75d18864fbfb924bbadafe43b8df9 100644 |
--- a/third_party/sqlite/src/test/autoinc.test |
+++ b/third_party/sqlite/src/test/autoinc.test |
@@ -558,84 +558,111 @@ do_test autoinc-9.1 { |
} |
} {t3 0} |
-catchsql { pragma recursive_triggers = off } |
+ifcapable trigger { |
+ catchsql { pragma recursive_triggers = off } |
+ |
+ # Ticket #3928. Make sure that triggers to not make extra slots in |
+ # the SQLITE_SEQUENCE table. |
+ # |
+ do_test autoinc-3928.1 { |
+ db eval { |
+ CREATE TABLE t3928(a INTEGER PRIMARY KEY AUTOINCREMENT, b); |
+ CREATE TRIGGER t3928r1 BEFORE INSERT ON t3928 BEGIN |
+ INSERT INTO t3928(b) VALUES('before1'); |
+ INSERT INTO t3928(b) VALUES('before2'); |
+ END; |
+ CREATE TRIGGER t3928r2 AFTER INSERT ON t3928 BEGIN |
+ INSERT INTO t3928(b) VALUES('after1'); |
+ INSERT INTO t3928(b) VALUES('after2'); |
+ END; |
+ INSERT INTO t3928(b) VALUES('test'); |
+ SELECT * FROM t3928 ORDER BY a; |
+ } |
+ } {1 before1 2 after1 3 after2 4 before2 5 after1 6 after2 7 test 8 before1 9 before2 10 after1 11 before1 12 before2 13 after2} |
+ do_test autoinc-3928.2 { |
+ db eval { |
+ SELECT * FROM sqlite_sequence WHERE name='t3928' |
+ } |
+ } {t3928 13} |
-# Ticket #3928. Make sure that triggers to not make extra slots in |
-# the SQLITE_SEQUENCE table. |
-# |
-do_test autoinc-3928.1 { |
- db eval { |
- CREATE TABLE t3928(a INTEGER PRIMARY KEY AUTOINCREMENT, b); |
- CREATE TRIGGER t3928r1 BEFORE INSERT ON t3928 BEGIN |
- INSERT INTO t3928(b) VALUES('before1'); |
- INSERT INTO t3928(b) VALUES('before2'); |
- END; |
- CREATE TRIGGER t3928r2 AFTER INSERT ON t3928 BEGIN |
- INSERT INTO t3928(b) VALUES('after1'); |
- INSERT INTO t3928(b) VALUES('after2'); |
- END; |
- INSERT INTO t3928(b) VALUES('test'); |
- SELECT * FROM t3928 ORDER BY a; |
- } |
-} {1 before1 2 after1 3 after2 4 before2 5 after1 6 after2 7 test 8 before1 9 before2 10 after1 11 before1 12 before2 13 after2} |
-do_test autoinc-3928.2 { |
- db eval { |
- SELECT * FROM sqlite_sequence WHERE name='t3928' |
- } |
-} {t3928 13} |
+ do_test autoinc-3928.3 { |
+ db eval { |
+ DROP TRIGGER t3928r1; |
+ DROP TRIGGER t3928r2; |
+ CREATE TRIGGER t3928r3 BEFORE UPDATE ON t3928 |
+ WHEN typeof(new.b)=='integer' BEGIN |
+ INSERT INTO t3928(b) VALUES('before-int-' || new.b); |
+ END; |
+ CREATE TRIGGER t3928r4 AFTER UPDATE ON t3928 |
+ WHEN typeof(new.b)=='integer' BEGIN |
+ INSERT INTO t3928(b) VALUES('after-int-' || new.b); |
+ END; |
+ DELETE FROM t3928 WHERE a!=1; |
+ UPDATE t3928 SET b=456 WHERE a=1; |
+ SELECT * FROM t3928 ORDER BY a; |
+ } |
+ } {1 456 14 before-int-456 15 after-int-456} |
+ do_test autoinc-3928.4 { |
+ db eval { |
+ SELECT * FROM sqlite_sequence WHERE name='t3928' |
+ } |
+ } {t3928 15} |
+ |
+ do_test autoinc-3928.5 { |
+ db eval { |
+ CREATE TABLE t3928b(x); |
+ INSERT INTO t3928b VALUES(100); |
+ INSERT INTO t3928b VALUES(200); |
+ INSERT INTO t3928b VALUES(300); |
+ DELETE FROM t3928; |
+ CREATE TABLE t3928c(y INTEGER PRIMARY KEY AUTOINCREMENT, z); |
+ CREATE TRIGGER t3928br1 BEFORE DELETE ON t3928b BEGIN |
+ INSERT INTO t3928(b) VALUES('before-del-'||old.x); |
+ INSERT INTO t3928c(z) VALUES('before-del-'||old.x); |
+ END; |
+ CREATE TRIGGER t3928br2 AFTER DELETE ON t3928b BEGIN |
+ INSERT INTO t3928(b) VALUES('after-del-'||old.x); |
+ INSERT INTO t3928c(z) VALUES('after-del-'||old.x); |
+ END; |
+ DELETE FROM t3928b; |
+ SELECT * FROM t3928 ORDER BY a; |
+ } |
+ } {16 before-del-100 17 after-del-100 18 before-del-200 19 after-del-200 20 before-del-300 21 after-del-300} |
+ do_test autoinc-3928.6 { |
+ db eval { |
+ SELECT * FROM t3928c ORDER BY y; |
+ } |
+ } {1 before-del-100 2 after-del-100 3 before-del-200 4 after-del-200 5 before-del-300 6 after-del-300} |
+ do_test autoinc-3928.7 { |
+ db eval { |
+ SELECT * FROM sqlite_sequence WHERE name LIKE 't3928%' ORDER BY name; |
+ } |
+ } {t3928 21 t3928c 6} |
+ |
+ # Ticket [a696379c1f0886615541a48b35bd8181a80e88f8] |
+ do_test autoinc-a69637.1 { |
+ db eval { |
+ CREATE TABLE ta69637_1(x INTEGER PRIMARY KEY AUTOINCREMENT, y); |
+ CREATE TABLE ta69637_2(z); |
+ CREATE TRIGGER ra69637_1 AFTER INSERT ON ta69637_2 BEGIN |
+ INSERT INTO ta69637_1(y) VALUES(new.z+1); |
+ END; |
+ INSERT INTO ta69637_2 VALUES(123); |
+ SELECT * FROM ta69637_1; |
+ } |
+ } {1 124} |
+ do_test autoinc-a69637.2 { |
+ db eval { |
+ CREATE VIEW va69637_2 AS SELECT * FROM ta69637_2; |
+ CREATE TRIGGER ra69637_2 INSTEAD OF INSERT ON va69637_2 BEGIN |
+ INSERT INTO ta69637_1(y) VALUES(new.z+10000); |
+ END; |
+ INSERT INTO va69637_2 VALUES(123); |
+ SELECT * FROM ta69637_1; |
+ } |
+ } {1 124 2 10123} |
+} |
-do_test autoinc-3928.3 { |
- db eval { |
- DROP TRIGGER t3928r1; |
- DROP TRIGGER t3928r2; |
- CREATE TRIGGER t3928r3 BEFORE UPDATE ON t3928 |
- WHEN typeof(new.b)=='integer' BEGIN |
- INSERT INTO t3928(b) VALUES('before-int-' || new.b); |
- END; |
- CREATE TRIGGER t3928r4 AFTER UPDATE ON t3928 |
- WHEN typeof(new.b)=='integer' BEGIN |
- INSERT INTO t3928(b) VALUES('after-int-' || new.b); |
- END; |
- DELETE FROM t3928 WHERE a!=1; |
- UPDATE t3928 SET b=456 WHERE a=1; |
- SELECT * FROM t3928 ORDER BY a; |
- } |
-} {1 456 14 before-int-456 15 after-int-456} |
-do_test autoinc-3928.4 { |
- db eval { |
- SELECT * FROM sqlite_sequence WHERE name='t3928' |
- } |
-} {t3928 15} |
-do_test autoinc-3928.5 { |
- db eval { |
- CREATE TABLE t3928b(x); |
- INSERT INTO t3928b VALUES(100); |
- INSERT INTO t3928b VALUES(200); |
- INSERT INTO t3928b VALUES(300); |
- DELETE FROM t3928; |
- CREATE TABLE t3928c(y INTEGER PRIMARY KEY AUTOINCREMENT, z); |
- CREATE TRIGGER t3928br1 BEFORE DELETE ON t3928b BEGIN |
- INSERT INTO t3928(b) VALUES('before-del-'||old.x); |
- INSERT INTO t3928c(z) VALUES('before-del-'||old.x); |
- END; |
- CREATE TRIGGER t3928br2 AFTER DELETE ON t3928b BEGIN |
- INSERT INTO t3928(b) VALUES('after-del-'||old.x); |
- INSERT INTO t3928c(z) VALUES('after-del-'||old.x); |
- END; |
- DELETE FROM t3928b; |
- SELECT * FROM t3928 ORDER BY a; |
- } |
-} {16 before-del-100 17 after-del-100 18 before-del-200 19 after-del-200 20 before-del-300 21 after-del-300} |
-do_test autoinc-3928.6 { |
- db eval { |
- SELECT * FROM t3928c ORDER BY y; |
- } |
-} {1 before-del-100 2 after-del-100 3 before-del-200 4 after-del-200 5 before-del-300 6 after-del-300} |
-do_test autoinc-3928.7 { |
- db eval { |
- SELECT * FROM sqlite_sequence WHERE name LIKE 't3928%' ORDER BY name; |
- } |
-} {t3928 21 t3928c 6} |
finish_test |