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>