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