AryaWu/sqlite
0
1# 2011 May 192#3# The author disclaims copyright to this source code. In place of4# 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] has13# been resolved.14#15# 16#17 18set testdir [file dirname $argv0]19source $testdir/tester.tcl20set testprefix tkt-2d1a5c67d21 22ifcapable {!vtab || !incrblob} {finish_test; return}23if {[wal_is_capable]==0} {finish_test; return}24 25for {set ii 1} {$ii<=10} {incr ii} {26 do_test tkt-2d1a5c67d.1.$ii {27 db close28 forcedelete test.db test.db-wal29 sqlite3 db test.db30 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 47db close48forcedelete test.db test.db-wal49sqlite3 db test.db50load_static_extension db wholenumber51db 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 nums58 WHERE value BETWEEN 1 AND 1000;59}60 61for {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 75db close76sqlite3 db test.db77 78 79do_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 85do_execsql_test 3.2 {86 INSERT INTO t3 VALUES(NULL, randomblob(500));87 INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 288 INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 489 INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 890 INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 1691 INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 3292 INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 6493 INSERT INTO t3 SELECT NULL, b||b FROM t3; -- 12894}95 96do_execsql_test 3.3 {97 BEGIN;98 INSERT INTO t4 VALUES('xyz');99}100 101do_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 fconfigure $b -translation binary106 read $b107 lappend blobs $b108 }109 110 execsql COMMIT111 execsql { SELECT * FROM t4 WHERE a = 'xyz' }112} {xyz}113 114do_test 3.5 {115 foreach b $blobs { close $b }116 execsql { SELECT * FROM t4 WHERE a = 'xyz' }117} {xyz}118 119# Check that recovery works on the WAL file.120#121forcedelete test.db2-wal test.db2122do_test 3.6 {123 copy_file test.db-wal test.db2-wal124 copy_file test.db test.db2125 sqlite3 db2 test.db2126 execsql { SELECT * FROM t4 WHERE a = 'xyz' } db2127} {xyz}128 129finish_test130 