The first assert() added in [0ebc65481f4a3e79] is not necessarily true in a
[sqlite.git] / test / tkt1644.test
blobaa26a88d33abb156978fe4ba85b2be2cde0bc640
1 # 2006 January 30
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 #***********************************************************************
11 # This file implements regression tests for SQLite library.
13 # This file implements tests to verify that ticket #1644 is
14 # fixed.  Ticket #1644 complains that precompiled statements
15 # are not expired correctly as a result of changes to TEMP
16 # views and triggers.
19 set testdir [file dirname $argv0]
20 source $testdir/tester.tcl
22 ifcapable !tempdb||!view {
23   finish_test
24   return
25 }  
27 # Create two tables T1 and T2 and make V1 point to T1.
28 do_test tkt1644-1.1 {
29   execsql {
30     CREATE TABLE t1(a);
31     INSERT INTO t1 VALUES(1);
32     CREATE TABLE t2(b);
33     INSERT INTO t2 VALUES(99);
34     CREATE TEMP VIEW v1 AS SELECT * FROM t1;
35     SELECT * FROM v1;
36   }
37 } {1}
39 # The "SELECT * FROM v1" should be in the TCL interface cache below.
40 # It will continue to point to T1 unless the cache is invalidated when
41 # the view changes.
43 do_test tkt1644-1.2 {
44   execsql {
45     DROP VIEW v1;
46     CREATE TEMP VIEW v1 AS SELECT * FROM t2;
47     SELECT * FROM v1;
48   }
49 } {99}
51 # Cache an access to the T1 table.
53 do_test tkt1644-1.3 {
54   execsql {
55     SELECT * FROM t1;
56   }
57 } {1}
59 # Create a temp table T1.  Make sure the cache is invalidated so that
60 # the statement is recompiled and refers to the empty temp table.
62 do_test tkt1644-1.4 {
63   execsql {
64     CREATE TEMP TABLE t1(x);
65   }
66   execsql {
67     SELECT * FROM t1;
68   }
69 } {}
71 ifcapable view {
72   do_test tkt1644-2.1 {
73     execsql {
74       CREATE TEMP TABLE temp_t1(a, b);
75     }
76     set ::DB [sqlite3_connection_pointer db]
77     set ::STMT [sqlite3_prepare $::DB "SELECT * FROM temp_t1" -1 DUMMY]
78     execsql {
79       DROP TABLE temp_t1;
80     }
81     list [sqlite3_step $::STMT] [sqlite3_finalize $::STMT]
82   } {SQLITE_ERROR SQLITE_SCHEMA}
83   
84   do_test tkt1644-2.2 {
85     execsql {
86       CREATE TABLE real_t1(a, b);
87       CREATE TEMP VIEW temp_v1 AS SELECT * FROM real_t1;
88     }
89     set ::DB [sqlite3_connection_pointer db]
90     set ::STMT [sqlite3_prepare $::DB "SELECT * FROM temp_v1" -1 DUMMY]
91     execsql {
92       DROP VIEW temp_v1;
93     }
94     list [sqlite3_step $::STMT] [sqlite3_finalize $::STMT]
95   } {SQLITE_ERROR SQLITE_SCHEMA}
97   do_test tkt1644-2.3 {
98     execsql {
99       CREATE TEMP VIEW temp_v1 AS SELECT * FROM real_t1 LIMIT 10 OFFSET 10;
100     }
101     set ::DB [sqlite3_connection_pointer db]
102     set ::STMT [sqlite3_prepare $::DB "SELECT * FROM temp_v1" -1 DUMMY]
103     execsql {
104       DROP VIEW temp_v1;
105     }
106     list [sqlite3_step $::STMT] [sqlite3_finalize $::STMT]
107   } {SQLITE_ERROR SQLITE_SCHEMA}
111 finish_test