# 2017 April 25 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. The # focus of this script is testing the server mode of SQLite. # set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix serverwal # Check files are created and deleted as expected. # do_execsql_test 1.0 { PRAGMA journal_mode = wal; } {wal} do_execsql_test 1.1 { CREATE TABLE t1(a, b); } do_execsql_test 1.2 { SELECT * FROM t1; } {} do_test 1.3 { lsort [glob test.db*] } {test.db test.db-hma test.db-shm test.db-wal} do_test 1.4 { db close glob test.db* } {test.db} #------------------------------------------------------------------------- # Two concurrent transactions. # do_test 2.0 { sqlite3 db test.db sqlite3 db2 test.db db eval { CREATE TABLE t2(a, b); } } {} do_test 2.1 { execsql { BEGIN; INSERT INTO t1 VALUES(1, 2); } db execsql { BEGIN; INSERT INTO t2 VALUES(1, 2); } db2 } {} do_test 2.2 { execsql COMMIT db execsql COMMIT db2 } {} db close #------------------------------------------------------------------------- # That the wal file can be wrapped around. # reset_db do_execsql_test 3.0 { PRAGMA journal_mode = wal; CREATE TABLE ttt(a, b); INSERT INTO ttt VALUES(1, 2); INSERT INTO ttt VALUES(3, 4); INSERT INTO ttt VALUES(5, 6); INSERT INTO ttt VALUES(7, 8); INSERT INTO ttt VALUES(9, 10); } {wal} do_test 3.1 { set N [file size test.db-wal] execsql { PRAGMA wal_checkpoint; INSERT INTO ttt VALUES(11, 12); INSERT INTO ttt VALUES(13, 14); } expr {$N == [file size test.db-wal]} } {1} #------------------------------------------------------------------------- # That ROLLBACK appears to work. # reset_db do_execsql_test 4.0 { PRAGMA cache_size = 10; CREATE TABLE ttt(a, b); CREATE INDEX yyy ON ttt(b, a); PRAGMA journal_mode = wal; WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<100 ) INSERT INTO ttt SELECT randomblob(100), randomblob(100) FROM s; } {wal} do_execsql_test 4.1 { PRAGMA integrity_check; BEGIN; UPDATE ttt SET b=a; ROLLBACK; PRAGMA integrity_check; } {ok ok} finish_test