xref: /sqlite-3.40.0/test/schema4.test (revision e0a04a36)
139f1bcb1Sdan# 2010 September 28
239f1bcb1Sdan#
339f1bcb1Sdan# The author disclaims copyright to this source code.  In place of
439f1bcb1Sdan# a legal notice, here is a blessing:
539f1bcb1Sdan#
639f1bcb1Sdan#    May you do good and not evil.
739f1bcb1Sdan#    May you find forgiveness for yourself and forgive others.
839f1bcb1Sdan#    May you share freely, never taking more than you give.
939f1bcb1Sdan#
1039f1bcb1Sdan#***********************************************************************
1139f1bcb1Sdan# This file implements regression tests for SQLite library. The
1239f1bcb1Sdan# focus of this file is testing that a trigger may have the same
1339f1bcb1Sdan# name as an index, view or table in the same database.
1439f1bcb1Sdan#
1539f1bcb1Sdan
1639f1bcb1Sdanset testdir [file dirname $argv0]
1739f1bcb1Sdansource $testdir/tester.tcl
1839f1bcb1Sdan
1939f1bcb1Sdan#--------------------------------------------------------------------------
2039f1bcb1Sdan# Test organization:
2139f1bcb1Sdan#
2239f1bcb1Sdan#   schema4-1.*: Dropping and creating triggers and other objects where
2339f1bcb1Sdan#     triggers and at least on other object share a name.
2439f1bcb1Sdan#
2539f1bcb1Sdan#   schema4-2.*: Renaming tables where there is a trigger that shares the
2639f1bcb1Sdan#     name of the table or one of its indices.
2739f1bcb1Sdan#
2839f1bcb1Sdan
2939f1bcb1Sdando_execsql_test schema4-1.1 {
3039f1bcb1Sdan  CREATE TABLE log(x, a, b);
3139f1bcb1Sdan  CREATE TABLE tbl(a, b);
3239f1bcb1Sdan
3339f1bcb1Sdan  CREATE TABLE t1(a, b);
3439f1bcb1Sdan  CREATE VIEW v1 AS SELECT * FROM tbl;
3539f1bcb1Sdan  CREATE INDEX i1 ON tbl(a);
3639f1bcb1Sdan} {}
3739f1bcb1Sdan
3839f1bcb1Sdando_execsql_test schema4-1.2 {
3939f1bcb1Sdan  CREATE TRIGGER t1 AFTER INSERT ON tbl BEGIN
4039f1bcb1Sdan    INSERT INTO log VALUES('after insert', new.a, new.b);
4139f1bcb1Sdan  END;
4239f1bcb1Sdan  CREATE TRIGGER v1 AFTER UPDATE ON tbl BEGIN
4339f1bcb1Sdan    INSERT INTO log VALUES('after update', new.a, new.b);
4439f1bcb1Sdan  END;
4539f1bcb1Sdan  CREATE TRIGGER i1 AFTER DELETE ON tbl BEGIN
4639f1bcb1Sdan    INSERT INTO log VALUES('after delete', old.a, old.b);
4739f1bcb1Sdan  END;
4839f1bcb1Sdan} {}
4939f1bcb1Sdan
5039f1bcb1Sdando_execsql_test schema4-1.3 {
5139f1bcb1Sdan  INSERT INTO tbl VALUES(1, 2);
5239f1bcb1Sdan  UPDATE tbl SET b=a+b, a=a+1;
5339f1bcb1Sdan  DELETE FROM tbl;
5439f1bcb1Sdan
5539f1bcb1Sdan  SELECT x, a, b FROM log;
5639f1bcb1Sdan} {{after insert} 1 2 {after update} 2 3 {after delete} 2 3}
5739f1bcb1Sdan
5839f1bcb1Sdando_execsql_test schema4-1.4 {
5939f1bcb1Sdan  DELETE FROM log;
6039f1bcb1Sdan
6139f1bcb1Sdan  DROP INDEX i1;
6239f1bcb1Sdan  DROP TABLE t1;
6339f1bcb1Sdan  DROP VIEW v1;
6439f1bcb1Sdan
6539f1bcb1Sdan  INSERT INTO tbl VALUES(1, 2);
6639f1bcb1Sdan  UPDATE tbl SET b=a+b, a=a+1;
6739f1bcb1Sdan  DELETE FROM tbl;
6839f1bcb1Sdan
6939f1bcb1Sdan  SELECT x, a, b FROM log;
7039f1bcb1Sdan} {{after insert} 1 2 {after update} 2 3 {after delete} 2 3}
7139f1bcb1Sdan
7239f1bcb1Sdandb close
7339f1bcb1Sdansqlite3 db test.db
7439f1bcb1Sdan
7539f1bcb1Sdando_execsql_test schema4-1.5 {
7639f1bcb1Sdan  DELETE FROM log;
7739f1bcb1Sdan  INSERT INTO tbl VALUES(1, 2);
7839f1bcb1Sdan  UPDATE tbl SET b=a+b, a=a+1;
7939f1bcb1Sdan  DELETE FROM tbl;
8039f1bcb1Sdan  SELECT x, a, b FROM log;
8139f1bcb1Sdan} {{after insert} 1 2 {after update} 2 3 {after delete} 2 3}
8239f1bcb1Sdan
8339f1bcb1Sdando_execsql_test schema4-1.6 {
8439f1bcb1Sdan  CREATE TABLE t1(a, b);
8539f1bcb1Sdan  CREATE VIEW v1 AS SELECT * FROM tbl;
8639f1bcb1Sdan  CREATE INDEX i1 ON tbl(a);
8739f1bcb1Sdan} {}
8839f1bcb1Sdan
8939f1bcb1Sdanifcapable fts3 {
9039f1bcb1Sdan  do_execsql_test schema4-1.7 {
9139f1bcb1Sdan    DROP TABLE t1;
9239f1bcb1Sdan    CREATE VIRTUAL TABLE t1 USING fts3;
9339f1bcb1Sdan  } {}
9439f1bcb1Sdan
9539f1bcb1Sdan  do_execsql_test schema4-1.8 {
9639f1bcb1Sdan    DELETE FROM log;
9739f1bcb1Sdan    DROP TABLE t1;
9839f1bcb1Sdan    INSERT INTO tbl VALUES(1, 2);
9939f1bcb1Sdan    UPDATE tbl SET b=a+b, a=a+1;
10039f1bcb1Sdan    DELETE FROM tbl;
10139f1bcb1Sdan    SELECT x, a, b FROM log;
10239f1bcb1Sdan  } {{after insert} 1 2 {after update} 2 3 {after delete} 2 3}
10339f1bcb1Sdan}
10439f1bcb1Sdan
10539f1bcb1Sdanifcapable altertable {
10639f1bcb1Sdan  drop_all_tables
10739f1bcb1Sdan  do_execsql_test schema4-2.1 {
10839f1bcb1Sdan    CREATE TABLE log(x, a, b);
10939f1bcb1Sdan    CREATE TABLE tbl(a, b);
11039f1bcb1Sdan
11139f1bcb1Sdan    CREATE TABLE t1(a, b);
11239f1bcb1Sdan    CREATE INDEX i1 ON t1(a, b);
11339f1bcb1Sdan  } {}
11439f1bcb1Sdan
11539f1bcb1Sdan  do_execsql_test schema4-2.2 {
11639f1bcb1Sdan    CREATE TRIGGER t1 AFTER INSERT ON tbl BEGIN
11739f1bcb1Sdan      INSERT INTO log VALUES('after insert', new.a, new.b);
11839f1bcb1Sdan    END;
11939f1bcb1Sdan    CREATE TRIGGER i1 AFTER DELETE ON tbl BEGIN
12039f1bcb1Sdan      INSERT INTO log VALUES('after delete', old.a, old.b);
12139f1bcb1Sdan    END;
12239f1bcb1Sdan  } {}
12339f1bcb1Sdan
12439f1bcb1Sdan  do_execsql_test schema4-2.3 { ALTER TABLE t1 RENAME TO t2 } {}
12539f1bcb1Sdan
12639f1bcb1Sdan  do_execsql_test schema4-2.4 {
12739f1bcb1Sdan    INSERT INTO tbl VALUES('a', 'b');
12839f1bcb1Sdan    DELETE FROM tbl;
12939f1bcb1Sdan    SELECT * FROM log;
13039f1bcb1Sdan  } {{after insert} a b {after delete} a b}
13139f1bcb1Sdan
13239f1bcb1Sdan  db close
13339f1bcb1Sdan  sqlite3 db test.db
13439f1bcb1Sdan
13539f1bcb1Sdan  do_execsql_test schema4-2.5 {
13639f1bcb1Sdan    DELETE FROM log;
13739f1bcb1Sdan    INSERT INTO tbl VALUES('c', 'd');
13839f1bcb1Sdan    DELETE FROM tbl;
13939f1bcb1Sdan    SELECT * FROM log;
14039f1bcb1Sdan  } {{after insert} c d {after delete} c d}
14139f1bcb1Sdan
14239f1bcb1Sdan  do_execsql_test schema4-2.6 {
14339f1bcb1Sdan    CREATE TEMP TRIGGER x1 AFTER UPDATE ON tbl BEGIN
14439f1bcb1Sdan      INSERT INTO log VALUES('after update', new.a, new.b);
14539f1bcb1Sdan    END;
14639f1bcb1Sdan
14739f1bcb1Sdan    CREATE TEMP TABLE x1(x);
14839f1bcb1Sdan    INSERT INTO x1 VALUES(123);
14939f1bcb1Sdan  } {}
15039f1bcb1Sdan
15139f1bcb1Sdan  do_execsql_test schema4-2.8 {
152*e0a04a36Sdrh    select sql from temp.sqlite_master WHERE type='table';
15339f1bcb1Sdan  } {{CREATE TABLE x1(x)}}
15439f1bcb1Sdan
15539f1bcb1Sdan  do_execsql_test schema4-2.7 { ALTER TABLE tbl RENAME TO tbl2 } {}
15639f1bcb1Sdan
15739f1bcb1Sdan  do_execsql_test schema4-2.9 {
15839f1bcb1Sdan    select sql from sqlite_temp_master WHERE type='table';
15939f1bcb1Sdan  } {{CREATE TABLE x1(x)}}
16039f1bcb1Sdan
16139f1bcb1Sdan  do_execsql_test schema4-2.10 {
16239f1bcb1Sdan    DELETE FROM log;
16339f1bcb1Sdan    INSERT INTO tbl2 VALUES('e', 'f');
16439f1bcb1Sdan    UPDATE tbl2 SET a='g', b='h';
16539f1bcb1Sdan    DELETE FROM tbl2;
16639f1bcb1Sdan    SELECT * FROM log;
16739f1bcb1Sdan  } {{after insert} e f {after update} g h {after delete} g h}
16839f1bcb1Sdan
16939f1bcb1Sdan  do_execsql_test schema4-2.11 {
17039f1bcb1Sdan    INSERT INTO x1 VALUES(456);
17139f1bcb1Sdan    SELECT * FROM x1
17239f1bcb1Sdan  } {123 456}
17339f1bcb1Sdan}
17439f1bcb1Sdan
17539f1bcb1Sdanfinish_test
176