File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / tkt1644.test
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:16 2012 UTC (12 years, 10 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    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>