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

1.1     ! misho       1: # 2007 March 24
        !             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: # $Id: cache.test,v 1.4 2007/08/22 02:56:44 drh Exp $
        !            13: 
        !            14: set testdir [file dirname $argv0]
        !            15: source $testdir/tester.tcl
        !            16: 
        !            17: ifcapable {!pager_pragmas} {
        !            18:   finish_test
        !            19:   return
        !            20: }
        !            21: sqlite3_soft_heap_limit 0
        !            22: 
        !            23: proc pager_cache_size {db} {
        !            24:   set bt [btree_from_db $db]
        !            25:   db_enter $db
        !            26:   array set stats [btree_pager_stats $bt]
        !            27:   db_leave $db
        !            28:   return $stats(page)
        !            29: }
        !            30: 
        !            31: if {[permutation] == ""} { 
        !            32:   do_test cache-1.1 { pager_cache_size db } {0}
        !            33: }
        !            34: 
        !            35: do_test cache-1.2 {
        !            36:   execsql {
        !            37:     PRAGMA auto_vacuum=OFF;
        !            38:     CREATE TABLE abc(a, b, c);
        !            39:     INSERT INTO abc VALUES(1, 2, 3);
        !            40:   }
        !            41:   pager_cache_size db
        !            42: } {2}
        !            43: 
        !            44: # At one point, repeatedly locking and unlocking the cache was causing
        !            45: # a resource leak of one page per repetition. The page wasn't actually
        !            46: # leaked, but would not be reused until the pager-cache was full (i.e. 
        !            47: # 2000 pages by default).
        !            48: #
        !            49: # This tests that once the pager-cache is initialised, it can be locked
        !            50: # and unlocked repeatedly without internally allocating any new pages.
        !            51: #
        !            52: set cache_size [pager_cache_size db]
        !            53: for {set ii 0} {$ii < 10} {incr ii} {
        !            54:   do_test cache-1.3.$ii {
        !            55:     execsql {SELECT * FROM abc}
        !            56:     pager_cache_size db
        !            57:   } $::cache_size
        !            58: }
        !            59: 
        !            60: #-------------------------------------------------------------------------
        !            61: # This block of tests checks that it is possible to set the cache_size of a
        !            62: # database to a small (< 10) value. More specifically:
        !            63: #
        !            64: #   cache-2.1.*: Test that "PRAGMA cache_size" appears to work with small 
        !            65: #                values.
        !            66: #   cache-2.2.*: Test that "PRAGMA main.cache_size" appears to work with 
        !            67: #                small values.
        !            68: #   cache-2.3.*: Test cache_size=1 correctly spills/flushes the cache. 
        !            69: #   cache-2.4.*: Test cache_size=0 correctly spills/flushes the cache. 
        !            70: #
        !            71: #
        !            72: db_delete_and_reopen
        !            73: do_execsql_test cache-2.0 {
        !            74:   PRAGMA auto_vacuum=OFF;
        !            75:   PRAGMA journal_mode=DELETE;
        !            76:   CREATE TABLE t1(a, b);
        !            77:   CREATE TABLE t2(c, d);
        !            78:   INSERT INTO t1 VALUES('x', 'y');
        !            79:   INSERT INTO t2 VALUES('i', 'j');
        !            80: } {delete}
        !            81: 
        !            82: for {set i 0} {$i < 20} {incr i} {
        !            83:   do_execsql_test cache-2.1.$i.1 "PRAGMA cache_size = $i"
        !            84:   do_execsql_test cache-2.1.$i.2 "PRAGMA cache_size" $i
        !            85:   do_execsql_test cache-2.1.$i.3 "SELECT * FROM t1" {x y}
        !            86:   do_execsql_test cache-2.1.$i.4 "PRAGMA cache_size" $i
        !            87: }
        !            88: for {set i 0} {$i < 20} {incr i} {
        !            89:   do_execsql_test cache-2.2.$i.1 "PRAGMA main.cache_size = $i"
        !            90:   do_execsql_test cache-2.2.$i.2 "PRAGMA main.cache_size" $i
        !            91:   do_execsql_test cache-2.2.$i.3 "SELECT * FROM t1" {x y}
        !            92:   do_execsql_test cache-2.2.$i.4 "PRAGMA main.cache_size" $i
        !            93: }
        !            94: 
        !            95: # Tests for cache_size = 1.
        !            96: #
        !            97: do_execsql_test cache-2.3.1 {
        !            98:   PRAGMA cache_size = 1;
        !            99:   BEGIN;
        !           100:     INSERT INTO t1 VALUES(1, 2);
        !           101:     PRAGMA lock_status;
        !           102: } {main reserved temp closed}
        !           103: do_test cache-2.3.2 { pager_cache_size db } 2
        !           104: do_execsql_test cache-2.3.3 {
        !           105:     INSERT INTO t2 VALUES(1, 2);
        !           106:     PRAGMA lock_status;
        !           107: } {main exclusive temp closed}
        !           108: do_test cache-2.3.4 { pager_cache_size db } 2
        !           109: do_execsql_test cache-2.3.5 COMMIT
        !           110: do_test cache-2.3.6 { pager_cache_size db } 1
        !           111: 
        !           112: do_execsql_test cache-2.3.7 {
        !           113:   SELECT * FROM t1 UNION SELECT * FROM t2;
        !           114: } {1 2 i j x y}
        !           115: do_test cache-2.3.8 { pager_cache_size db } 1
        !           116: 
        !           117: # Tests for cache_size = 0.
        !           118: #
        !           119: do_execsql_test cache-2.4.1 {
        !           120:   PRAGMA cache_size = 0;
        !           121:   BEGIN;
        !           122:     INSERT INTO t1 VALUES(1, 2);
        !           123:     PRAGMA lock_status;
        !           124: } {main reserved temp closed}
        !           125: do_test cache-2.4.2 { pager_cache_size db } 2
        !           126: do_execsql_test cache-2.4.3 {
        !           127:     INSERT INTO t2 VALUES(1, 2);
        !           128:     PRAGMA lock_status;
        !           129: } {main exclusive temp closed}
        !           130: do_test cache-2.4.4 { pager_cache_size db } 2
        !           131: do_execsql_test cache-2.4.5 COMMIT
        !           132: 
        !           133: do_test cache-2.4.6 { pager_cache_size db } 0
        !           134: do_execsql_test cache-2.4.7 {
        !           135:   SELECT * FROM t1 UNION SELECT * FROM t2;
        !           136: } {1 2 i j x y}
        !           137: do_test cache-2.4.8 { pager_cache_size db } 0
        !           138: 
        !           139: sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit)
        !           140: finish_test

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