1be29bfc0Sdanielk1977# 2be29bfc0Sdanielk1977# May you do good and not evil. 3be29bfc0Sdanielk1977# May you find forgiveness for yourself and forgive others. 4be29bfc0Sdanielk1977# May you share freely, never taking more than you give. 5be29bfc0Sdanielk1977# 6be29bfc0Sdanielk1977#*********************************************************************** 7be29bfc0Sdanielk1977# 86f050aa2Sdanielk1977# $Id: async2.test,v 1.12 2009/04/25 08:39:15 danielk1977 Exp $ 9be29bfc0Sdanielk1977 10be29bfc0Sdanielk1977 11be29bfc0Sdanielk1977set testdir [file dirname $argv0] 12be29bfc0Sdanielk1977source $testdir/tester.tcl 13be29bfc0Sdanielk1977 140e87b701Sdanielk1977if { 156f050aa2Sdanielk1977 [info commands sqlite3async_initialize]=="" || 16df7ca22aSdanielk1977 [info command sqlite3_memdebug_fail]=="" 170e87b701Sdanielk1977} { 180e87b701Sdanielk1977 # The async logic is not built into this system 190e87b701Sdanielk1977 puts "Skipping async2 tests: not compiled with required features" 200e87b701Sdanielk1977 finish_test 210e87b701Sdanielk1977 return 220e87b701Sdanielk1977} 230e87b701Sdanielk1977 24be29bfc0Sdanielk1977# Enable asynchronous IO. 25be29bfc0Sdanielk1977 26be29bfc0Sdanielk1977set setup_script { 27be29bfc0Sdanielk1977 CREATE TABLE counter(c); 28be29bfc0Sdanielk1977 INSERT INTO counter(c) VALUES (1); 29be29bfc0Sdanielk1977} 30be29bfc0Sdanielk1977 31be29bfc0Sdanielk1977set sql_script { 32be29bfc0Sdanielk1977 BEGIN; 33be29bfc0Sdanielk1977 UPDATE counter SET c = 2; 34be29bfc0Sdanielk1977 CREATE TABLE t1(a PRIMARY KEY, b, c); 35be29bfc0Sdanielk1977 CREATE TABLE t2(a PRIMARY KEY, b, c); 36be29bfc0Sdanielk1977 COMMIT; 37be29bfc0Sdanielk1977 38be29bfc0Sdanielk1977 BEGIN; 39be29bfc0Sdanielk1977 UPDATE counter SET c = 3; 40be29bfc0Sdanielk1977 INSERT INTO t1 VALUES('abcdefghij', 'four', 'score'); 41be29bfc0Sdanielk1977 INSERT INTO t2 VALUES('klmnopqrst', 'and', 'seven'); 42be29bfc0Sdanielk1977 COMMIT; 43be29bfc0Sdanielk1977 44be29bfc0Sdanielk1977 UPDATE counter SET c = 'FIN'; 45be29bfc0Sdanielk1977} 46be29bfc0Sdanielk1977 47be29bfc0Sdanielk1977db close 48be29bfc0Sdanielk1977 49eacb6c59Sdanielk1977foreach err [list ioerr malloc-transient malloc-persistent] { 5086d7a315Sdrh set ::go 10 512d9fcaa6Sdanielk1977 for {set n 1} {$::go} {incr n} { 52be29bfc0Sdanielk1977 set ::sqlite_io_error_pending 0 53eacb6c59Sdanielk1977 sqlite3_memdebug_fail -1 54*fda06befSmistachkin forcedelete test.db test.db-journal 55be29bfc0Sdanielk1977 sqlite3 db test.db 56be29bfc0Sdanielk1977 execsql $::setup_script 57be29bfc0Sdanielk1977 db close 58be29bfc0Sdanielk1977 596f050aa2Sdanielk1977 sqlite3async_initialize "" 1 60be29bfc0Sdanielk1977 sqlite3 db test.db 6186d7a315Sdrh sqlite3_db_config_lookaside db 0 0 0 62be29bfc0Sdanielk1977 632d9fcaa6Sdanielk1977 switch -- $err { 642d9fcaa6Sdanielk1977 ioerr { set ::sqlite_io_error_pending $n } 65eacb6c59Sdanielk1977 malloc-persistent { sqlite3_memdebug_fail $n -repeat 1 } 66eacb6c59Sdanielk1977 malloc-transient { sqlite3_memdebug_fail $n -repeat 0 } 672d9fcaa6Sdanielk1977 } 687a4252b2Sdanielk1977 697a4252b2Sdanielk1977 catchsql $::sql_script 707a4252b2Sdanielk1977 db close 717a4252b2Sdanielk1977 726f050aa2Sdanielk1977 sqlite3async_control halt idle 73be29bfc0Sdanielk1977 sqlite3async_start 74be29bfc0Sdanielk1977 sqlite3async_wait 756f050aa2Sdanielk1977 sqlite3async_control halt never 766f050aa2Sdanielk1977 sqlite3async_shutdown 77be29bfc0Sdanielk1977 78be29bfc0Sdanielk1977 set ::sqlite_io_error_pending 0 79eacb6c59Sdanielk1977 sqlite3_memdebug_fail -1 802d9fcaa6Sdanielk1977 81be29bfc0Sdanielk1977 sqlite3 db test.db 8286d7a315Sdrh set c [db one {SELECT c FROM counter LIMIT 1}] 83be29bfc0Sdanielk1977 switch -- $c { 84be29bfc0Sdanielk1977 1 { 852d9fcaa6Sdanielk1977 do_test async-$err-1.1.$n { 86be29bfc0Sdanielk1977 execsql { 87be29bfc0Sdanielk1977 SELECT name FROM sqlite_master; 88be29bfc0Sdanielk1977 } 89be29bfc0Sdanielk1977 } {counter} 90be29bfc0Sdanielk1977 } 91be29bfc0Sdanielk1977 2 { 922d9fcaa6Sdanielk1977 do_test async-$err-1.2.$n.1 { 93be29bfc0Sdanielk1977 execsql { 94be29bfc0Sdanielk1977 SELECT * FROM t1; 95be29bfc0Sdanielk1977 } 96be29bfc0Sdanielk1977 } {} 972d9fcaa6Sdanielk1977 do_test async-$err-1.2.$n.2 { 98be29bfc0Sdanielk1977 execsql { 99be29bfc0Sdanielk1977 SELECT * FROM t2; 100be29bfc0Sdanielk1977 } 101be29bfc0Sdanielk1977 } {} 102be29bfc0Sdanielk1977 } 103be29bfc0Sdanielk1977 3 { 1042d9fcaa6Sdanielk1977 do_test async-$err-1.3.$n.1 { 105be29bfc0Sdanielk1977 execsql { 106be29bfc0Sdanielk1977 SELECT * FROM t1; 107be29bfc0Sdanielk1977 } 108be29bfc0Sdanielk1977 } {abcdefghij four score} 1092d9fcaa6Sdanielk1977 do_test async-$err-1.3.$n.2 { 110be29bfc0Sdanielk1977 execsql { 111be29bfc0Sdanielk1977 SELECT * FROM t2; 112be29bfc0Sdanielk1977 } 113be29bfc0Sdanielk1977 } {klmnopqrst and seven} 114be29bfc0Sdanielk1977 } 115be29bfc0Sdanielk1977 FIN { 11686d7a315Sdrh incr ::go -1 117be29bfc0Sdanielk1977 } 118be29bfc0Sdanielk1977 } 119be29bfc0Sdanielk1977 120b6be675dSdanielk1977 db close 121be29bfc0Sdanielk1977 } 1222d9fcaa6Sdanielk1977} 123be29bfc0Sdanielk1977 124be29bfc0Sdanielk1977catch {db close} 125be29bfc0Sdanielk1977 126be29bfc0Sdanielk1977finish_test 127