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 112