Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / sqlite / src / test / tkt3810.test
blob7e1b2ec5c9cddc3deabbcddc1c5964c51ccceeaa
1 # 2009 August 1
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
12 # Tests to make sure #3810 is fixed.
14 # $Id: tkt3810.test,v 1.4 2009/08/06 17:43:31 drh Exp $
16 set testdir [file dirname $argv0]
17 source $testdir/tester.tcl
18 ifcapable {!trigger} {
19   finish_test
20   return
23 # Create a table using the first database connection.
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
35 # Create a second connection to the same database.  Make sure the
36 # schema of the database has been parsed by the second connection.
38 do_test tkt3810-2 {
39   sqlite3 db2 test.db
40   execsql {
41     SELECT * FROM t1;
42   } db2
43 } 123
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.
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 {}}
61 # Trigger still exists in the sqlite_temp_master table, but now it is
62 # an orphan.
64 do_test tkt3810-4 {
65   execsql {SELECT name FROM sqlite_temp_master ORDER BY name}
66 } {r1}
68 # Because it is an orphan, it cannot be dropped.
70 do_test tkt3810-5 {
71   catchsql {DROP TRIGGER r1}
72 } {1 {no such trigger: r1}}
74 # Create a table t1 then drop the table in order to drop the orphaned
75 # trigger.
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 } {}
85 db2 close
87 finish_test