OLD | NEW |
| (Empty) |
1 # 2010 September 28 | |
2 # | |
3 # The author disclaims copyright to this source code. In place of | |
4 # a legal notice, here is a blessing: | |
5 # | |
6 # May you do good and not evil. | |
7 # May you find forgiveness for yourself and forgive others. | |
8 # May you share freely, never taking more than you give. | |
9 # | |
10 #*********************************************************************** | |
11 # This file implements regression tests for SQLite library. The | |
12 # focus of this file is testing that a trigger may have the same | |
13 # name as an index, view or table in the same database. | |
14 # | |
15 | |
16 set testdir [file dirname $argv0] | |
17 source $testdir/tester.tcl | |
18 | |
19 #-------------------------------------------------------------------------- | |
20 # Test organization: | |
21 # | |
22 # schema4-1.*: Dropping and creating triggers and other objects where | |
23 # triggers and at least on other object share a name. | |
24 # | |
25 # schema4-2.*: Renaming tables where there is a trigger that shares the | |
26 # name of the table or one of its indices. | |
27 # | |
28 | |
29 do_execsql_test schema4-1.1 { | |
30 CREATE TABLE log(x, a, b); | |
31 CREATE TABLE tbl(a, b); | |
32 | |
33 CREATE TABLE t1(a, b); | |
34 CREATE VIEW v1 AS SELECT * FROM tbl; | |
35 CREATE INDEX i1 ON tbl(a); | |
36 } {} | |
37 | |
38 do_execsql_test schema4-1.2 { | |
39 CREATE TRIGGER t1 AFTER INSERT ON tbl BEGIN | |
40 INSERT INTO log VALUES('after insert', new.a, new.b); | |
41 END; | |
42 CREATE TRIGGER v1 AFTER UPDATE ON tbl BEGIN | |
43 INSERT INTO log VALUES('after update', new.a, new.b); | |
44 END; | |
45 CREATE TRIGGER i1 AFTER DELETE ON tbl BEGIN | |
46 INSERT INTO log VALUES('after delete', old.a, old.b); | |
47 END; | |
48 } {} | |
49 | |
50 do_execsql_test schema4-1.3 { | |
51 INSERT INTO tbl VALUES(1, 2); | |
52 UPDATE tbl SET b=a+b, a=a+1; | |
53 DELETE FROM tbl; | |
54 | |
55 SELECT x, a, b FROM log; | |
56 } {{after insert} 1 2 {after update} 2 3 {after delete} 2 3} | |
57 | |
58 do_execsql_test schema4-1.4 { | |
59 DELETE FROM log; | |
60 | |
61 DROP INDEX i1; | |
62 DROP TABLE t1; | |
63 DROP VIEW v1; | |
64 | |
65 INSERT INTO tbl VALUES(1, 2); | |
66 UPDATE tbl SET b=a+b, a=a+1; | |
67 DELETE FROM tbl; | |
68 | |
69 SELECT x, a, b FROM log; | |
70 } {{after insert} 1 2 {after update} 2 3 {after delete} 2 3} | |
71 | |
72 db close | |
73 sqlite3 db test.db | |
74 | |
75 do_execsql_test schema4-1.5 { | |
76 DELETE FROM log; | |
77 INSERT INTO tbl VALUES(1, 2); | |
78 UPDATE tbl SET b=a+b, a=a+1; | |
79 DELETE FROM tbl; | |
80 SELECT x, a, b FROM log; | |
81 } {{after insert} 1 2 {after update} 2 3 {after delete} 2 3} | |
82 | |
83 do_execsql_test schema4-1.6 { | |
84 CREATE TABLE t1(a, b); | |
85 CREATE VIEW v1 AS SELECT * FROM tbl; | |
86 CREATE INDEX i1 ON tbl(a); | |
87 } {} | |
88 | |
89 ifcapable fts3 { | |
90 do_execsql_test schema4-1.7 { | |
91 DROP TABLE t1; | |
92 CREATE VIRTUAL TABLE t1 USING fts3; | |
93 } {} | |
94 | |
95 do_execsql_test schema4-1.8 { | |
96 DELETE FROM log; | |
97 DROP TABLE t1; | |
98 INSERT INTO tbl VALUES(1, 2); | |
99 UPDATE tbl SET b=a+b, a=a+1; | |
100 DELETE FROM tbl; | |
101 SELECT x, a, b FROM log; | |
102 } {{after insert} 1 2 {after update} 2 3 {after delete} 2 3} | |
103 } | |
104 | |
105 ifcapable altertable { | |
106 drop_all_tables | |
107 do_execsql_test schema4-2.1 { | |
108 CREATE TABLE log(x, a, b); | |
109 CREATE TABLE tbl(a, b); | |
110 | |
111 CREATE TABLE t1(a, b); | |
112 CREATE INDEX i1 ON t1(a, b); | |
113 } {} | |
114 | |
115 do_execsql_test schema4-2.2 { | |
116 CREATE TRIGGER t1 AFTER INSERT ON tbl BEGIN | |
117 INSERT INTO log VALUES('after insert', new.a, new.b); | |
118 END; | |
119 CREATE TRIGGER i1 AFTER DELETE ON tbl BEGIN | |
120 INSERT INTO log VALUES('after delete', old.a, old.b); | |
121 END; | |
122 } {} | |
123 | |
124 do_execsql_test schema4-2.3 { ALTER TABLE t1 RENAME TO t2 } {} | |
125 | |
126 do_execsql_test schema4-2.4 { | |
127 INSERT INTO tbl VALUES('a', 'b'); | |
128 DELETE FROM tbl; | |
129 SELECT * FROM log; | |
130 } {{after insert} a b {after delete} a b} | |
131 | |
132 db close | |
133 sqlite3 db test.db | |
134 | |
135 do_execsql_test schema4-2.5 { | |
136 DELETE FROM log; | |
137 INSERT INTO tbl VALUES('c', 'd'); | |
138 DELETE FROM tbl; | |
139 SELECT * FROM log; | |
140 } {{after insert} c d {after delete} c d} | |
141 | |
142 do_execsql_test schema4-2.6 { | |
143 CREATE TEMP TRIGGER x1 AFTER UPDATE ON tbl BEGIN | |
144 INSERT INTO log VALUES('after update', new.a, new.b); | |
145 END; | |
146 | |
147 CREATE TEMP TABLE x1(x); | |
148 INSERT INTO x1 VALUES(123); | |
149 } {} | |
150 | |
151 do_execsql_test schema4-2.8 { | |
152 select sql from sqlite_temp_master WHERE type='table'; | |
153 } {{CREATE TABLE x1(x)}} | |
154 | |
155 do_execsql_test schema4-2.7 { ALTER TABLE tbl RENAME TO tbl2 } {} | |
156 | |
157 do_execsql_test schema4-2.9 { | |
158 select sql from sqlite_temp_master WHERE type='table'; | |
159 } {{CREATE TABLE x1(x)}} | |
160 | |
161 do_execsql_test schema4-2.10 { | |
162 DELETE FROM log; | |
163 INSERT INTO tbl2 VALUES('e', 'f'); | |
164 UPDATE tbl2 SET a='g', b='h'; | |
165 DELETE FROM tbl2; | |
166 SELECT * FROM log; | |
167 } {{after insert} e f {after update} g h {after delete} g h} | |
168 | |
169 do_execsql_test schema4-2.11 { | |
170 INSERT INTO x1 VALUES(456); | |
171 SELECT * FROM x1 | |
172 } {123 456} | |
173 } | |
174 | |
175 finish_test | |
OLD | NEW |