xref: /sqlite-3.40.0/test/altertrig.test (revision ca29bbce)
1b8bbe3e2Sdan# 2022 May 27
2b8bbe3e2Sdan#
3b8bbe3e2Sdan# The author disclaims copyright to this source code.  In place of
4b8bbe3e2Sdan# a legal notice, here is a blessing:
5b8bbe3e2Sdan#
6b8bbe3e2Sdan#    May you do good and not evil.
7b8bbe3e2Sdan#    May you find forgiveness for yourself and forgive others.
8b8bbe3e2Sdan#    May you share freely, never taking more than you give.
9b8bbe3e2Sdan#
10b8bbe3e2Sdan#*************************************************************************
11b8bbe3e2Sdan#
12b8bbe3e2Sdan
13b8bbe3e2Sdanset testdir [file dirname $argv0]
14b8bbe3e2Sdansource $testdir/tester.tcl
15b8bbe3e2Sdanset testprefix altertrig
16b8bbe3e2Sdan
17b8bbe3e2Sdan# If SQLITE_OMIT_ALTERTABLE is defined, omit this file.
18b8bbe3e2Sdanifcapable !altertable {
19b8bbe3e2Sdan  finish_test
20b8bbe3e2Sdan  return
21b8bbe3e2Sdan}
22b8bbe3e2Sdan
23b8bbe3e2Sdanproc collapse_whitespace {in} {
24b8bbe3e2Sdan  regsub -all {[ \t\n]+} [string trim $in] { }
25b8bbe3e2Sdan}
26b8bbe3e2Sdan
27b8bbe3e2Sdanproc do_whitespace_sql_test {tn sql res} {
28b8bbe3e2Sdan  set got [execsql $sql]
29b8bbe3e2Sdan  set wgot [list]
30b8bbe3e2Sdan  set wres [list]
31b8bbe3e2Sdan  foreach g $got { lappend wgot [collapse_whitespace $g] }
32b8bbe3e2Sdan  foreach r $res { lappend wres [collapse_whitespace $r] }
33b8bbe3e2Sdan
34b8bbe3e2Sdan  uplevel [list do_test $tn [list set {} $wgot] $wres]
35b8bbe3e2Sdan}
36b8bbe3e2Sdan
37b8bbe3e2Sdando_execsql_test 1.0 {
38b8bbe3e2Sdan  CREATE TABLE t1(x);
39b8bbe3e2Sdan  CREATE TABLE t2(y);
40b8bbe3e2Sdan  CREATE TABLE t3(z);
41b8bbe3e2Sdan  CREATE TABLE t4(a);
42b8bbe3e2Sdan
43b8bbe3e2Sdan  CREATE TRIGGER r1 INSERT ON t1 BEGIN
44b8bbe3e2Sdan    UPDATE t1 SET d='xyz' FROM t2, t3;
45b8bbe3e2Sdan  END;
46b8bbe3e2Sdan}
47b8bbe3e2Sdan
48b8bbe3e2Sdando_whitespace_sql_test 1.1 {
49b8bbe3e2Sdan  ALTER TABLE t3 RENAME TO t5;
50b8bbe3e2Sdan  SELECT sql FROM sqlite_schema WHERE type='trigger';
51b8bbe3e2Sdan} {{
52b8bbe3e2Sdan  CREATE TRIGGER r1 INSERT ON t1 BEGIN
53b8bbe3e2Sdan    UPDATE t1 SET d='xyz' FROM t2, "t5";
54b8bbe3e2Sdan  END
55b8bbe3e2Sdan}}
56b8bbe3e2Sdan
57b8bbe3e2Sdando_execsql_test 1.2 {
58b8bbe3e2Sdan  DROP TRIGGER r1;
59b8bbe3e2Sdan  CREATE TRIGGER r1 INSERT ON t1 BEGIN
60b8bbe3e2Sdan    UPDATE t1 SET d='xyz' FROM t2, (SELECT * FROM t5);
61b8bbe3e2Sdan  END;
62b8bbe3e2Sdan}
63b8bbe3e2Sdan
64b8bbe3e2Sdando_whitespace_sql_test 1.3 {
65b8bbe3e2Sdan  ALTER TABLE t5 RENAME TO t3;
66b8bbe3e2Sdan  SELECT sql FROM sqlite_schema WHERE type='trigger';
67b8bbe3e2Sdan} {{
68b8bbe3e2Sdan  CREATE TRIGGER r1 INSERT ON t1 BEGIN
69b8bbe3e2Sdan    UPDATE t1 SET d='xyz' FROM t2, (SELECT * FROM "t3");
70b8bbe3e2Sdan  END
71b8bbe3e2Sdan}}
72b8bbe3e2Sdan
73b8bbe3e2Sdanforeach {tn alter update final} {
74b8bbe3e2Sdan  1 {
75b8bbe3e2Sdan    ALTER TABLE t3 RENAME TO t10
76b8bbe3e2Sdan  } {
77b8bbe3e2Sdan    UPDATE t1 SET d='xyz' FROM t2, (SELECT * FROM t3)
78b8bbe3e2Sdan  } {
79b8bbe3e2Sdan    UPDATE t1 SET d='xyz' FROM t2, (SELECT * FROM "t10")
80b8bbe3e2Sdan  }
81b8bbe3e2Sdan
82b8bbe3e2Sdan  2 {
83b8bbe3e2Sdan    ALTER TABLE t3 RENAME TO t10
84b8bbe3e2Sdan  } {
854209d553Sdan    UPDATE t1 SET a='xyz' FROM t3, (SELECT * FROM (SELECT e FROM t3))
86b8bbe3e2Sdan  } {
874209d553Sdan    UPDATE t1 SET a='xyz' FROM "t10", (SELECT * FROM (SELECT e FROM "t10"))
88b8bbe3e2Sdan  }
89b8bbe3e2Sdan
90b8bbe3e2Sdan  3 {
91b8bbe3e2Sdan    ALTER TABLE t3 RENAME e TO abc
92b8bbe3e2Sdan  } {
934209d553Sdan    UPDATE t1 SET a='xyz' FROM t3, (SELECT * FROM (SELECT e FROM t3))
94b8bbe3e2Sdan  } {
954209d553Sdan    UPDATE t1 SET a='xyz' FROM t3, (SELECT * FROM (SELECT abc FROM t3))
96b8bbe3e2Sdan  }
97b8bbe3e2Sdan
98b8bbe3e2Sdan  4 {
99b8bbe3e2Sdan    ALTER TABLE t2 RENAME c TO abc
100b8bbe3e2Sdan  } {
1014209d553Sdan    UPDATE t1 SET a='xyz' FROM t3, (SELECT 1 FROM t2 WHERE c)
102b8bbe3e2Sdan  } {
1034209d553Sdan    UPDATE t1 SET a='xyz' FROM t3, (SELECT 1 FROM t2 WHERE abc)
1044209d553Sdan  }
1054209d553Sdan
1064209d553Sdan  5 {
1074209d553Sdan    ALTER TABLE t2 RENAME c TO abc
1084209d553Sdan  } {
1094209d553Sdan    UPDATE t1 SET a=t2.c FROM t2
1104209d553Sdan  } {
1114209d553Sdan    UPDATE t1 SET a=t2.abc FROM t2
1124209d553Sdan  }
1134209d553Sdan
1144209d553Sdan  6 {
1154209d553Sdan    ALTER TABLE t2 RENAME c TO abc
1164209d553Sdan  } {
1174209d553Sdan    UPDATE t1 SET a=t2.c FROM t2, t3
1184209d553Sdan  } {
1194209d553Sdan    UPDATE t1 SET a=t2.abc FROM t2, t3
120b8bbe3e2Sdan  }
121b8bbe3e2Sdan
122*ca29bbceSdan  7 {
123*ca29bbceSdan    ALTER TABLE t4 RENAME e TO abc
124*ca29bbceSdan  } {
125*ca29bbceSdan    UPDATE t1 SET a=1 FROM t3 NATURAL JOIN t4 WHERE t4.e=a
126*ca29bbceSdan  } {
127*ca29bbceSdan    UPDATE t1 SET a=1 FROM t3 NATURAL JOIN t4 WHERE t4.abc=a
128*ca29bbceSdan  }
129*ca29bbceSdan
130*ca29bbceSdan  8 {
131*ca29bbceSdan    ALTER TABLE t4 RENAME TO abc
132*ca29bbceSdan  } {
133*ca29bbceSdan    UPDATE t1 SET a=1 FROM t3 NATURAL JOIN t4 WHERE t4.e=a
134*ca29bbceSdan  } {
135*ca29bbceSdan    UPDATE t1 SET a=1 FROM t3 NATURAL JOIN "abc" WHERE "abc".e=a
136*ca29bbceSdan  }
137*ca29bbceSdan
138b8bbe3e2Sdan} {
139b8bbe3e2Sdan  reset_db
140b8bbe3e2Sdan  do_execsql_test 2.$tn.1 {
141b8bbe3e2Sdan    CREATE TABLE t1(a,b);
142b8bbe3e2Sdan    CREATE TABLE t2(c,d);
143b8bbe3e2Sdan    CREATE TABLE t3(e,f);
144*ca29bbceSdan    CREATE TABLE t4(e,f);
145b8bbe3e2Sdan  }
146b8bbe3e2Sdan  do_execsql_test 2.$tn.2 "
147b8bbe3e2Sdan    CREATE TRIGGER r1 INSERT ON t1 BEGIN
148b8bbe3e2Sdan      $update;
149b8bbe3e2Sdan    END
150b8bbe3e2Sdan  "
151b8bbe3e2Sdan  do_execsql_test 2.$tn.3 $alter
152b8bbe3e2Sdan
153b8bbe3e2Sdan  do_whitespace_sql_test 2.$tn.4 {
154b8bbe3e2Sdan    SELECT sqL FROM sqlite_schema WHERE type='trigger'
155b8bbe3e2Sdan  } "{
156b8bbe3e2Sdan    CREATE TRIGGER r1 INSERT ON t1 BEGIN
157b8bbe3e2Sdan      $final;
158b8bbe3e2Sdan    END
159b8bbe3e2Sdan  }"
160b8bbe3e2Sdan}
161b8bbe3e2Sdan
162b8bbe3e2Sdanfinish_test
163b8bbe3e2Sdan
164