AryaWu/sqlite
0
1# 2006 January 302#3# The author disclaims copyright to this source code. In place of4# 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 is14# fixed. Ticket #1644 complains that precompiled statements15# are not expired correctly as a result of changes to TEMP16# views and triggers.17#18 19set testdir [file dirname $argv0]20source $testdir/tester.tcl21 22ifcapable !tempdb||!view {23 finish_test24 return25} 26 27# Create two tables T1 and T2 and make V1 point to T1.28do_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 when41# the view changes.42#43do_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#53do_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 that60# the statement is recompiled and refers to the empty temp table.61#62do_test tkt1644-1.4 {63 execsql {64 CREATE TEMP TABLE t1(x);65 }66 execsql {67 SELECT * FROM t1;68 }69} {}70 71ifcapable 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 111finish_test112 