1# 2015 November 13 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. The 12# focus of this file is testing the test_sqllog.c module. 13# 14 15set testdir [file dirname $argv0] 16source $testdir/tester.tcl 17set testprefix sqllog 18 19ifcapable !sqllog { 20 finish_test 21 return 22} 23 24proc readfile {f} { 25 set fd [open $f] 26 set txt [read $fd] 27 close $fd 28 set txt 29} 30 31proc delete_all_sqllog_files {} { 32 forcedelete {*}[glob -nocomplain sqllog_*.sql] 33 forcedelete {*}[glob -nocomplain sqllog_*.db] 34 forcedelete {*}[glob -nocomplain sqllog_*.idx] 35} 36 37proc touch {f} { 38 set fd [open $f w+] 39 close $fd 40} 41 42db close 43sqlite3_shutdown 44set ::env(SQLITE_SQLLOG_DIR) [pwd] 45 46delete_all_sqllog_files 47 48sqlite3 db test.db 49set a a 50set b b 51do_execsql_test 1.0 { 52 CREATE TABLE t1(x, y); 53 INSERT INTO t1 VALUES(1, 2); 54 INSERT INTO t1 VALUES($a, $b); 55 SELECT * FROM t1; 56} {1 2 a b} 57db close 58 59do_test 1.1 { 60 readfile [lindex [glob sqllog_*.sql] 0] 61} [string trimleft { 62/-- Main database is '.*/sqllog_.*_0.db' 63CREATE TABLE t1\(x, y\);; -- clock=0 64INSERT INTO t1 VALUES\(1, 2\);; -- clock=1 65INSERT INTO t1 VALUES\('a', 'b'\);; -- clock=2 66SELECT . FROM t1;; -- clock=3 67/}] 68 69do_test 1.2 { 70 file size [lindex [glob sqllog_*_0.db] 0] 71} 1024 72 73#------------------------------------------------------------------------- 74catch { db close } 75sqlite3_shutdown 76delete_all_sqllog_files 77forcedelete test.db-sqllog 78 79set ::env(SQLITE_SQLLOG_CONDITIONAL) 1 80sqlite3 db test.db 81do_execsql_test 2.1 { 82 INSERT INTO t1 VALUES(4, 5); 83 SELECT * FROM t1; 84} {1 2 a b 4 5} 85 86do_test 2.2 { 87 glob -nocomplain sqllog_* 88} {} 89 90db close 91touch test.db-sqllog 92sqlite3 db test.db 93do_execsql_test 2.3 { 94 INSERT INTO t1 VALUES(6, 7); 95 SELECT * FROM t1; 96} {1 2 a b 4 5 6 7} 97db close 98 99do_test 2.4 { 100 readfile [lindex [glob sqllog_*.sql] 0] 101} [string trimleft { 102/-- Main database is '.*/sqllog_.*_0.db' 103INSERT INTO t1 VALUES\(6, 7\);; -- clock=0 104SELECT . FROM t1;; -- clock=1 105/}] 106 107catch { db close } 108sqlite3_shutdown 109unset ::env(SQLITE_SQLLOG_DIR) 110unset ::env(SQLITE_SQLLOG_CONDITIONAL) 111sqlite3_config_sqllog 112sqlite3_initialize 113finish_test 114