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