Annotation of embedaddon/sqlite3/test/schema4.test, revision 1.1
1.1 ! misho 1: # 2010 September 28
! 2: #
! 3: # The author disclaims copyright to this source code. In place of
! 4: # a legal notice, here is a blessing:
! 5: #
! 6: # May you do good and not evil.
! 7: # May you find forgiveness for yourself and forgive others.
! 8: # May you share freely, never taking more than you give.
! 9: #
! 10: #***********************************************************************
! 11: # This file implements regression tests for SQLite library. The
! 12: # focus of this file is testing that a trigger may have the same
! 13: # name as an index, view or table in the same database.
! 14: #
! 15:
! 16: set testdir [file dirname $argv0]
! 17: source $testdir/tester.tcl
! 18:
! 19: #--------------------------------------------------------------------------
! 20: # Test organization:
! 21: #
! 22: # schema4-1.*: Dropping and creating triggers and other objects where
! 23: # triggers and at least on other object share a name.
! 24: #
! 25: # schema4-2.*: Renaming tables where there is a trigger that shares the
! 26: # name of the table or one of its indices.
! 27: #
! 28:
! 29: do_execsql_test schema4-1.1 {
! 30: CREATE TABLE log(x, a, b);
! 31: CREATE TABLE tbl(a, b);
! 32:
! 33: CREATE TABLE t1(a, b);
! 34: CREATE VIEW v1 AS SELECT * FROM tbl;
! 35: CREATE INDEX i1 ON tbl(a);
! 36: } {}
! 37:
! 38: do_execsql_test schema4-1.2 {
! 39: CREATE TRIGGER t1 AFTER INSERT ON tbl BEGIN
! 40: INSERT INTO log VALUES('after insert', new.a, new.b);
! 41: END;
! 42: CREATE TRIGGER v1 AFTER UPDATE ON tbl BEGIN
! 43: INSERT INTO log VALUES('after update', new.a, new.b);
! 44: END;
! 45: CREATE TRIGGER i1 AFTER DELETE ON tbl BEGIN
! 46: INSERT INTO log VALUES('after delete', old.a, old.b);
! 47: END;
! 48: } {}
! 49:
! 50: do_execsql_test schema4-1.3 {
! 51: INSERT INTO tbl VALUES(1, 2);
! 52: UPDATE tbl SET b=a+b, a=a+1;
! 53: DELETE FROM tbl;
! 54:
! 55: SELECT x, a, b FROM log;
! 56: } {{after insert} 1 2 {after update} 2 3 {after delete} 2 3}
! 57:
! 58: do_execsql_test schema4-1.4 {
! 59: DELETE FROM log;
! 60:
! 61: DROP INDEX i1;
! 62: DROP TABLE t1;
! 63: DROP VIEW v1;
! 64:
! 65: INSERT INTO tbl VALUES(1, 2);
! 66: UPDATE tbl SET b=a+b, a=a+1;
! 67: DELETE FROM tbl;
! 68:
! 69: SELECT x, a, b FROM log;
! 70: } {{after insert} 1 2 {after update} 2 3 {after delete} 2 3}
! 71:
! 72: db close
! 73: sqlite3 db test.db
! 74:
! 75: do_execsql_test schema4-1.5 {
! 76: DELETE FROM log;
! 77: INSERT INTO tbl VALUES(1, 2);
! 78: UPDATE tbl SET b=a+b, a=a+1;
! 79: DELETE FROM tbl;
! 80: SELECT x, a, b FROM log;
! 81: } {{after insert} 1 2 {after update} 2 3 {after delete} 2 3}
! 82:
! 83: do_execsql_test schema4-1.6 {
! 84: CREATE TABLE t1(a, b);
! 85: CREATE VIEW v1 AS SELECT * FROM tbl;
! 86: CREATE INDEX i1 ON tbl(a);
! 87: } {}
! 88:
! 89: ifcapable fts3 {
! 90: do_execsql_test schema4-1.7 {
! 91: DROP TABLE t1;
! 92: CREATE VIRTUAL TABLE t1 USING fts3;
! 93: } {}
! 94:
! 95: do_execsql_test schema4-1.8 {
! 96: DELETE FROM log;
! 97: DROP TABLE t1;
! 98: INSERT INTO tbl VALUES(1, 2);
! 99: UPDATE tbl SET b=a+b, a=a+1;
! 100: DELETE FROM tbl;
! 101: SELECT x, a, b FROM log;
! 102: } {{after insert} 1 2 {after update} 2 3 {after delete} 2 3}
! 103: }
! 104:
! 105: ifcapable altertable {
! 106: drop_all_tables
! 107: do_execsql_test schema4-2.1 {
! 108: CREATE TABLE log(x, a, b);
! 109: CREATE TABLE tbl(a, b);
! 110:
! 111: CREATE TABLE t1(a, b);
! 112: CREATE INDEX i1 ON t1(a, b);
! 113: } {}
! 114:
! 115: do_execsql_test schema4-2.2 {
! 116: CREATE TRIGGER t1 AFTER INSERT ON tbl BEGIN
! 117: INSERT INTO log VALUES('after insert', new.a, new.b);
! 118: END;
! 119: CREATE TRIGGER i1 AFTER DELETE ON tbl BEGIN
! 120: INSERT INTO log VALUES('after delete', old.a, old.b);
! 121: END;
! 122: } {}
! 123:
! 124: do_execsql_test schema4-2.3 { ALTER TABLE t1 RENAME TO t2 } {}
! 125:
! 126: do_execsql_test schema4-2.4 {
! 127: INSERT INTO tbl VALUES('a', 'b');
! 128: DELETE FROM tbl;
! 129: SELECT * FROM log;
! 130: } {{after insert} a b {after delete} a b}
! 131:
! 132: db close
! 133: sqlite3 db test.db
! 134:
! 135: do_execsql_test schema4-2.5 {
! 136: DELETE FROM log;
! 137: INSERT INTO tbl VALUES('c', 'd');
! 138: DELETE FROM tbl;
! 139: SELECT * FROM log;
! 140: } {{after insert} c d {after delete} c d}
! 141:
! 142: do_execsql_test schema4-2.6 {
! 143: CREATE TEMP TRIGGER x1 AFTER UPDATE ON tbl BEGIN
! 144: INSERT INTO log VALUES('after update', new.a, new.b);
! 145: END;
! 146:
! 147: CREATE TEMP TABLE x1(x);
! 148: INSERT INTO x1 VALUES(123);
! 149: } {}
! 150:
! 151: do_execsql_test schema4-2.8 {
! 152: select sql from sqlite_temp_master WHERE type='table';
! 153: } {{CREATE TABLE x1(x)}}
! 154:
! 155: do_execsql_test schema4-2.7 { ALTER TABLE tbl RENAME TO tbl2 } {}
! 156:
! 157: do_execsql_test schema4-2.9 {
! 158: select sql from sqlite_temp_master WHERE type='table';
! 159: } {{CREATE TABLE x1(x)}}
! 160:
! 161: do_execsql_test schema4-2.10 {
! 162: DELETE FROM log;
! 163: INSERT INTO tbl2 VALUES('e', 'f');
! 164: UPDATE tbl2 SET a='g', b='h';
! 165: DELETE FROM tbl2;
! 166: SELECT * FROM log;
! 167: } {{after insert} e f {after update} g h {after delete} g h}
! 168:
! 169: do_execsql_test schema4-2.11 {
! 170: INSERT INTO x1 VALUES(456);
! 171: SELECT * FROM x1
! 172: } {123 456}
! 173: }
! 174:
! 175: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>