1# 2013-05-23 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 13set testdir [file dirname $argv0] 14source $testdir/tester.tcl 15ifcapable !mmap||!vtab { 16 finish_test 17 return 18} 19source $testdir/lock_common.tcl 20set testprefix mmap3 21 22# A codec shuts down memory-mapped I/O 23if {[nonzero_reserved_bytes]} {finish_test; return;} 24 25do_test mmap3-1.0 { 26 load_static_extension db wholenumber 27 db eval { 28 PRAGMA mmap_size=100000; 29 CREATE TABLE t1(x, y); 30 CREATE VIRTUAL TABLE nums USING wholenumber; 31 INSERT INTO t1 SELECT value, randomblob(value) FROM nums 32 WHERE value BETWEEN 1 and 1000; 33 SELECT sum(x), sum(length(y)) from t1; 34 PRAGMA mmap_size; 35 } 36} {100000 500500 500500 100000} 37do_test mmap3-1.2 { 38 db eval { 39 PRAGMA mmap_size=50000; 40 CREATE TABLE t2(a,b); 41 SELECT name FROM sqlite_master WHERE type='table' ORDER BY 1; 42 PRAGMA quick_check; 43 PRAGMA mmap_size; 44 } 45} {50000 nums t1 t2 ok 50000} 46do_test mmap3-1.3 { 47 db eval { 48 PRAGMA mmap_size=250000; 49 DROP TABLE t2; 50 SELECT name FROM sqlite_master WHERE type='table' ORDER BY 1; 51 PRAGMA quick_check; 52 PRAGMA mmap_size; 53 } 54} {250000 nums t1 ok 250000} 55do_test mmap3-1.4 { 56 db eval {SELECT x FROM t1 WHERE +x BETWEEN 10 AND 15} { 57 db eval {PRAGMA mmap_size=150000} 58 } 59 db eval { 60 PRAGMA quick_check; 61 PRAGMA mmap_size; 62 } 63} {ok 250000} 64do_test mmap3-1.5 { 65 db eval {SELECT x FROM t1 WHERE +x BETWEEN 10 AND 15} { 66 db eval {PRAGMA mmap_size=0} 67 } 68 db eval { 69 PRAGMA quick_check; 70 PRAGMA mmap_size; 71 } 72} {ok 250000} 73do_test mmap3-1.6 { 74 db eval {SELECT x FROM t1 WHERE +x BETWEEN 10 AND 15} { 75 set x [db one {PRAGMA mmap_size}] 76 } 77 set x [concat $x [db eval { 78 PRAGMA quick_check; 79 PRAGMA mmap_size; 80 }]] 81} {250000 ok 250000} 82do_test mmap3-1.7 { 83 db eval { 84 PRAGMA mmap_size(0); 85 CREATE TABLE t3(a,b,c); 86 SELECT name FROM sqlite_master WHERE type='table' ORDER BY 1; 87 PRAGMA quick_check; 88 PRAGMA mmap_size; 89 } 90} {0 nums t1 t3 ok 0} 91do_test mmap3-1.8 { 92 db eval {SELECT x FROM t1 WHERE +x BETWEEN 10 AND 15} { 93 db eval {PRAGMA mmap_size=75000} 94 } 95 db eval { 96 PRAGMA quick_check; 97 PRAGMA mmap_size; 98 } 99} {ok 75000} 100 101finish_test 102