134e258c9Sdrh# 2013-05-23 234e258c9Sdrh# 334e258c9Sdrh# The author disclaims copyright to this source code. In place of 434e258c9Sdrh# a legal notice, here is a blessing: 534e258c9Sdrh# 634e258c9Sdrh# May you do good and not evil. 734e258c9Sdrh# May you find forgiveness for yourself and forgive others. 834e258c9Sdrh# May you share freely, never taking more than you give. 934e258c9Sdrh# 1034e258c9Sdrh#*********************************************************************** 1134e258c9Sdrh# 1234e258c9Sdrh 1334e258c9Sdrhset testdir [file dirname $argv0] 1434e258c9Sdrhsource $testdir/tester.tcl 15d903154eSdanifcapable !mmap||!vtab { 1634e258c9Sdrh finish_test 1734e258c9Sdrh return 1834e258c9Sdrh} 1934e258c9Sdrhsource $testdir/lock_common.tcl 2034e258c9Sdrhset testprefix mmap3 2134e258c9Sdrh 22*7da56b4fSdrh# A codec shuts down memory-mapped I/O 23*7da56b4fSdrhif {[nonzero_reserved_bytes]} {finish_test; return;} 24*7da56b4fSdrh 2534e258c9Sdrhdo_test mmap3-1.0 { 2634e258c9Sdrh load_static_extension db wholenumber 2734e258c9Sdrh db eval { 2834e258c9Sdrh PRAGMA mmap_size=100000; 2934e258c9Sdrh CREATE TABLE t1(x, y); 3034e258c9Sdrh CREATE VIRTUAL TABLE nums USING wholenumber; 3134e258c9Sdrh INSERT INTO t1 SELECT value, randomblob(value) FROM nums 3234e258c9Sdrh WHERE value BETWEEN 1 and 1000; 3334e258c9Sdrh SELECT sum(x), sum(length(y)) from t1; 3434e258c9Sdrh PRAGMA mmap_size; 3534e258c9Sdrh } 3634e258c9Sdrh} {100000 500500 500500 100000} 3734e258c9Sdrhdo_test mmap3-1.2 { 3834e258c9Sdrh db eval { 3934e258c9Sdrh PRAGMA mmap_size=50000; 4034e258c9Sdrh CREATE TABLE t2(a,b); 4134e258c9Sdrh SELECT name FROM sqlite_master WHERE type='table' ORDER BY 1; 4234e258c9Sdrh PRAGMA quick_check; 4334e258c9Sdrh PRAGMA mmap_size; 4434e258c9Sdrh } 4534e258c9Sdrh} {50000 nums t1 t2 ok 50000} 4634e258c9Sdrhdo_test mmap3-1.3 { 4734e258c9Sdrh db eval { 4834e258c9Sdrh PRAGMA mmap_size=250000; 4934e258c9Sdrh DROP TABLE t2; 5034e258c9Sdrh SELECT name FROM sqlite_master WHERE type='table' ORDER BY 1; 5134e258c9Sdrh PRAGMA quick_check; 5234e258c9Sdrh PRAGMA mmap_size; 5334e258c9Sdrh } 5434e258c9Sdrh} {250000 nums t1 ok 250000} 5534e258c9Sdrhdo_test mmap3-1.4 { 5634e258c9Sdrh db eval {SELECT x FROM t1 WHERE +x BETWEEN 10 AND 15} { 5734e258c9Sdrh db eval {PRAGMA mmap_size=150000} 5834e258c9Sdrh } 5934e258c9Sdrh db eval { 6034e258c9Sdrh PRAGMA quick_check; 6134e258c9Sdrh PRAGMA mmap_size; 6234e258c9Sdrh } 6334e258c9Sdrh} {ok 250000} 6434e258c9Sdrhdo_test mmap3-1.5 { 6534e258c9Sdrh db eval {SELECT x FROM t1 WHERE +x BETWEEN 10 AND 15} { 6634e258c9Sdrh db eval {PRAGMA mmap_size=0} 6734e258c9Sdrh } 6834e258c9Sdrh db eval { 6934e258c9Sdrh PRAGMA quick_check; 7034e258c9Sdrh PRAGMA mmap_size; 7134e258c9Sdrh } 7234e258c9Sdrh} {ok 250000} 7334e258c9Sdrhdo_test mmap3-1.6 { 7434e258c9Sdrh db eval {SELECT x FROM t1 WHERE +x BETWEEN 10 AND 15} { 7534e258c9Sdrh set x [db one {PRAGMA mmap_size}] 7634e258c9Sdrh } 7734e258c9Sdrh set x [concat $x [db eval { 7834e258c9Sdrh PRAGMA quick_check; 7934e258c9Sdrh PRAGMA mmap_size; 8034e258c9Sdrh }]] 8134e258c9Sdrh} {250000 ok 250000} 8234e258c9Sdrhdo_test mmap3-1.7 { 8334e258c9Sdrh db eval { 8434e258c9Sdrh PRAGMA mmap_size(0); 8534e258c9Sdrh CREATE TABLE t3(a,b,c); 8634e258c9Sdrh SELECT name FROM sqlite_master WHERE type='table' ORDER BY 1; 8734e258c9Sdrh PRAGMA quick_check; 8834e258c9Sdrh PRAGMA mmap_size; 8934e258c9Sdrh } 9034e258c9Sdrh} {0 nums t1 t3 ok 0} 9134e258c9Sdrhdo_test mmap3-1.8 { 9234e258c9Sdrh db eval {SELECT x FROM t1 WHERE +x BETWEEN 10 AND 15} { 9334e258c9Sdrh db eval {PRAGMA mmap_size=75000} 9434e258c9Sdrh } 9534e258c9Sdrh db eval { 9634e258c9Sdrh PRAGMA quick_check; 9734e258c9Sdrh PRAGMA mmap_size; 9834e258c9Sdrh } 9934e258c9Sdrh} {ok 75000} 10034e258c9Sdrh 10134e258c9Sdrhfinish_test 102