OLD | NEW |
| (Empty) |
1 # 2006 January 30 | |
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. | |
12 # | |
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. | |
17 # | |
18 | |
19 set testdir [file dirname $argv0] | |
20 source $testdir/tester.tcl | |
21 | |
22 ifcapable !tempdb||!view { | |
23 finish_test | |
24 return | |
25 } | |
26 | |
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} | |
38 | |
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. | |
42 # | |
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} | |
50 | |
51 # Cache an access to the T1 table. | |
52 # | |
53 do_test tkt1644-1.3 { | |
54 execsql { | |
55 SELECT * FROM t1; | |
56 } | |
57 } {1} | |
58 | |
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. | |
61 # | |
62 do_test tkt1644-1.4 { | |
63 execsql { | |
64 CREATE TEMP TABLE t1(x); | |
65 } | |
66 execsql { | |
67 SELECT * FROM t1; | |
68 } | |
69 } {} | |
70 | |
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} | |
96 | |
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} | |
108 } | |
109 | |
110 | |
111 finish_test | |
OLD | NEW |