Home | History | Annotate | Download | only in test
      1 # 2010 December 1
      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.  The
     12 # focus of this file is testing the operation of the library in
     13 # "PRAGMA journal_mode=WAL" mode.
     14 #
     15 
     16 set testdir [file dirname $argv0]
     17 source $testdir/tester.tcl
     18 source $testdir/lock_common.tcl
     19 source $testdir/wal_common.tcl
     20 source $testdir/malloc_common.tcl
     21 ifcapable !wal {finish_test ; return }
     22 
     23 #-------------------------------------------------------------------------
     24 # Changing to WAL mode in one connection forces the change in others.
     25 #
     26 db close
     27 forcedelete test.db
     28 
     29 set all_journal_modes {delete persist truncate memory off}
     30 foreach jmode $all_journal_modes {
     31 
     32 	do_test wal6-1.0.$jmode {
     33     sqlite3 db test.db
     34     execsql "PRAGMA journal_mode = $jmode;"
     35 	} $jmode
     36 
     37 	do_test wal6-1.1.$jmode {
     38 	  execsql {
     39 	    CREATE TABLE t1(a INTEGER PRIMARY KEY, b);
     40 	    INSERT INTO t1 VALUES(1,2);
     41 	    SELECT * FROM t1;
     42 	  }
     43 	} {1 2}
     44 
     45 # Under Windows, you'll get an error trying to delete
     46 # a file this is already opened.  For now, make sure 
     47 # we get that error, then close the first connection
     48 # so the other tests work.
     49 if {$tcl_platform(platform)=="windows"} {
     50   if {$jmode=="persist" || $jmode=="truncate"} {
     51 	  do_test wal6-1.2.$jmode.win {
     52 	    sqlite3 db2 test.db
     53 	    catchsql {
     54 		    PRAGMA journal_mode=WAL;
     55 	    } db2
     56 	  } {1 {disk I/O error}}
     57   	db2 close
     58 	  db close
     59   }
     60 }
     61 
     62 	do_test wal6-1.2.$jmode {
     63 	  sqlite3 db2 test.db
     64 	  execsql {
     65 		PRAGMA journal_mode=WAL;
     66 		INSERT INTO t1 VALUES(3,4);
     67 		SELECT * FROM t1 ORDER BY a;
     68 	  } db2
     69 	} {wal 1 2 3 4}
     70 
     71 if {$tcl_platform(platform)=="windows"} {
     72   if {$jmode=="persist" || $jmode=="truncate"} {
     73 	  sqlite3 db test.db
     74   }
     75 }
     76 
     77 	do_test wal6-1.3.$jmode {
     78 	  execsql {
     79 		  SELECT * FROM t1 ORDER BY a;
     80 	  }
     81 	} {1 2 3 4}
     82 
     83 	db close
     84 	db2 close
     85   forcedelete test.db
     86 
     87 }
     88 
     89 finish_test
     90 
     91