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