Annotation of embedaddon/sqlite3/test/walhook.test, revision 1.1

1.1     ! misho       1: # 2010 April 19
        !             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: # More specifically, this file contains regression tests for the 
        !            16: # sqlite3_wal_hook() mechanism, including the sqlite3_wal_autocheckpoint()
        !            17: # and "PRAGMA wal_autocheckpoint" convenience interfaces.
        !            18: #
        !            19: 
        !            20: set testdir [file dirname $argv0]
        !            21: source $testdir/tester.tcl
        !            22: source $testdir/wal_common.tcl
        !            23: 
        !            24: ifcapable !wal {finish_test ; return }
        !            25: 
        !            26: set ::wal_hook [list]
        !            27: proc wal_hook {zDb nEntry} {
        !            28:   lappend ::wal_hook $zDb $nEntry
        !            29:   return 0
        !            30: }
        !            31: db wal_hook wal_hook
        !            32: 
        !            33: do_test walhook-1.1 {
        !            34:   execsql { 
        !            35:     PRAGMA page_size = 1024;
        !            36:     PRAGMA auto_vacuum = 0;
        !            37:     PRAGMA journal_mode = wal;
        !            38:     PRAGMA synchronous = normal;
        !            39:     CREATE TABLE t1(i PRIMARY KEY, j);
        !            40:   }
        !            41:   set ::wal_hook
        !            42: } {main 3}
        !            43: 
        !            44: do_test walhook-1.2 {
        !            45:   set ::wal_hook [list]
        !            46:   execsql { INSERT INTO t1 VALUES(1, 'one') }
        !            47:   set ::wal_hook
        !            48: } {main 5}
        !            49: do_test walhook-1.3 {
        !            50:   proc wal_hook {args} { db eval {PRAGMA wal_checkpoint}; return 0 }
        !            51:   execsql { INSERT INTO t1 VALUES(2, 'two') }
        !            52:   file size test.db
        !            53: } [expr 3*1024]
        !            54: do_test walhook-1.4 {
        !            55:   proc wal_hook {zDb nEntry} { 
        !            56:     execsql { PRAGMA wal_checkpoint }
        !            57:     return 0
        !            58:   }
        !            59:   execsql { CREATE TABLE t2(a, b) }
        !            60:   file size test.db
        !            61: } [expr 4*1024]
        !            62: 
        !            63: do_test walhook-1.5 {
        !            64:   sqlite3 db2 test.db
        !            65:   proc wal_hook {zDb nEntry} {
        !            66:     execsql { PRAGMA wal_checkpoint } db2
        !            67:     return 0
        !            68:   }
        !            69:   execsql { CREATE TABLE t3(a PRIMARY KEY, b) }
        !            70:   file size test.db
        !            71: } [expr 6*1024]
        !            72: 
        !            73: db2 close
        !            74: db close
        !            75: sqlite3 db test.db
        !            76: do_test walhook-2.1 {
        !            77:   execsql { PRAGMA synchronous = NORMAL }
        !            78:   execsql { PRAGMA wal_autocheckpoint }
        !            79: } {1000}
        !            80: do_test walhook-2.2 {
        !            81:   execsql { PRAGMA wal_autocheckpoint = 10}
        !            82: } {10}
        !            83: do_test walhook-2.3 {
        !            84:   execsql { PRAGMA wal_autocheckpoint }
        !            85: } {10}
        !            86: 
        !            87: #
        !            88: # The database connection is configured with "PRAGMA wal_autocheckpoint = 10".
        !            89: # Check that transactions are written to the log file until it contains at
        !            90: # least 10 frames, then the database is checkpointed. Subsequent transactions
        !            91: # are written into the start of the log file.
        !            92: #
        !            93: foreach {tn sql dbpages logpages} {
        !            94:   4 "CREATE TABLE t4(x PRIMARY KEY, y)"   6   3
        !            95:   5 "INSERT INTO t4 VALUES(1, 'one')"     6   5
        !            96:   6 "INSERT INTO t4 VALUES(2, 'two')"     6   7
        !            97:   7 "INSERT INTO t4 VALUES(3, 'three')"   6   9
        !            98:   8 "INSERT INTO t4 VALUES(4, 'four')"    8  11
        !            99:   9 "INSERT INTO t4 VALUES(5, 'five')"    8  11
        !           100: } {
        !           101:   do_test walhook-2.$tn {
        !           102:     execsql $sql
        !           103:     list [file size test.db] [file size test.db-wal]
        !           104:   } [list [expr $dbpages*1024] [wal_file_size $logpages 1024]]
        !           105: }
        !           106: 
        !           107: catch { db2 close }
        !           108: catch { db close }
        !           109: finish_test

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