xref: /sqlite-3.40.0/test/mmap3.test (revision 7da56b4f)
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