88 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # 2009 August 1
 | |
| #
 | |
| # The author disclaims copyright to this source code.  In place of
 | |
| # a legal notice, here is a blessing:
 | |
| #
 | |
| #    May you do good and not evil.
 | |
| #    May you find forgiveness for yourself and forgive others.
 | |
| #    May you share freely, never taking more than you give.
 | |
| #
 | |
| #***********************************************************************
 | |
| #
 | |
| # Tests to make sure #3810 is fixed.
 | |
| #
 | |
| # $Id: tkt3810.test,v 1.4 2009/08/06 17:43:31 drh Exp $
 | |
| 
 | |
| set testdir [file dirname $argv0]
 | |
| source $testdir/tester.tcl
 | |
| ifcapable {!trigger} {
 | |
|   finish_test
 | |
|   return
 | |
| }
 | |
| 
 | |
| # Create a table using the first database connection.
 | |
| #
 | |
| do_test tkt3810-1.1 {
 | |
|   execsql {
 | |
|     CREATE TABLE t1(x);
 | |
|     INSERT INTO t1 VALUES(123);
 | |
|     SELECT * FROM t1;
 | |
|     CREATE TABLE t2(y);
 | |
|     CREATE TABLE t3(z);
 | |
|   }
 | |
| } 123
 | |
| 
 | |
| # Create a second connection to the same database.  Make sure the
 | |
| # schema of the database has been parsed by the second connection.
 | |
| #
 | |
| do_test tkt3810-2 {
 | |
|   sqlite3 db2 test.db
 | |
|   execsql {
 | |
|     SELECT * FROM t1;
 | |
|   } db2
 | |
| } 123
 | |
| 
 | |
| # DROP the table using the second connection.  The table no longer exists
 | |
| # but the first connection does not yet know this.  Then try to create a TEMP
 | |
| # trigger in the first connection that references the table that was dropped.
 | |
| #
 | |
| do_test tkt3810-3 {
 | |
|   execsql {DROP TABLE t1} db2
 | |
|   execsql {
 | |
|      CREATE TEMP TRIGGER r1 AFTER INSERT ON t1 BEGIN
 | |
|        INSERT INTO t2 VALUES(new.rowid);
 | |
|      END;
 | |
|   }
 | |
|   catchsql {
 | |
|     SELECT * FROM t3;
 | |
|   }
 | |
| } {0 {}}
 | |
| 
 | |
| # Trigger still exists in the sqlite_temp_master table, but now it is
 | |
| # an orphan.
 | |
| #
 | |
| do_test tkt3810-4 {
 | |
|   execsql {SELECT name FROM sqlite_temp_master ORDER BY name}
 | |
| } {r1}
 | |
| 
 | |
| # Because it is an orphan, it cannot be dropped.
 | |
| #
 | |
| do_test tkt3810-5 {
 | |
|   catchsql {DROP TRIGGER r1}
 | |
| } {1 {no such trigger: r1}}
 | |
| 
 | |
| # Create a table t1 then drop the table in order to drop the orphaned
 | |
| # trigger.
 | |
| #
 | |
| do_test tkt3810-6 {
 | |
|   execsql {CREATE TABLE t1(x)} db2
 | |
|   execsql {DROP TABLE t1}
 | |
|   execsql {
 | |
|     SELECT name FROM sqlite_temp_master;
 | |
|   }
 | |
| } {}
 | |
| 
 | |
| db2 close
 | |
| 
 | |
| finish_test
 | 
