CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
tkt1644.test112 linesDownload Raw Back to test
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