Fix a problem causing the recovery extension to use excessive memory and CPU time...
[sqlite.git] / test / mmap3.test
blob184dda5f866fe696ba841838dd92f2039ddefce2
1 # 2013-05-23
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
13 set testdir [file dirname $argv0]
14 source $testdir/tester.tcl
15 ifcapable !mmap||!vtab {
16   finish_test
17   return
19 source $testdir/lock_common.tcl
20 set testprefix mmap3
22 # A codec shuts down memory-mapped I/O
23 if {[nonzero_reserved_bytes]} {finish_test; return;}
25 do_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}
37 do_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}
46 do_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}
55 do_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}
64 do_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}
73 do_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}
82 do_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}
91 do_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}
101 finish_test