Annotation of embedaddon/sqlite3/test/walpersist.test, revision 1.1.1.1

1.1       misho       1: # 2011 July 26
                      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: #
                     12: # This file contains tests for using WAL with persistent WAL file mode.
                     13: #
                     14: 
                     15: set testdir [file dirname $argv0]
                     16: source $testdir/tester.tcl
                     17: source $testdir/lock_common.tcl
                     18: set ::testprefix walpersist
                     19: 
                     20: ifcapable !wal {
                     21:   finish_test
                     22:   return
                     23: }
                     24: 
                     25: do_test walpersist-1.0 {
                     26:   db eval {
                     27:     PRAGMA journal_mode=WAL;
                     28:     CREATE TABLE t1(a);
                     29:     INSERT INTO t1 VALUES(randomblob(5000));
                     30:   }
                     31:   file exists test.db-wal
                     32: } {1}
                     33: do_test walpersist-1.1 {
                     34:   file exists test.db-shm
                     35: } {1}
                     36: do_test walpersist-1.2 {
                     37:   db close
                     38:   list [file exists test.db] [file exists test.db-wal] [file exists test.db-shm]
                     39: } {1 0 0}
                     40: do_test walpersist-1.3 {
                     41:   sqlite3 db test.db
                     42:   db eval {SELECT length(a) FROM t1}
                     43: } {5000}
                     44: do_test walpersist-1.4 {
                     45:   list [file exists test.db] [file exists test.db-wal] [file exists test.db-shm]
                     46: } {1 1 1}
                     47: do_test walpersist-1.5 {
                     48:   file_control_persist_wal db -1
                     49: } {0 0}
                     50: do_test walpersist-1.6 {
                     51:   file_control_persist_wal db 1
                     52: } {0 1}
                     53: do_test walpersist-1.7 {
                     54:   file_control_persist_wal db -1
                     55: } {0 1}
                     56: do_test walpersist-1.8 {
                     57:   file_control_persist_wal db 0
                     58: } {0 0}
                     59: do_test walpersist-1.9 {
                     60:   file_control_persist_wal db -1
                     61: } {0 0}
                     62: do_test walpersist-1.10 {
                     63:   file_control_persist_wal db 1
                     64: } {0 1}
                     65: do_test walpersist-1.11 {
                     66:   db close
                     67:   list [file exists test.db] [file exists test.db-wal] [file exists test.db-shm]
                     68: } {1 1 1}
                     69: 
                     70: # Make sure the journal_size_limit works to limit the size of the
                     71: # persisted wal file.  In persistent-wal mode, any non-negative
                     72: # journal_size_limit causes the WAL file to be truncated to zero bytes
                     73: # when closing.
                     74: #
                     75: forcedelete test.db test.db-shm test.db-wal
                     76: do_test walpersist-2.1 {
                     77:   sqlite3 db test.db
                     78:   db eval {
                     79:     PRAGMA journal_mode=WAL;
                     80:     PRAGMA wal_autocheckpoint=OFF;
                     81:     PRAGMA journal_size_limit=12000;
                     82:     CREATE TABLE t1(x);
                     83:     INSERT INTO t1 VALUES(randomblob(50000));
                     84:     UPDATE t1 SET x=randomblob(50000);
                     85:   }
                     86:   expr {[file size test.db-wal]>100000}
                     87: } {1}
                     88: do_test walpersist-2.2 {
                     89:   file_control_persist_wal db 1
                     90:   db close
                     91:   concat [file exists test.db-wal] [file size test.db-wal]
                     92: } {1 0}
                     93: do_test walpersist-2.3 {
                     94:   sqlite3 db test.db
                     95:   execsql { PRAGMA integrity_check }
                     96: } {ok}
                     97: 
                     98: do_test 3.1 {
                     99:   catch {db close}
                    100:   forcedelete test.db test.db-shm test.db-wal
                    101:   sqlite3 db test.db
                    102:   execsql {
                    103:     PRAGMA page_size = 1024;
                    104:     PRAGMA journal_mode = WAL;
                    105:     PRAGMA wal_autocheckpoint=128;
                    106:     PRAGMA journal_size_limit=16384;
                    107:     CREATE TABLE t1(a, b, PRIMARY KEY(a, b));
                    108:   }
                    109: } {wal 128 16384}
                    110: do_test 3.2 {
                    111:   for {set i 0} {$i<200} {incr i} {
                    112:     execsql { INSERT INTO t1 VALUES(randomblob(500), randomblob(500)) }
                    113:   }
                    114:   file_control_persist_wal db 1
                    115:   db close
                    116: } {}
                    117: do_test walpersist-3.3 { 
                    118:   file size test.db-wal 
                    119: } {0}
                    120: do_test walpersist-3.4 { 
                    121:   sqlite3 db test.db
                    122:   execsql { PRAGMA integrity_check }
                    123: } {ok}
                    124:  
                    125: 
                    126: finish_test

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