blob: 184dda5f866fe696ba841838dd92f2039ddefce2 [file] [log] [blame]
drh34e258c2013-05-23 01:40:53 +00001# 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
dand9031542013-07-05 16:54:30 +000015ifcapable !mmap||!vtab {
drh34e258c2013-05-23 01:40:53 +000016 finish_test
17 return
18}
19source $testdir/lock_common.tcl
20set testprefix mmap3
21
drh7da56b42016-03-14 18:34:42 +000022# A codec shuts down memory-mapped I/O
23if {[nonzero_reserved_bytes]} {finish_test; return;}
24
drh34e258c2013-05-23 01:40:53 +000025do_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