Annotation of embedaddon/sqlite3/test/tkt3810.test, revision 1.1
1.1 ! misho 1: # 2009 August 1
! 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: #
! 12: # Tests to make sure #3810 is fixed.
! 13: #
! 14: # $Id: tkt3810.test,v 1.4 2009/08/06 17:43:31 drh Exp $
! 15:
! 16: set testdir [file dirname $argv0]
! 17: source $testdir/tester.tcl
! 18: ifcapable {!trigger} {
! 19: finish_test
! 20: return
! 21: }
! 22:
! 23: # Create a table using the first database connection.
! 24: #
! 25: do_test tkt3810-1.1 {
! 26: execsql {
! 27: CREATE TABLE t1(x);
! 28: INSERT INTO t1 VALUES(123);
! 29: SELECT * FROM t1;
! 30: CREATE TABLE t2(y);
! 31: CREATE TABLE t3(z);
! 32: }
! 33: } 123
! 34:
! 35: # Create a second connection to the same database. Make sure the
! 36: # schema of the database has been parsed by the second connection.
! 37: #
! 38: do_test tkt3810-2 {
! 39: sqlite3 db2 test.db
! 40: execsql {
! 41: SELECT * FROM t1;
! 42: } db2
! 43: } 123
! 44:
! 45: # DROP the table using the second connection. The table no longer exists
! 46: # but the first connection does not yet know this. Then try to create a TEMP
! 47: # trigger in the first connection that references the table that was dropped.
! 48: #
! 49: do_test tkt3810-3 {
! 50: execsql {DROP TABLE t1} db2
! 51: execsql {
! 52: CREATE TEMP TRIGGER r1 AFTER INSERT ON t1 BEGIN
! 53: INSERT INTO t2 VALUES(new.rowid);
! 54: END;
! 55: }
! 56: catchsql {
! 57: SELECT * FROM t3;
! 58: }
! 59: } {0 {}}
! 60:
! 61: # Trigger still exists in the sqlite_temp_master table, but now it is
! 62: # an orphan.
! 63: #
! 64: do_test tkt3810-4 {
! 65: execsql {SELECT name FROM sqlite_temp_master ORDER BY name}
! 66: } {r1}
! 67:
! 68: # Because it is an orphan, it cannot be dropped.
! 69: #
! 70: do_test tkt3810-5 {
! 71: catchsql {DROP TRIGGER r1}
! 72: } {1 {no such trigger: r1}}
! 73:
! 74: # Create a table t1 then drop the table in order to drop the orphaned
! 75: # trigger.
! 76: #
! 77: do_test tkt3810-6 {
! 78: execsql {CREATE TABLE t1(x)} db2
! 79: execsql {DROP TABLE t1}
! 80: execsql {
! 81: SELECT name FROM sqlite_temp_master;
! 82: }
! 83: } {}
! 84:
! 85: db2 close
! 86:
! 87: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>