persistentstorage/sqlite3api/TEST/TclScript/tkt1644.test
changeset 0 08ec8eefde2f
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     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