# 2025 September 5 # # 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 file is testing the operation of the library in # "PRAGMA wal_checkpoint = noop" mode. # set testdir [file dirname $argv0] source $testdir/tester.tcl source $testdir/lock_common.tcl source $testdir/malloc_common.tcl source $testdir/wal_common.tcl set testprefix walckptnoop ifcapable !wal {finish_test ; return } set VAL 123 proc myrand {} { global VAL set A 1103515245 set C 12345 set M 2147483648 set VAL [expr {($A * $VAL + $C) % $M}] return $VAL } proc myrandomblob {n} { set l [list] for {set i 0} {$i < $n} {incr i} { lappend l [expr [myrand] % 256] } binary format c* $l } db func myrandomblob myrandomblob do_execsql_test 1.0 { PRAGMA page_size=1024; PRAGMA auto_vacuum=NONE; PRAGMA secure_delete=OFF; VACUUM; CREATE TABLE t1(x INTEGER PRIMARY KEY, y TEXT); CREATE INDEX i1 ON t1(y); PRAGMA journal_mode = wal; WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<1000 ) INSERT INTO t1 SELECT NULL, hex(myrandomblob(64)) FROM s; } {0 wal} do_execsql_test 1.1 { PRAGMA wal_checkpoint = noop; } {0 298 0} do_execsql_test 1.2 { PRAGMA wal_checkpoint = noop; } {0 298 0} do_execsql_test 1.3 { PRAGMA wal_checkpoint = passive; } {0 298 298} do_execsql_test 1.4 { PRAGMA wal_checkpoint = noop; } {0 298 298} db_save_and_close db_restore_and_reopen do_execsql_test 1.5 { PRAGMA wal_checkpoint = noop; } {0 298 0} db close sqlite3 db test.db db eval { PRAGMA auto_vacuum=NONE; PRAGMA secure_delete=OFF; } do_execsql_test 1.6 { PRAGMA wal_checkpoint = noop; } {0 0 0} do_catchsql_test 1.7 { BEGIN; DELETE FROM t1; PRAGMA wal_checkpoint = noop; } {1 {database table is locked}} do_catchsql_test 1.8 { COMMIT; PRAGMA wal_checkpoint = noop; } {0 {0 5 0}} do_test 1.9 { sqlite3_wal_checkpoint_v2 db noop } {0 5 0} do_execsql_test 1.10 { PRAGMA journal_mode = delete; PRAGMA wal_checkpoint = noop; } {delete 0 -1 -1} finish_test