1d9995031Sdan# 2019 January 23 2d9995031Sdan# 3d9995031Sdan# The author disclaims copyright to this source code. In place of 4d9995031Sdan# a legal notice, here is a blessing: 5d9995031Sdan# 6d9995031Sdan# May you do good and not evil. 7d9995031Sdan# May you find forgiveness for yourself and forgive others. 8d9995031Sdan# May you share freely, never taking more than you give. 9d9995031Sdan# 10d9995031Sdan#************************************************************************* 11d9995031Sdan# 12d9995031Sdan 13d9995031Sdanset testdir [file dirname $argv0] 14d9995031Sdansource $testdir/tester.tcl 15d9995031Sdanset testprefix altertab3 16d9995031Sdan 17d9995031Sdan# If SQLITE_OMIT_ALTERTABLE is defined, omit this file. 18d9995031Sdanifcapable !altertable { 19d9995031Sdan finish_test 20d9995031Sdan return 21d9995031Sdan} 22d9995031Sdan 238cd2e4aeSdanifcapable windowfunc { 24d9995031Sdando_execsql_test 1.0 { 25d9995031Sdan CREATE TABLE t1(a, b); 26d9995031Sdan CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN 27d9995031Sdan SELECT sum(b) OVER w FROM t1 WINDOW w AS (ORDER BY a); 28d9995031Sdan END; 29d9995031Sdan} 30d9995031Sdan 31d9995031Sdando_execsql_test 1.1 { 32d9995031Sdan ALTER TABLE t1 RENAME a TO aaa; 33d9995031Sdan} 34d9995031Sdan 35d9995031Sdando_execsql_test 1.2 { 36d9995031Sdan SELECT sql FROM sqlite_master WHERE name='tr1' 37d9995031Sdan} {{CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN 38d9995031Sdan SELECT sum(b) OVER w FROM t1 WINDOW w AS (ORDER BY aaa); 39d9995031Sdan END}} 40d9995031Sdan 41d9995031Sdando_execsql_test 1.3 { 42d9995031Sdan INSERT INTO t1 VALUES(1, 2); 43d9995031Sdan} 448cd2e4aeSdan} ;# windowfunc 45d9995031Sdan 46a5f9f42aSdan#------------------------------------------------------------------------- 47a5f9f42aSdanreset_db 48a5f9f42aSdando_execsql_test 2.0 { 49a5f9f42aSdan CREATE TABLE t1(a,b,c); 50a5f9f42aSdan CREATE TABLE t2(a,b,c); 51a5f9f42aSdan CREATE TRIGGER r1 AFTER INSERT ON t1 WHEN new.a NOT NULL BEGIN 52a5f9f42aSdan SELECT a,b, a name FROM t1 53a5f9f42aSdan INTERSECT 54a5f9f42aSdan SELECT a,b,c FROM t1 WHERE b>='d' ORDER BY name; 55a5f9f42aSdan SELECT new.c; 56a5f9f42aSdan END; 57a5f9f42aSdan} 58d9995031Sdan 59a5f9f42aSdando_execsql_test 2.1 { 60a5f9f42aSdan ALTER TABLE t1 RENAME TO t1x; 61a5f9f42aSdan SELECT sql FROM sqlite_master WHERE name = 'r1'; 62a5f9f42aSdan} {{CREATE TRIGGER r1 AFTER INSERT ON "t1x" WHEN new.a NOT NULL BEGIN 63a5f9f42aSdan SELECT a,b, a name FROM "t1x" 64a5f9f42aSdan INTERSECT 65a5f9f42aSdan SELECT a,b,c FROM "t1x" WHERE b>='d' ORDER BY name; 66a5f9f42aSdan SELECT new.c; 67a5f9f42aSdan END}} 68f467744dSdan 69f467744dSdan#------------------------------------------------------------------------- 70f467744dSdanreset_db 71f467744dSdando_execsql_test 3.0 { 72f467744dSdan CREATE TABLE t1(a, b, c, d); 73f467744dSdan CREATE VIEW v1 AS SELECT * FROM t1 WHERE a=1 OR (b IN ()); 74f467744dSdan} 75f467744dSdan 76f467744dSdando_execsql_test 3.1 { 77f467744dSdan ALTER TABLE t1 RENAME b TO bbb; 78f467744dSdan} 79f467744dSdan 80f467744dSdando_execsql_test 3.2 { 81f467744dSdan SELECT sql FROM sqlite_master WHERE name = 'v1' 82e4a9e4d0Sdan} {{CREATE VIEW v1 AS SELECT * FROM t1 WHERE a=1 OR (b IN ())}} 83f467744dSdan 841f3b284bSdan#------------------------------------------------------------------------- 851f3b284bSdanreset_db 861f3b284bSdando_execsql_test 4.0 { 871f3b284bSdan CREATE TABLE t1(a, b); 881f3b284bSdan CREATE TABLE t3(e, f); 891f3b284bSdan CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN 901f3b284bSdan INSERT INTO t2 VALUES(new.a, new.b); 911f3b284bSdan END; 921f3b284bSdan} 93f467744dSdan 941f3b284bSdando_catchsql_test 4.1.2 { 951f3b284bSdan BEGIN; 961f3b284bSdan ALTER TABLE t3 RENAME TO t4; 971f3b284bSdan} {1 {error in trigger tr1: no such table: main.t2}} 981f3b284bSdando_execsql_test 4.1.2 { 991f3b284bSdan COMMIT; 1001f3b284bSdan} 1011f3b284bSdando_execsql_test 4.1.3 { 102150dfbd2Sdan SELECT type, name, tbl_name, sql 103150dfbd2Sdan FROM sqlite_master WHERE type='table' AND name!='t1'; 104150dfbd2Sdan} {table t3 t3 {CREATE TABLE t3(e, f)}} 1051f3b284bSdan 1061f3b284bSdan 1071f3b284bSdando_catchsql_test 4.2.1 { 1081f3b284bSdan BEGIN; 1091f3b284bSdan ALTER TABLE t3 RENAME e TO eee; 1101f3b284bSdan} {1 {error in trigger tr1: no such table: main.t2}} 1111f3b284bSdando_execsql_test 4.2.2 { 1121f3b284bSdan COMMIT; 1131f3b284bSdan} 1141f3b284bSdando_execsql_test 4.2.3 { 115150dfbd2Sdan SELECT type, name, tbl_name, sql 116150dfbd2Sdan FROM sqlite_master WHERE type='table' AND name!='t1'; 117150dfbd2Sdan} {table t3 t3 {CREATE TABLE t3(e, f)}} 118f467744dSdan 1192381f6d7Sdan#------------------------------------------------------------------------- 1202381f6d7Sdanreset_db 1212381f6d7Sdando_execsql_test 5.0 { 1222381f6d7Sdan CREATE TABLE t1 ( 1232381f6d7Sdan c1 integer, c2, PRIMARY KEY(c1 collate rtrim), 1242381f6d7Sdan UNIQUE(c2) 1252381f6d7Sdan ) 1262381f6d7Sdan} 1272381f6d7Sdando_execsql_test 5.1 { 1282381f6d7Sdan ALTER TABLE t1 RENAME c1 TO c3; 1292381f6d7Sdan} 1302381f6d7Sdan 1312381f6d7Sdan#------------------------------------------------------------------------- 1322381f6d7Sdanreset_db 1332381f6d7Sdando_execsql_test 6.0 { 1342381f6d7Sdan CREATE TEMPORARY TABLE Table0 ( 1352381f6d7Sdan Col0 INTEGER, 1362381f6d7Sdan PRIMARY KEY(Col0 COLLATE RTRIM), 1372381f6d7Sdan FOREIGN KEY (Col0) REFERENCES Table0 1382381f6d7Sdan ); 1392381f6d7Sdan} 1402381f6d7Sdan 1412381f6d7Sdando_execsql_test 6.1 { 1422381f6d7Sdan ALTER TABLE Table0 RENAME Col0 TO Col0; 1432381f6d7Sdan} 1442381f6d7Sdan 145490e6f25Sdan#------------------------------------------------------------------------- 146490e6f25Sdanreset_db 147490e6f25Sdando_execsql_test 7.1.0 { 148490e6f25Sdan CREATE TABLE t1(a,b,c); 149490e6f25Sdan CREATE TRIGGER AFTER INSERT ON t1 BEGIN 150490e6f25Sdan SELECT a, rank() OVER w1 FROM t1 151490e6f25Sdan WINDOW w1 AS (PARTITION BY b, percent_rank() OVER w1); 152490e6f25Sdan END; 153490e6f25Sdan} 154490e6f25Sdan 155490e6f25Sdando_execsql_test 7.1.2 { 156490e6f25Sdan ALTER TABLE t1 RENAME TO t1x; 157490e6f25Sdan SELECT sql FROM sqlite_master; 158490e6f25Sdan} { 159490e6f25Sdan {CREATE TABLE "t1x"(a,b,c)} 160490e6f25Sdan {CREATE TRIGGER AFTER INSERT ON "t1x" BEGIN 161490e6f25Sdan SELECT a, rank() OVER w1 FROM "t1x" 162490e6f25Sdan WINDOW w1 AS (PARTITION BY b, percent_rank() OVER w1); 163490e6f25Sdan END} 164490e6f25Sdan} 165490e6f25Sdan 166490e6f25Sdando_execsql_test 7.2.1 { 167490e6f25Sdan DROP TRIGGER after; 168490e6f25Sdan CREATE TRIGGER AFTER INSERT ON t1x BEGIN 169490e6f25Sdan SELECT a, rank() OVER w1 FROM t1x 170490e6f25Sdan WINDOW w1 AS (PARTITION BY b, percent_rank() OVER w1 ORDER BY d); 171490e6f25Sdan END; 172490e6f25Sdan} 173490e6f25Sdan 174490e6f25Sdando_catchsql_test 7.2.2 { 175490e6f25Sdan ALTER TABLE t1x RENAME TO t1; 176490e6f25Sdan} {1 {error in trigger AFTER: no such column: d}} 177490e6f25Sdan 178e20a894aSdan#------------------------------------------------------------------------- 179e20a894aSdanreset_db 180e20a894aSdando_execsql_test 8.0 { 181e20a894aSdan CREATE TABLE t0(c0); 182e20a894aSdan CREATE INDEX i0 ON t0('1' IN ()); 183e20a894aSdan} 184e20a894aSdando_execsql_test 8.1 { 185e20a894aSdan ALTER TABLE t0 RENAME TO t1; 186e20a894aSdan SELECT sql FROM sqlite_master; 187e20a894aSdan} { 188e20a894aSdan {CREATE TABLE "t1"(c0)} 189e20a894aSdan {CREATE INDEX i0 ON "t1"('1' IN ())} 190e20a894aSdan} 191e4a9e4d0Sdando_execsql_test 8.2.1 { 192e4a9e4d0Sdan CREATE TABLE t2 (c0); 193e4a9e4d0Sdan CREATE INDEX i2 ON t2((LIKELIHOOD(c0, 100) IN ())); 194e4a9e4d0Sdan ALTER TABLE t2 RENAME COLUMN c0 TO c1; 195e4a9e4d0Sdan} 196e4a9e4d0Sdando_execsql_test 8.2.2 { 197e4a9e4d0Sdan SELECT sql FROM sqlite_master WHERE tbl_name = 't2'; 198e4a9e4d0Sdan} { 199e4a9e4d0Sdan {CREATE TABLE t2 (c1)} 200e4a9e4d0Sdan {CREATE INDEX i2 ON t2((LIKELIHOOD(c0, 100) IN ()))} 201e4a9e4d0Sdan} 202e4a9e4d0Sdando_test 8.2.3 { 203e4a9e4d0Sdan sqlite3 db2 test.db 204e4a9e4d0Sdan db2 eval { INSERT INTO t2 VALUES (1), (2), (3) } 205e4a9e4d0Sdan db close 206e4a9e4d0Sdan} {} 2074245e045Sdrhdb2 close 208e4a9e4d0Sdan 2090b277a98Sdan#------------------------------------------------------------------------- 2100b277a98Sdanreset_db 2110b277a98Sdando_execsql_test 9.1 { 2120b277a98Sdan CREATE TABLE t1(a,b,c); 2130b277a98Sdan CREATE TRIGGER AFTER INSERT ON t1 WHEN new.a NOT NULL BEGIN 2140b277a98Sdan SELECT true WHERE (SELECT a, b FROM (t1)) IN (); 2150b277a98Sdan END; 2160b277a98Sdan} 2170b277a98Sdando_execsql_test 9.2 { 2180b277a98Sdan ALTER TABLE t1 RENAME TO t1x; 2190b277a98Sdan} 220e4a9e4d0Sdan 22144c99ecfSdan#------------------------------------------------------------------------- 22244c99ecfSdanreset_db 22344c99ecfSdando_execsql_test 10.1 { 22444c99ecfSdan CREATE TABLE t1(a, b, c); 22544c99ecfSdan CREATE TABLE t2(a, b, c); 22644c99ecfSdan CREATE VIEW v1 AS SELECT * FROM t1 WHERE ( 22744c99ecfSdan SELECT t1.a FROM t1, t2 22844c99ecfSdan ) IN () OR t1.a=5; 22944c99ecfSdan} 23044c99ecfSdan 23144c99ecfSdando_execsql_test 10.2 { 23244c99ecfSdan ALTER TABLE t2 RENAME TO t3; 23344c99ecfSdan SELECT sql FROM sqlite_master WHERE name='v1'; 23444c99ecfSdan} { 23544c99ecfSdan {CREATE VIEW v1 AS SELECT * FROM t1 WHERE ( 23644c99ecfSdan SELECT t1.a FROM t1, t2 23744c99ecfSdan ) IN () OR t1.a=5} 23844c99ecfSdan} 23944c99ecfSdan 240a1ac0359Sdan#------------------------------------------------------------------------- 241a1ac0359Sdanreset_db 242a1ac0359Sdando_execsql_test 11.1 { 243a1ac0359Sdan CREATE TABLE t1( 244a1ac0359Sdan a,b,c,d,e,f,g,h,j,jj,jjb,k,aa,bb,cc,dd,ee DEFAULT 3.14, 245a1ac0359Sdan ff DEFAULT('hiccup'),Wg NOD NULL DEFAULT(false) 246a1ac0359Sdan ); 247a1ac0359Sdan 248a1ac0359Sdan CREATE TRIGGER b AFTER INSERT ON t1 WHEN new.a BEGIN 249a1ac0359Sdan SELECT a, sum() w3 FROM t1 250a1ac0359Sdan WINDOW b AS (ORDER BY NOT EXISTS(SELECT 1 FROM abc)); 251a1ac0359Sdan END; 252a1ac0359Sdan} 253a1ac0359Sdan 254a1ac0359Sdando_catchsql_test 11.2 { 255a1ac0359Sdan ALTER TABLE t1 RENAME TO t1x; 256f380c3f1Sdan} {1 {error in trigger b: no such table: main.abc}} 257a1ac0359Sdan 258a1ac0359Sdando_execsql_test 11.3 { 259a1ac0359Sdan DROP TRIGGER b; 260a1ac0359Sdan CREATE TRIGGER b AFTER INSERT ON t1 WHEN new.a BEGIN 261a1ac0359Sdan SELECT a, sum() w3 FROM t1 262a1ac0359Sdan WINDOW b AS (ORDER BY NOT EXISTS(SELECT 1 FROM t1)); 263a1ac0359Sdan END; 264a1ac0359Sdan} {} 265a1ac0359Sdan 266a1ac0359Sdando_execsql_test 11.4 { 267a1ac0359Sdan ALTER TABLE t1 RENAME TO t1x; 268a1ac0359Sdan SELECT sql FROM sqlite_master WHERE name = 'b'; 269a1ac0359Sdan} { 270a1ac0359Sdan{CREATE TRIGGER b AFTER INSERT ON "t1x" WHEN new.a BEGIN 271a1ac0359Sdan SELECT a, sum() w3 FROM "t1x" 272a1ac0359Sdan WINDOW b AS (ORDER BY NOT EXISTS(SELECT 1 FROM "t1x")); 273a1ac0359Sdan END} 274a1ac0359Sdan} 275e20a894aSdan 276750c6ba5Sdan#------------------------------------------------------------------------- 277750c6ba5Sdanreset_db 278750c6ba5Sdando_execsql_test 12.1 { 279750c6ba5SdanCREATE TABLE t1(a,b,c,d,e,f,g,h,j,jj,Zjj,k,aQ,bb,cc,dd,ee DEFAULT 3.14, 280750c6ba5Sdanff DEFAULT('hiccup'),gg NOD NULL DEFAULT(false)); 281750c6ba5SdanCREATE TRIGGER AFTER INSERT ON t1 WHEN new.a NOT NULL BEGIN 282750c6ba5Sdan 283750c6ba5SdanSELECT b () OVER , dense_rank() OVER d, d () OVER w1 284750c6ba5SdanFROM t1 285750c6ba5SdanWINDOW 286750c6ba5Sdanw1 AS 287750c6ba5Sdan( w1 ORDER BY d 288750c6ba5SdanROWS BETWEEN 2 NOT IN(SELECT a, sum(d) w2,max(d)OVER FROM t1 289750c6ba5SdanWINDOW 290750c6ba5Sdanw1 AS 291750c6ba5Sdan(PARTITION BY d 292750c6ba5SdanROWS BETWEEN '' PRECEDING AND false FOLLOWING), 293750c6ba5Sdand AS 294750c6ba5Sdan(PARTITION BY b ORDER BY d 295750c6ba5SdanROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 296750c6ba5Sdan) PRECEDING AND 1 FOLLOWING), 297750c6ba5Sdanw2 AS 298750c6ba5Sdan(PARTITION BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 299750c6ba5Sdanw3 AS 300750c6ba5Sdan(PARTITION BY b ORDER BY d 301750c6ba5SdanROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) 302750c6ba5Sdan; 303750c6ba5SdanSELECT a, sum(d) w2,max(d)OVER FROM t1 304750c6ba5SdanWINDOW 305750c6ba5Sdanw1 AS 306750c6ba5Sdan(PARTITION BY d 307750c6ba5SdanROWS BETWEEN '' PRECEDING AND false FOLLOWING), 308750c6ba5Sdand AS 309750c6ba5Sdan(PARTITION BY b ORDER BY d 310750c6ba5SdanROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 311750c6ba5Sdan; 312750c6ba5Sdan 313750c6ba5SdanEND; 314750c6ba5Sdan} 315750c6ba5Sdan 316750c6ba5Sdando_execsql_test 12.2 { 317750c6ba5Sdan ALTER TABLE t1 RENAME TO t1x; 318750c6ba5Sdan} 319750c6ba5Sdan 3209bf022d5Sdan#------------------------------------------------------------------------- 3219bf022d5Sdanreset_db 3229bf022d5Sdando_execsql_test 13.1 { 3239bf022d5Sdan CREATE TABLE t1(a); 3249bf022d5Sdan CREATE TRIGGER r1 INSERT ON t1 BEGIN 3259bf022d5Sdan SELECT a(*) OVER (ORDER BY (SELECT 1)) FROM t1; 3269bf022d5Sdan END; 3279bf022d5Sdan} 3289bf022d5Sdan 3299bf022d5Sdando_execsql_test 13.2 { 3309bf022d5Sdan ALTER TABLE t1 RENAME TO t1x; 3319bf022d5Sdan} 3329bf022d5Sdan 3331e60261cSdan#------------------------------------------------------------------------- 3341e60261cSdanreset_db 3351e60261cSdando_execsql_test 14.1 { 3361e60261cSdan CREATE TABLE t1(a); 3371e60261cSdan CREATE TABLE t2(b); 3381e60261cSdan CREATE TRIGGER AFTER INSERT ON t1 BEGIN 3391e60261cSdan SELECT sum() FILTER (WHERE (SELECT sum() FILTER (WHERE 0)) AND a); 3401e60261cSdan END; 3411e60261cSdan} 3421e60261cSdan 3431e60261cSdando_catchsql_test 14.2 { 3441e60261cSdan ALTER TABLE t1 RENAME TO t1x; 3451e60261cSdan} {1 {error in trigger AFTER: no such column: a}} 3461e60261cSdan 34771f059c8Sdan#------------------------------------------------------------------------- 34871f059c8Sdanreset_db 34971f059c8Sdan 35071f059c8Sdando_execsql_test 16.1 { 35171f059c8Sdan CREATE TABLE t1(x); 35271f059c8Sdan CREATE TRIGGER AFTER INSERT ON t1 BEGIN 35371f059c8Sdan SELECT (WITH t2 AS (WITH t3 AS (SELECT true) 35471f059c8Sdan SELECT * FROM t3 ORDER BY true COLLATE nocase) 35571f059c8Sdan SELECT 11); 35671f059c8Sdan 35771f059c8Sdan WITH t4 AS (SELECT * FROM t1) SELECT 33; 35871f059c8Sdan END; 35971f059c8Sdan} 36071f059c8Sdando_execsql_test 16.2 { 36171f059c8Sdan ALTER TABLE t1 RENAME TO t1x; 36271f059c8Sdan} 36371f059c8Sdan 36472d1eac6Sdan#------------------------------------------------------------------------- 36572d1eac6Sdanreset_db 36672d1eac6Sdando_execsql_test 17.1 { 36772d1eac6Sdan CREATE TABLE t1(a,b,c); 36872d1eac6Sdan CREATE TRIGGER AFTER INSERT ON t1 WHEN new.a NOT NULL BEGIN 36972d1eac6Sdan SELECT a () FILTER (WHERE a>0) FROM t1; 37072d1eac6Sdan END; 37172d1eac6Sdan} 37272d1eac6Sdan 37372d1eac6Sdando_execsql_test 17.2 { 37472d1eac6Sdan ALTER TABLE t1 RENAME TO t1x; 37572d1eac6Sdan ALTER TABLE t1x RENAME a TO aaa; 37672d1eac6Sdan SELECT sql FROM sqlite_master WHERE type='trigger'; 37772d1eac6Sdan} { 37872d1eac6Sdan{CREATE TRIGGER AFTER INSERT ON "t1x" WHEN new.aaa NOT NULL BEGIN 37972d1eac6Sdan SELECT a () FILTER (WHERE aaa>0) FROM "t1x"; 38072d1eac6Sdan END} 38172d1eac6Sdan} 38272d1eac6Sdan 3839930cfe8Sdan#------------------------------------------------------------------------- 3849930cfe8Sdanreset_db 3859930cfe8Sdando_execsql_test 18.1 { 3869930cfe8Sdan CREATE TABLE t1(a,b); 3879930cfe8Sdan CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN 3889930cfe8Sdan SELECT a, b FROM t1 3899930cfe8Sdan INTERSECT SELECT b,a FROM t1 3909930cfe8Sdan ORDER BY b IN ( 3919930cfe8Sdan SELECT a UNION SELECT b 3929930cfe8Sdan FROM t1 3939930cfe8Sdan ORDER BY b COLLATE nocase 3949930cfe8Sdan ) 3959930cfe8Sdan ; 3969930cfe8Sdan END; 3979930cfe8Sdan} 3989930cfe8Sdan 3999930cfe8Sdando_catchsql_test 18.2 { 4009930cfe8Sdan SELECT a, b FROM t1 4019930cfe8Sdan INTERSECT 4029930cfe8Sdan SELECT b,a FROM t1 4039930cfe8Sdan ORDER BY b IN ( 4049930cfe8Sdan SELECT a UNION SELECT b 4059930cfe8Sdan FROM t1 4069930cfe8Sdan ORDER BY b COLLATE nocase 4079930cfe8Sdan ); 4089930cfe8Sdan} {1 {1st ORDER BY term does not match any column in the result set}} 4099930cfe8Sdan 4109930cfe8Sdando_catchsql_test 18.3 { 4119930cfe8Sdan ALTER TABLE t1 RENAME TO t1x; 4129930cfe8Sdan} {1 {error in trigger r1: 1st ORDER BY term does not match any column in the result set}} 4139930cfe8Sdan 4148f407622Sdan#------------------------------------------------------------------------- 4158f407622Sdanreset_db 4168f407622Sdando_execsql_test 19.0 { 4178f407622Sdan CREATE TABLE a(a,h CONSTRAINT a UNIQUE ON CONFLICT FAIL,CONSTRAINT a); 4188f407622Sdan} 4198f407622Sdan 4208f407622Sdanforeach {tn v res} { 4218f407622Sdan 1 { 4228f407622Sdan CREATE VIEW q AS SELECT 123 4238f407622Sdan 4248f407622Sdan WINDOW x AS ( 4258f407622Sdan RANGE BETWEEN UNBOUNDED PRECEDING AND INDEXED() OVER( 4268f407622Sdan PARTITION BY ( WITH x AS(VALUES(col1)) VALUES(453) ) 4278f407622Sdan ) 4288f407622Sdan FOLLOWING 4298f407622Sdan ) 4308f407622Sdan } {1 {error in view q: no such column: col1}} 4318f407622Sdan 4328f407622Sdan 2 { 4338f407622Sdan CREATE VIEW q AS SELECT 4348f407622Sdan CAST(CAST(CAST(CAST(CAST(CAST(CAST(CAST(CAST(CAST(CAST(RIGHT 4358f407622Sdan AS)AS)AS)AS)AS)AS)AS)AS)AS)AS)AS)WINDOW x AS(RANGE BETWEEN UNBOUNDED 4368f407622Sdan PRECEDING AND INDEXED(*)OVER(PARTITION BY 4378f407622Sdan CROSS,CROSS,NATURAL,sqlite_master(*)OVER a,(WITH a AS(VALUES(LEFT)UNION 4388f407622Sdan VALUES(LEFT)UNION VALUES(LEFT)UNION VALUES(LEFT)UNION VALUES(LEFT)UNION 4398f407622Sdan VALUES(LEFT)UNION VALUES(LEFT))VALUES(LEFT))IN 4408f407622Sdan STORED,LEFT,LEFT,LEFT,LEFT,LEFT,LEFT)*LEFT FOLLOWING)ORDER BY 4418f407622Sdan LEFT,LEFT,LEFT,LEFT,LEFT,LEFT,LEFT,LEFT,LEFT,LEFT,LEFT LIMIT 4428f407622Sdan LEFT,INDEXED(*)OVER(PARTITION BY 4438f407622Sdan CROSS,CROSS,CROSS,LEFT,INDEXED(*)OVER(PARTITION BY 4448f407622Sdan CROSS,CROSS,CROSS),INDEXED(*)OVER(PARTITION BY 4458f407622Sdan LEFT,LEFT,LEFT,LEFT,LEFT,LEFT,LEFT,LEFT,LEFT,LEFT,LEFT), 4468f407622Sdan LEFT,LEFT,INNER,CROSS,CROSS,CROSS,INNER,NATURAL ORDER BY 4478f407622Sdan OUTER,NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,INNER, 4488f407622Sdan INNER,INNER NULLS LAST GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED 4498f407622Sdan FOLLOWING); 4508f407622Sdan } {1 {error in view q: no such column: LEFT}} 4518f407622Sdan 4528f407622Sdan 3 { 4538f407622Sdan CREATE VIEW q AS SELECT 99 WINDOW x AS (RANGE BETWEEN UNBOUNDED PRECEDING 4548f407622Sdan AND count(*)OVER(PARTITION BY (WITH a AS(VALUES(2),(x3))VALUES(0))) 4558f407622Sdan FOLLOWING)ORDER BY x2,sum(1)OVER(PARTITION BY avg(5)OVER(PARTITION BY x1)); 4568f407622Sdan } {1 {error in view q: no such column: x3}} 4578f407622Sdan} { 4588f407622Sdan do_execsql_test 19.$tn.1 " 4598f407622Sdan DROP VIEW IF EXISTS q; 4608f407622Sdan $v 4618f407622Sdan " {} 4628f407622Sdan 4638f407622Sdan do_catchsql_test 19.$tn.2 { 4648f407622Sdan ALTER TABLE a RENAME TO g; 4658f407622Sdan } $res 4668f407622Sdan} 4678f407622Sdan 468d63b69b8Sdrh# Verify that the "if( pParse->nErr ) return WRC_Abort" at the top of the 469d63b69b8Sdrh# renameUnmapSelectCb() routine in alter.c (2019-12-04) is really required. 470d63b69b8Sdrh# 471d63b69b8Sdrhsqlite3 db :memory: 472d63b69b8Sdrhdo_catchsql_test 20.10 { 473d63b69b8Sdrh CREATE TABLE s(a, b, c); 474d63b69b8Sdrh CREATE INDEX k ON s( (WITH s AS( SELECT * ) VALUES(2) ) IN () ); 475d63b69b8Sdrh ALTER TABLE s RENAME a TO a2; 476d63b69b8Sdrh} {1 {error in index k: no tables specified}} 47772d1eac6Sdan 478e6dc1e5bSdan#------------------------------------------------------------------------ 479e6dc1e5bSdan# 480e6dc1e5bSdanreset_db 481e6dc1e5bSdando_execsql_test 21.1 { 482e6dc1e5bSdan CREATE TABLE s(col); 483e6dc1e5bSdan CREATE VIEW v AS SELECT ( 484e6dc1e5bSdan WITH x(a) AS(SELECT * FROM s) VALUES(RIGHT) 485e6dc1e5bSdan ) IN() ; 486e6dc1e5bSdan CREATE TABLE a(a); 487e6dc1e5bSdan ALTER TABLE a RENAME a TO b; 488e6dc1e5bSdan} 489e6dc1e5bSdan 49038096961Sdan#------------------------------------------------------------------------ 49138096961Sdan# 49238096961Sdanreset_db 49338096961Sdando_execsql_test 22.1 { 49438096961Sdan CREATE TABLE t1(a); 49538096961Sdan CREATE VIEW v2(b) AS SELECT * FROM v2; 49638096961Sdan} 49738096961Sdan 49838096961Sdando_catchsql_test 22.2 { 49938096961Sdan ALTER TABLE t1 RENAME TO t4; 50038096961Sdan} {1 {error in view v2: view v2 is circularly defined}} 50138096961Sdan 50238096961Sdando_execsql_test 22.3 { 50338096961Sdan DROP VIEW v2; 50438096961Sdan CREATE VIEW v2(b) AS WITH t3 AS (SELECT b FROM v2) SELECT * FROM t3; 50538096961Sdan} 50638096961Sdan 50738096961Sdando_catchsql_test 22.4 { 50838096961Sdan ALTER TABLE t1 RENAME TO t4; 50938096961Sdan} {1 {error in view v2: view v2 is circularly defined}} 51038096961Sdan 51138096961Sdando_execsql_test 22.5 { 51238096961Sdan DROP VIEW v2; 51338096961Sdan CREATE VIEW v2(b) AS WITH t3 AS (SELECT b FROM v2) VALUES(1); 51438096961Sdan} 51538096961Sdan 51638096961Sdando_catchsql_test 22.6 { 51738096961Sdan ALTER TABLE t1 RENAME TO t4; 51838096961Sdan} {0 {}} 51938096961Sdan 520394aa710Sdan#------------------------------------------------------------------------ 521394aa710Sdan# 522394aa710Sdanreset_db 523394aa710Sdando_execsql_test 23.1 { 524394aa710Sdan CREATE TABLE t1(x); 525394aa710Sdan CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN 526394aa710Sdan UPDATE t1 SET (c,d)=((SELECT 1 FROM t1 JOIN t2 ON b=x),1); 527394aa710Sdan END; 528394aa710Sdan} 529394aa710Sdan 530394aa710Sdando_catchsql_test 23.2 { 531394aa710Sdan ALTER TABLE t1 RENAME TO t1x; 532394aa710Sdan} {1 {error in trigger r1: no such table: main.t2}} 533e6dc1e5bSdan 534a6c1a71cSdan#------------------------------------------------------------------------ 535a6c1a71cSdan# 536a6c1a71cSdanreset_db 537a6c1a71cSdando_execsql_test 23.1 { 538a6c1a71cSdan CREATE TABLE v0 (a); 539a6c1a71cSdan CREATE VIEW v2 (v3) AS 540a6c1a71cSdan WITH x1 AS (SELECT * FROM v2) 541a6c1a71cSdan SELECT v3 AS x, v3 AS y FROM v2; 542a6c1a71cSdan} 543a6c1a71cSdan 544a6c1a71cSdando_catchsql_test 23.2 { 545a6c1a71cSdan SELECT * FROM v2 546a6c1a71cSdan} {1 {view v2 is circularly defined}} 547a6c1a71cSdan 548a6c1a71cSdandb close 549a6c1a71cSdansqlite3 db test.db 550a6c1a71cSdan 551a6c1a71cSdando_catchsql_test 23.3 { 552a6c1a71cSdan ALTER TABLE v0 RENAME TO t3 ; 553a6c1a71cSdan} {1 {error in view v2: view v2 is circularly defined}} 554a6c1a71cSdan 5552b6e670fSdan#------------------------------------------------------------------------ 5562b6e670fSdan# 5572b6e670fSdanreset_db 5582b6e670fSdando_execsql_test 24.1 { 5592b6e670fSdan CREATE TABLE v0 (v1); 5602b6e670fSdan CREATE TABLE v2 (v3 INTEGER UNIQUE ON CONFLICT ABORT); 5612b6e670fSdan CREATE TRIGGER x AFTER INSERT ON v2 WHEN ( 5622b6e670fSdan ( SELECT v1 AS PROMO_REVENUE FROM v2 JOIN v0 USING ( VALUE ) ) AND 0 ) 5632b6e670fSdan BEGIN 5642b6e670fSdan DELETE FROM v2; 5652b6e670fSdan END; 5662b6e670fSdan} 5672b6e670fSdando_catchsql_test 24.2 { 5682b6e670fSdan ALTER TABLE v0 RENAME TO x ; 5692b6e670fSdan} {1 {error in trigger x: cannot join using column VALUE - column not present in both tables}} 5702b6e670fSdan 5712b6e670fSdando_execsql_test 24.3 { 5722b6e670fSdan DROP TRIGGER x; 5732b6e670fSdan CREATE TRIGGER x AFTER INSERT ON v2 WHEN ( 5742b6e670fSdan 0 AND (SELECT rowid FROM v0) 5752b6e670fSdan ) BEGIN 5762b6e670fSdan DELETE FROM v2; 5772b6e670fSdan END; 5782b6e670fSdan} 5792b6e670fSdan 5802b6e670fSdando_execsql_test 24.4 { 5812b6e670fSdan ALTER TABLE v0 RENAME TO xyz; 5822b6e670fSdan SELECT sql FROM sqlite_master WHERE type='trigger' 5832b6e670fSdan} {{CREATE TRIGGER x AFTER INSERT ON v2 WHEN ( 5842b6e670fSdan 0 AND (SELECT rowid FROM "xyz") 5852b6e670fSdan ) BEGIN 5862b6e670fSdan DELETE FROM v2; 5872b6e670fSdan END}} 5882b6e670fSdan 589e7877b2dSdan#------------------------------------------------------------------------ 590e7877b2dSdan# 591e7877b2dSdanreset_db 592e7877b2dSdando_execsql_test 25.1 { 593e7877b2dSdan CREATE TABLE t1(a, b, c); 594e7877b2dSdan CREATE TABLE t2(a, b, c); 595e7877b2dSdan CREATE TRIGGER ttt AFTER INSERT ON t1 BEGIN 596e7877b2dSdan UPDATE t1 SET a=t2.a FROM t2 WHERE t1.a=t2.a; 597e7877b2dSdan END; 598e7877b2dSdan} 599e7877b2dSdan#do_execsql_test 25.2 { 600e7877b2dSdan# ALTER TABLE t2 RENAME COLUMN a TO aaa; 601e7877b2dSdan#} 602e7877b2dSdan 6037a39faecSdan#------------------------------------------------------------------------ 6047a39faecSdan# 6057a39faecSdanreset_db 6067a39faecSdando_execsql_test 26.1 { 6077a39faecSdan CREATE TABLE t1(x); 6087a39faecSdan 6097a39faecSdan CREATE TABLE t3(y); 6107a39faecSdan CREATE TABLE t4(z); 6117a39faecSdan 6127a39faecSdan CREATE TRIGGER tr1 INSERT ON t3 BEGIN 6137a39faecSdan UPDATE t3 SET y=z FROM (SELECT z FROM t4); 6147a39faecSdan END; 6157a39faecSdan 6167a39faecSdan CREATE TRIGGER tr2 INSERT ON t3 BEGIN 6177a39faecSdan UPDATE t3 SET y=abc FROM (SELECT x AS abc FROM t1); 6187a39faecSdan END; 6197a39faecSdan} 6207a39faecSdan 6217a39faecSdando_execsql_test 26.2 { 6227a39faecSdan ALTER TABLE t1 RENAME TO t2; 6237a39faecSdan} 6247a39faecSdan 6257a39faecSdando_execsql_test 26.3 { 6267a39faecSdan ALTER TABLE t2 RENAME x TO xx; 6277a39faecSdan} 6287a39faecSdan 6297a39faecSdando_execsql_test 26.4 { 6307a39faecSdan SELECT sql FROM sqlite_schema WHERE name='tr2' 6317a39faecSdan} { 6327a39faecSdan{CREATE TRIGGER tr2 INSERT ON t3 BEGIN 6337a39faecSdan UPDATE t3 SET y=abc FROM (SELECT xx AS abc FROM "t2"); 6347a39faecSdan END} 6357a39faecSdan} 6367a39faecSdan 6376d5ab2a1Sdrh# 2020-11-02 OSSFuzz 6386d5ab2a1Sdrh# 6396d5ab2a1Sdrhreset_db 6406d5ab2a1Sdrhdo_execsql_test 26.5 { 6416d5ab2a1Sdrh CREATE TABLE t1(xx); 6426d5ab2a1Sdrh CREATE TRIGGER xx INSERT ON t1 BEGIN 6436d5ab2a1Sdrh UPDATE t1 SET xx=xx FROM(SELECT xx); 6446d5ab2a1Sdrh END; 6456d5ab2a1Sdrh} {} 6466d5ab2a1Sdrhdo_catchsql_test 26.6 { 6476d5ab2a1Sdrh ALTER TABLE t1 RENAME TO t2; 648*4209d553Sdan} {1 {error in trigger xx: no such column: xx}} 6496d5ab2a1Sdrh 6507a39faecSdan 651a7f7c1c4Sdan#------------------------------------------------------------------------- 652a7f7c1c4Sdanreset_db 653a7f7c1c4Sdan 654a7f7c1c4Sdando_execsql_test 27.1 { 655a7f7c1c4Sdan CREATE TABLE t1(a, b AS ((WITH w1 (xyz) AS ( SELECT t1.b FROM t1 ) SELECT 123) IN ()), c); 656a7f7c1c4Sdan} 657a7f7c1c4Sdan 658a7f7c1c4Sdando_execsql_test 27.2 { 659a7f7c1c4Sdan ALTER TABLE t1 DROP COLUMN c; 660a7f7c1c4Sdan SELECT sql FROM sqlite_schema WHERE name = 't1'; 661a7f7c1c4Sdan} { 662a7f7c1c4Sdan {CREATE TABLE t1(a, b AS ((WITH w1 (xyz) AS ( SELECT t1.b FROM t1 ) SELECT 123) IN ()))} 663a7f7c1c4Sdan} 664a7f7c1c4Sdan 665a7f7c1c4Sdando_execsql_test 27.3 { 666a7f7c1c4Sdan CREATE TABLE t0(c0 , c1 AS (CASE TRUE NOT IN () WHEN NULL THEN CASE + 0xa ISNULL WHEN NOT + 0x9 THEN t0.c1 ELSE CURRENT_TIME LIKE CAST (t0.c1 REGEXP '-([1-9]\d*.\d*|0\.\d*[1-9]\d*)'ESCAPE (c1) COLLATE BINARY BETWEEN c1 AND c1 NOT IN (WITH t4 (c0) AS (WITH t3 (c0) AS NOT MATERIALIZED (WITH RECURSIVE t2 (c0) AS (WITH RECURSIVE t1 AS (VALUES (x'717171ff71717171' ) ) SELECT DISTINCT t0.c0 FROM t0 NOT INDEXED WHERE t0.c0 =t0.c0 GROUP BY 0x9 ) SELECT DISTINCT t0.c0 FROM t0 NOT INDEXED WHERE t0.c0 =t0.c1 ) SELECT DISTINCT t0.c0 FROM t0 NOT INDEXED WHERE t0.c0 =t0.c0 GROUP BY typeof(0x9 ) ) SELECT DISTINCT t0.c0 FROM t0 NOT INDEXED WHERE t0.c0 =t0.c0 GROUP BY typeof(typeof(0x9 ) ) ) IN t0 BETWEEN typeof(typeof(typeof(hex(*) FILTER (WHERE + x'5ccd1e68' ) ) ) ) AND 1 >0xa AS BLOB (+4.4E4 , -0xe ) ) END <> c1 IN () END ) VIRTUAL , c35 PRIMARY KEY , c60 , c64 NUMERIC (-6.8 , -0xE ) ) WITHOUT ROWID ; 667a7f7c1c4Sdan} {} 668a7f7c1c4Sdan 669a7f7c1c4Sdando_execsql_test 27.4 { 670a7f7c1c4Sdan ALTER TABLE t0 DROP COLUMN c60; 671a7f7c1c4Sdan} {} 672a7f7c1c4Sdan 673ab632bc9Sdan#------------------------------------------------------------------------- 674ab632bc9Sdanreset_db 675ab632bc9Sdando_execsql_test 28.1 { 676ab632bc9Sdan CREATE TABLE t1(a,b,c,d); 677ab632bc9Sdan CREATE TRIGGER AFTER INSERT ON t1 BEGIN 678ab632bc9Sdan UPDATE t1 SET (c,d)=(a,b); 679ab632bc9Sdan END; 680ab632bc9Sdan ALTER TABLE t1 RENAME TO t2; 681ab632bc9Sdan} 682ab632bc9Sdan 683ab632bc9Sdando_execsql_test 28.2 { 6840abb7ec3Sdan SELECT sql FROM sqlite_schema WHERE type='trigger' 6850abb7ec3Sdan} {{CREATE TRIGGER AFTER INSERT ON "t2" BEGIN 6860abb7ec3Sdan UPDATE "t2" SET (c,d)=(a,b); 687ab632bc9Sdan END}} 688ab632bc9Sdan 689cbde37d8Sdan 690cbde37d8Sdan#------------------------------------------------------------------------- 691cbde37d8Sdanreset_db 692cbde37d8Sdando_execsql_test 29.1 { 693cbde37d8Sdan CREATE TABLE t1(x, y); 694cbde37d8Sdan CREATE TRIGGER Trigger1 DELETE ON t1 695cbde37d8Sdan BEGIN 696cbde37d8Sdan SELECT t1.*, t1.x FROM t1 ORDER BY t1.x; 697cbde37d8Sdan END; 698cbde37d8Sdan} 699cbde37d8Sdan 700cbde37d8Sdan 701cbde37d8Sdando_execsql_test 29.2 { 702cbde37d8Sdan ALTER TABLE t1 RENAME x TO z; 703cbde37d8Sdan} 704cbde37d8Sdan 705cbde37d8Sdando_execsql_test 29.3 { 706cbde37d8Sdan ALTER TABLE t1 RENAME TO t2; 707cbde37d8Sdan} 708cbde37d8Sdan 709cbde37d8Sdando_execsql_test 29.4 { 710cbde37d8Sdan CREATE TRIGGER tr2 AFTER DELETE ON t2 BEGIN 711cbde37d8Sdan SELECT z, y FROM ( 712cbde37d8Sdan SELECT t2.* FROM t2 713cbde37d8Sdan ); 714cbde37d8Sdan END; 715cbde37d8Sdan} 716cbde37d8Sdan 717cbde37d8Sdando_execsql_test 29.5 { 718cbde37d8Sdan DELETE FROM t2 719cbde37d8Sdan} 720cbde37d8Sdan 721cbde37d8Sdando_execsql_test 29.6 { 722cbde37d8Sdan ALTER TABLE t2 RENAME TO t3; 723cbde37d8Sdan} 724cbde37d8Sdan 725cbde37d8Sdando_execsql_test 29.7 { 726cbde37d8Sdan SELECT sql FROM sqlite_schema WHERE type='trigger' 727cbde37d8Sdan} { 728cbde37d8Sdan {CREATE TRIGGER Trigger1 DELETE ON "t3" 729cbde37d8Sdan BEGIN 730cbde37d8Sdan SELECT "t3".*, "t3".z FROM "t3" ORDER BY "t3".z; 731cbde37d8Sdan END} 732cbde37d8Sdan {CREATE TRIGGER tr2 AFTER DELETE ON "t3" BEGIN 733cbde37d8Sdan SELECT z, y FROM ( 734cbde37d8Sdan SELECT "t3".* FROM "t3" 735cbde37d8Sdan ); 736cbde37d8Sdan END} 737cbde37d8Sdan} 738cbde37d8Sdan 739d9995031Sdanfinish_test 740