# # 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. # #*********************************************************************** # # $Id: async2.test,v 1.3 2006/02/14 14:02:08 danielk1977 Exp $ if {[info commands sqlite3async_enable]==""} { # The async logic is not built into this system return } set testdir [file dirname $argv0] source $testdir/tester.tcl # Enable asynchronous IO. set setup_script { CREATE TABLE counter(c); INSERT INTO counter(c) VALUES (1); } set sql_script { BEGIN; UPDATE counter SET c = 2; CREATE TABLE t1(a PRIMARY KEY, b, c); CREATE TABLE t2(a PRIMARY KEY, b, c); COMMIT; BEGIN; UPDATE counter SET c = 3; INSERT INTO t1 VALUES('abcdefghij', 'four', 'score'); INSERT INTO t2 VALUES('klmnopqrst', 'and', 'seven'); COMMIT; UPDATE counter SET c = 'FIN'; } db close foreach err [list ioerr malloc] { set ::go 1 for {set n 1} {$::go} {incr n} { set ::sqlite_io_error_pending 0 sqlite_malloc_fail 0 file delete -force test.db test.db-journal sqlite3 db test.db execsql $::setup_script db close sqlite3async_enable 1 sqlite3 db test.db execsql $::sql_script db close switch -- $err { ioerr { set ::sqlite_io_error_pending $n } malloc { sqlite_malloc_fail $n } } sqlite3async_halt idle sqlite3async_start sqlite3async_wait set ::sqlite_io_error_pending 0 sqlite_malloc_fail 0 sqlite3 db test.db set c [db eval {SELECT c FROM counter LIMIT 1}] switch -- $c { 1 { do_test async-$err-1.1.$n { execsql { SELECT name FROM sqlite_master; } } {counter} } 2 { do_test async-$err-1.2.$n.1 { execsql { SELECT * FROM t1; } } {} do_test async-$err-1.2.$n.2 { execsql { SELECT * FROM t2; } } {} } 3 { do_test async-$err-1.3.$n.1 { execsql { SELECT * FROM t1; } } {abcdefghij four score} do_test async-$err-1.3.$n.2 { execsql { SELECT * FROM t2; } } {klmnopqrst and seven} } FIN { set ::go 0 } } sqlite3async_enable 0 } } catch {db close} sqlite3async_halt idle sqlite3async_start sqlite3async_wait finish_test