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