xref: /sqlite-3.40.0/test/altertab3.test (revision 4209d553)
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