1: # 2011 May 19
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: # This file implements regression tests for SQLite library. Specifically,
12: # it tests that ticket [2d1a5c67dfc2363e44f29d9bbd57f7331851390a] has
13: # been resolved.
14: #
15: #
16: #
17:
18: set testdir [file dirname $argv0]
19: source $testdir/tester.tcl
20: set testprefix tkt-2d1a5c67d
21:
22: ifcapable {!wal || !vtab} {finish_test; return}
23:
24: for {set ii 1} {$ii<=10} {incr ii} {
25: do_test tkt-2d1a5c67d.1.$ii {
26: db close
27: forcedelete test.db test.db-wal
28: sqlite3 db test.db
29: db eval "PRAGMA cache_size=$::ii"
30: db eval {
31: PRAGMA journal_mode=WAL;
32: CREATE TABLE t1(a,b);
33: CREATE INDEX t1b ON t1(b);
34: CREATE TABLE t2(x,y UNIQUE);
35: INSERT INTO t2 VALUES(3,4);
36: BEGIN;
37: INSERT INTO t1(a,b) VALUES(1,2);
38: SELECT 'A', * FROM t2 WHERE y=4;
39: SELECT 'B', * FROM t1;
40: COMMIT;
41: SELECT 'C', * FROM t1;
42: }
43: } {wal A 3 4 B 1 2 C 1 2}
44: }
45:
46: db close
47: forcedelete test.db test.db-wal
48: sqlite3 db test.db
49: register_wholenumber_module db
50: db eval {
51: PRAGMA journal_mode=WAL;
52: CREATE TABLE t1(a,b);
53: CREATE INDEX t1b ON t1(b);
54: CREATE TABLE t2(x,y);
55: CREATE VIRTUAL TABLE nums USING wholenumber;
56: INSERT INTO t2 SELECT value, randomblob(1000) FROM nums
57: WHERE value BETWEEN 1 AND 1000;
58: }
59:
60: for {set ii 1} {$ii<=10} {incr ii} {
61: do_test tkt-2d1a5c67d.2.$ii {
62: db eval "PRAGMA cache_size=$::ii"
63: db eval {
64: DELETE FROM t1;
65: BEGIN;
66: INSERT INTO t1(a,b) VALUES(1,2);
67: SELECT sum(length(y)) FROM t2;
68: COMMIT;
69: SELECT * FROM t1;
70: }
71: } {1000000 1 2}
72: }
73:
74: db close
75: sqlite3 db test.db
76:
77:
78: do_execsql_test 3.1 {
79: PRAGMA cache_size = 10;
80: CREATE TABLE t3(a INTEGER PRIMARY KEY, b);
81: CREATE TABLE t4(a);
82: }
83:
84: do_execsql_test 3.2 {
85: INSERT INTO t3 VALUES(NULL, randomblob(500));
86: INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 2
87: INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 4
88: INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 8
89: INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 16
90: INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 32
91: INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 64
92: INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 128
93: }
94:
95: do_execsql_test 3.3 {
96: BEGIN;
97: INSERT INTO t4 VALUES('xyz');
98: }
99:
100: do_test 3.4 {
101: set blobs [list]
102: for {set i 1} {$i<100} {incr i} {
103: set b [db incrblob -readonly t3 b $i]
104: read $b
105: lappend blobs $b
106: }
107:
108: execsql COMMIT
109: execsql { SELECT * FROM t4 WHERE a = 'xyz' }
110: } {xyz}
111:
112: do_test 3.5 {
113: foreach b $blobs { close $b }
114: execsql { SELECT * FROM t4 WHERE a = 'xyz' }
115: } {xyz}
116:
117: # Check that recovery works on the WAL file.
118: #
119: forcedelete test.db2-wal test.db2
120: do_test 3.6 {
121: copy_file test.db-wal test.db2-wal
122: copy_file test.db test.db2
123: sqlite3 db2 test.db2
124: execsql { SELECT * FROM t4 WHERE a = 'xyz' } db2
125: } {xyz}
126:
127: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>