xref: /sqlite-3.40.0/test/alterqf.test (revision fde30432)
11e24072dSdan# 2021 March 16
21e24072dSdan#
31e24072dSdan# The author disclaims copyright to this source code.  In place of
41e24072dSdan# a legal notice, here is a blessing:
51e24072dSdan#
61e24072dSdan#    May you do good and not evil.
71e24072dSdan#    May you find forgiveness for yourself and forgive others.
81e24072dSdan#    May you share freely, never taking more than you give.
91e24072dSdan#
101e24072dSdan#***********************************************************************
111e24072dSdan# This file implements regression tests for SQLite library. This
121fffa73eSdan# script focuses on testing internal function sqlite_rename_quotefix().
131e24072dSdan#
141e24072dSdan
151e24072dSdan
161e24072dSdanset testdir [file dirname $argv0]
171e24072dSdansource $testdir/tester.tcl
181e24072dSdanset testprefix alterqf
191e24072dSdan
2037f3ac8fSdan# If SQLITE_OMIT_ALTERTABLE is defined, omit this file.
2137f3ac8fSdanifcapable !altertable {
2237f3ac8fSdan  finish_test
2337f3ac8fSdan  return
2437f3ac8fSdan}
2537f3ac8fSdan
2637f3ac8fSdan
271e24072dSdansqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db
287d44b22dSdrhsqlite3_db_config db SQLITE_DBCONFIG_DQS_DDL 1
297d44b22dSdrhsqlite3_db_config db SQLITE_DBCONFIG_DQS_DML 1
301e24072dSdan
311e24072dSdando_execsql_test 1.0 {
321e24072dSdan  CREATE TABLE t1(a, b, c);
331e24072dSdan}
341e24072dSdan
351e24072dSdanforeach {tn before after} {
361e24072dSdan  1 {CREATE VIEW v1 AS SELECT "a", "b", "notacolumn!", "c" FROM t1}
371e24072dSdan    {CREATE VIEW v1 AS SELECT "a", "b", 'notacolumn!', "c" FROM t1}
381e24072dSdan
391e24072dSdan  2 {CREATE VIEW v1 AS SELECT "a", "b", "not'a'column!", "c" FROM t1}
401e24072dSdan    {CREATE VIEW v1 AS SELECT "a", "b", 'not''a''column!', "c" FROM t1}
411e24072dSdan
421e24072dSdan  3 {CREATE VIEW v1 AS SELECT "a", "b", "not""a""column!", "c" FROM t1}
431e24072dSdan    {CREATE VIEW v1 AS SELECT "a", "b", 'not"a"column!', "c" FROM t1}
441e24072dSdan
451e24072dSdan  4 {CREATE VIEW v1 AS SELECT "val", count("b") FROM t1 GROUP BY "abc"}
461e24072dSdan    {CREATE VIEW v1 AS SELECT 'val', count("b") FROM t1 GROUP BY 'abc'}
471e24072dSdan
481e24072dSdan  5 {CREATE TABLE xyz(a CHECK (a!="str"), b AS (a||"str"))}
491e24072dSdan    {CREATE TABLE xyz(a CHECK (a!='str'), b AS (a||'str'))}
501e24072dSdan
511e24072dSdan  6 {CREATE INDEX i1 ON t1(a || "str", "b", "val")}
521e24072dSdan    {CREATE INDEX i1 ON t1(a || 'str', "b", 'val')}
531e24072dSdan
541e24072dSdan  7 {CREATE TRIGGER tr AFTER INSERT ON t1 BEGIN SELECT "abcd"; END}
551e24072dSdan    {CREATE TRIGGER tr AFTER INSERT ON t1 BEGIN SELECT 'abcd'; END}
561e24072dSdan
571e24072dSdan  8 {CREATE VIEW v1 AS SELECT "string"'alias' FROM t1}
581e24072dSdan    {CREATE VIEW v1 AS SELECT 'string' 'alias' FROM t1}
591e24072dSdan
601e24072dSdan  9 {CREATE INDEX i1 ON t1(a) WHERE "b"="bb"}
611e24072dSdan    {CREATE INDEX i1 ON t1(a) WHERE "b"='bb'}
621e24072dSdan
631fffa73eSdan 10 {CREATE TABLE t2(abc, xyz CHECK (xyz != "123"))}
641fffa73eSdan    {CREATE TABLE t2(abc, xyz CHECK (xyz != '123'))}
651fffa73eSdan
66*fde30432Sdrh 11 {CREATE TRIGGER ott AFTER UPDATE ON t1 BEGIN
671fffa73eSdan      SELECT max("str", new."a") FROM t1
681fffa73eSdan          WHERE group_concat("b", ",") OVER (ORDER BY c||"str");
691fffa73eSdan      UPDATE t1 SET c= b + "str";
701fffa73eSdan      DELETE FROM t1 WHERE EXISTS (
711fffa73eSdan        SELECT 1 FROM t1 AS o WHERE o."a" = "o.a" AND t1.b IN("t1.b")
721fffa73eSdan      );
731fffa73eSdan    END;
74*fde30432Sdrh } {CREATE TRIGGER ott AFTER UPDATE ON t1 BEGIN
751fffa73eSdan      SELECT max('str', new."a") FROM t1
761fffa73eSdan          WHERE group_concat("b", ',') OVER (ORDER BY c||'str');
771fffa73eSdan      UPDATE t1 SET c= b + 'str';
781fffa73eSdan      DELETE FROM t1 WHERE EXISTS (
791fffa73eSdan        SELECT 1 FROM t1 AS o WHERE o."a" = 'o.a' AND t1.b IN('t1.b')
801fffa73eSdan      );
811fffa73eSdan    END;
821fffa73eSdan }
831fffa73eSdan
841e24072dSdan} {
851e24072dSdan  do_execsql_test 1.$tn {
861e24072dSdan    SELECT sqlite_rename_quotefix('main', $before)
871e24072dSdan  } [list $after]
881e24072dSdan}
891e24072dSdan
901fffa73eSdan#-------------------------------------------------------------------------
911fffa73eSdanreset_db
927d44b22dSdrhsqlite3_db_config db SQLITE_DBCONFIG_DQS_DDL 1
937d44b22dSdrhsqlite3_db_config db SQLITE_DBCONFIG_DQS_DML 1
941fffa73eSdando_execsql_test 2.0 {
951fffa73eSdan  CREATE TABLE x1(
961fffa73eSdan      one, two, three, PRIMARY KEY(one),
971fffa73eSdan      CHECK (three!="xyz"), CHECK (two!="one")
981fffa73eSdan  ) WITHOUT ROWID;
991fffa73eSdan  CREATE INDEX x1i ON x1(one+"two"+"four") WHERE "five";
1001fffa73eSdan  CREATE TEMP TRIGGER AFTER INSERT ON x1 BEGIN
1011fffa73eSdan    UPDATE x1 SET two=new.three || "new" WHERE one=new.one||"";
1021fffa73eSdan  END;
1031fffa73eSdan}
1041fffa73eSdan
1051fffa73eSdando_execsql_test 2.1 {
1061fffa73eSdan  ALTER TABLE x1 RENAME two TO 'four';
1071fffa73eSdan  SELECT sql FROM sqlite_schema;
1081fffa73eSdan  SELECT sql FROM sqlite_temp_schema;
1091fffa73eSdan} {{CREATE TABLE x1(
1101fffa73eSdan      one, "four", three, PRIMARY KEY(one),
1111fffa73eSdan      CHECK (three!='xyz'), CHECK ("four"!="one")
1121fffa73eSdan  ) WITHOUT ROWID}
1131fffa73eSdan  {CREATE INDEX x1i ON x1(one+"four"+'four') WHERE 'five'}
1141fffa73eSdan  {CREATE TRIGGER AFTER INSERT ON x1 BEGIN
1151fffa73eSdan    UPDATE x1 SET "four"=new.three || 'new' WHERE one=new.one||'';
1161fffa73eSdan  END}
1171fffa73eSdan}
1181fffa73eSdan
1191e24072dSdan
1201e24072dSdanfinish_test
121