1# 2019 January 23 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# 12 13set testdir [file dirname $argv0] 14source $testdir/tester.tcl 15set testprefix altertab3 16 17# If SQLITE_OMIT_ALTERTABLE is defined, omit this file. 18ifcapable !altertable { 19 finish_test 20 return 21} 22 23ifcapable windowfunc { 24do_execsql_test 1.0 { 25 CREATE TABLE t1(a, b); 26 CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN 27 SELECT sum(b) OVER w FROM t1 WINDOW w AS (ORDER BY a); 28 END; 29} 30 31do_execsql_test 1.1 { 32 ALTER TABLE t1 RENAME a TO aaa; 33} 34 35do_execsql_test 1.2 { 36 SELECT sql FROM sqlite_master WHERE name='tr1' 37} {{CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN 38 SELECT sum(b) OVER w FROM t1 WINDOW w AS (ORDER BY aaa); 39 END}} 40 41do_execsql_test 1.3 { 42 INSERT INTO t1 VALUES(1, 2); 43} 44} ;# windowfunc 45 46#------------------------------------------------------------------------- 47reset_db 48do_execsql_test 2.0 { 49 CREATE TABLE t1(a,b,c); 50 CREATE TABLE t2(a,b,c); 51 CREATE TRIGGER r1 AFTER INSERT ON t1 WHEN new.a NOT NULL BEGIN 52 SELECT a,b, a name FROM t1 53 INTERSECT 54 SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY name; 55 SELECT new.c; 56 END; 57} 58 59do_execsql_test 2.1 { 60 ALTER TABLE t1 RENAME TO t1x; 61 SELECT sql FROM sqlite_master WHERE name = 'r1'; 62} {{CREATE TRIGGER r1 AFTER INSERT ON "t1x" WHEN new.a NOT NULL BEGIN 63 SELECT a,b, a name FROM "t1x" 64 INTERSECT 65 SELECT a,b,c FROM "t1x" WHERE b>='d' ORDER BY name; 66 SELECT new.c; 67 END}} 68 69#------------------------------------------------------------------------- 70reset_db 71do_execsql_test 3.0 { 72 CREATE TABLE t1(a, b, c, d); 73 CREATE VIEW v1 AS SELECT * FROM t1 WHERE a=1 OR (b IN ()); 74} 75 76do_execsql_test 3.1 { 77 ALTER TABLE t1 RENAME b TO bbb; 78} 79 80do_execsql_test 3.2 { 81 SELECT sql FROM sqlite_master WHERE name = 'v1' 82} {{CREATE VIEW v1 AS SELECT * FROM t1 WHERE a=1 OR (bbb IN ())}} 83 84#------------------------------------------------------------------------- 85reset_db 86do_execsql_test 4.0 { 87 CREATE TABLE t1(a, b); 88 CREATE TABLE t3(e, f); 89 CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN 90 INSERT INTO t2 VALUES(new.a, new.b); 91 END; 92} 93 94do_catchsql_test 4.1.2 { 95 BEGIN; 96 ALTER TABLE t3 RENAME TO t4; 97} {1 {error in trigger tr1: no such table: main.t2}} 98do_execsql_test 4.1.2 { 99 COMMIT; 100} 101do_execsql_test 4.1.3 { 102 SELECT * FROM sqlite_master WHERE type='table' AND name!='t1'; 103} {table t3 t3 3 {CREATE TABLE t3(e, f)}} 104 105 106do_catchsql_test 4.2.1 { 107 BEGIN; 108 ALTER TABLE t3 RENAME e TO eee; 109} {1 {error in trigger tr1: no such table: main.t2}} 110do_execsql_test 4.2.2 { 111 COMMIT; 112} 113do_execsql_test 4.2.3 { 114 SELECT * FROM sqlite_master WHERE type='table' AND name!='t1'; 115} {table t3 t3 3 {CREATE TABLE t3(e, f)}} 116 117#------------------------------------------------------------------------- 118reset_db 119do_execsql_test 5.0 { 120 CREATE TABLE t1 ( 121 c1 integer, c2, PRIMARY KEY(c1 collate rtrim), 122 UNIQUE(c2) 123 ) 124} 125do_execsql_test 5.1 { 126 ALTER TABLE t1 RENAME c1 TO c3; 127} 128 129#------------------------------------------------------------------------- 130reset_db 131do_execsql_test 6.0 { 132 CREATE TEMPORARY TABLE Table0 ( 133 Col0 INTEGER, 134 PRIMARY KEY(Col0 COLLATE RTRIM), 135 FOREIGN KEY (Col0) REFERENCES Table0 136 ); 137} 138 139do_execsql_test 6.1 { 140 ALTER TABLE Table0 RENAME Col0 TO Col0; 141} 142 143finish_test 144 145 146