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
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>