File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / tempdb.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, 7 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    1: # 2008 April 14
    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: # The focus of this file is in making sure that rolling back
   13: # a statement journal works correctly.
   14: #
   15: # $Id: tempdb.test,v 1.1.1.1 2012/02/21 17:04:16 misho Exp $
   16: 
   17: set testdir [file dirname $argv0]
   18: source $testdir/tester.tcl
   19: 
   20: # Use a temporary database.
   21: #
   22: db close
   23: sqlite3 db {}
   24: 
   25: # Force a statement journal rollback on a database file that
   26: # has never been opened.
   27: #
   28: do_test tempdb-1.1 {
   29:   execsql {
   30:     BEGIN;
   31:     CREATE TABLE t1(x UNIQUE);
   32:     CREATE TABLE t2(y);
   33:     INSERT INTO t2 VALUES('hello');
   34:     INSERT INTO t2 VALUES(NULL);
   35:   }
   36:   # Because of the transaction, the temporary database file
   37:   # has not even been opened yet.  The following statement
   38:   # will cause a statement journal rollback on this non-existant
   39:   # file.
   40:   catchsql {
   41:     INSERT INTO t1
   42:     SELECT CASE WHEN y IS NULL THEN test_error('oops', 11) ELSE y END
   43:       FROM t2;
   44:   }
   45: } {1 oops}
   46: 
   47: # Verify that no writes occurred in t1.
   48: #
   49: do_test tempdb-1.2 {
   50:   execsql {
   51:     SELECT * FROM t1
   52:   }
   53: } {}
   54: 
   55: do_test tempdb-2.1 {
   56:   # Set $::jrnl_in_memory if the journal file is expected to be in-memory.
   57:   # Similarly, set $::subj_in_memory if the sub-journal file is expected
   58:   # to be in memory. These variables are used to calculate the expected
   59:   # number of open files in the test cases below.
   60:   #
   61:   set jrnl_in_memory [expr {[permutation] eq "inmemory_journal"}]
   62:   set subj_in_memory [expr {$jrnl_in_memory || $TEMP_STORE>=2}]
   63: 
   64:   db close
   65:   sqlite3 db test.db
   66: } {}
   67: do_test tempdb-2.2 {
   68:   execsql {
   69:     CREATE TABLE t1 (a PRIMARY KEY, b, c);
   70:     CREATE TABLE t2 (a, b, c);
   71:     BEGIN;
   72:       INSERT INTO t1 VALUES(1, 2, 3);
   73:       INSERT INTO t1 VALUES(4, 5, 6);
   74:       INSERT INTO t2 VALUES(7, 8, 9);
   75:       INSERT INTO t2 SELECT * FROM t1;
   76:   }
   77:   catchsql { INSERT INTO t1 SELECT * FROM t2 }
   78:   set sqlite_open_file_count
   79: } [expr 1 + (0==$jrnl_in_memory) + (0==$subj_in_memory)]
   80: do_test tempdb-2.3 {
   81:   execsql {
   82:     PRAGMA temp_store = 'memory';
   83:     ROLLBACK;
   84:     BEGIN;
   85:       INSERT INTO t1 VALUES(1, 2, 3);
   86:       INSERT INTO t1 VALUES(4, 5, 6);
   87:       INSERT INTO t2 SELECT * FROM t1;
   88:   }
   89:   catchsql { INSERT INTO t1 SELECT * FROM t2 }
   90:   set sqlite_open_file_count
   91: } [expr 1 + (0==$jrnl_in_memory)]
   92: 
   93: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>