blob: ec4ae308d71becbecc9db28365287b96b97aebf0 [file] [log] [blame]
danielk1977be29bfc2006-02-14 13:25:43 +00001#
2# May you do good and not evil.
3# May you find forgiveness for yourself and forgive others.
4# May you share freely, never taking more than you give.
5#
6#***********************************************************************
7#
danielk19776f050aa2009-04-25 08:39:14 +00008# $Id: async2.test,v 1.12 2009/04/25 08:39:15 danielk1977 Exp $
danielk1977be29bfc2006-02-14 13:25:43 +00009
10
danielk1977be29bfc2006-02-14 13:25:43 +000011set testdir [file dirname $argv0]
12source $testdir/tester.tcl
13
danielk19770e87b702007-08-25 12:29:30 +000014if {
danielk19776f050aa2009-04-25 08:39:14 +000015 [info commands sqlite3async_initialize]=="" ||
danielk1977df7ca222007-08-25 12:39:28 +000016 [info command sqlite3_memdebug_fail]==""
danielk19770e87b702007-08-25 12:29:30 +000017} {
18 # The async logic is not built into this system
19 puts "Skipping async2 tests: not compiled with required features"
20 finish_test
21 return
22}
23
danielk1977be29bfc2006-02-14 13:25:43 +000024# Enable asynchronous IO.
25
26set setup_script {
27 CREATE TABLE counter(c);
28 INSERT INTO counter(c) VALUES (1);
29}
30
31set sql_script {
32 BEGIN;
33 UPDATE counter SET c = 2;
34 CREATE TABLE t1(a PRIMARY KEY, b, c);
35 CREATE TABLE t2(a PRIMARY KEY, b, c);
36 COMMIT;
37
38 BEGIN;
39 UPDATE counter SET c = 3;
40 INSERT INTO t1 VALUES('abcdefghij', 'four', 'score');
41 INSERT INTO t2 VALUES('klmnopqrst', 'and', 'seven');
42 COMMIT;
43
44 UPDATE counter SET c = 'FIN';
45}
46
47db close
48
danielk1977eacb6c52007-08-30 10:49:54 +000049foreach err [list ioerr malloc-transient malloc-persistent] {
drh86d7a312009-03-24 17:43:56 +000050 set ::go 10
danielk19772d9fcaa2006-02-14 14:02:08 +000051 for {set n 1} {$::go} {incr n} {
52 set ::sqlite_io_error_pending 0
danielk1977eacb6c52007-08-30 10:49:54 +000053 sqlite3_memdebug_fail -1
danielk19772d9fcaa2006-02-14 14:02:08 +000054 file delete -force test.db test.db-journal
55 sqlite3 db test.db
56 execsql $::setup_script
57 db close
58
danielk19776f050aa2009-04-25 08:39:14 +000059 sqlite3async_initialize "" 1
danielk19772d9fcaa2006-02-14 14:02:08 +000060 sqlite3 db test.db
drh86d7a312009-03-24 17:43:56 +000061 sqlite3_db_config_lookaside db 0 0 0
danielk19772d9fcaa2006-02-14 14:02:08 +000062
63 switch -- $err {
danielk1977eacb6c52007-08-30 10:49:54 +000064 ioerr { set ::sqlite_io_error_pending $n }
65 malloc-persistent { sqlite3_memdebug_fail $n -repeat 1 }
66 malloc-transient { sqlite3_memdebug_fail $n -repeat 0 }
danielk19772d9fcaa2006-02-14 14:02:08 +000067 }
danielk19777a4252b2007-09-05 16:54:41 +000068
69 catchsql $::sql_script
70 db close
71
danielk19776f050aa2009-04-25 08:39:14 +000072 sqlite3async_control halt idle
danielk19772d9fcaa2006-02-14 14:02:08 +000073 sqlite3async_start
74 sqlite3async_wait
danielk19776f050aa2009-04-25 08:39:14 +000075 sqlite3async_control halt never
76 sqlite3async_shutdown
danielk1977b6be6752007-09-05 11:34:54 +000077
danielk19772d9fcaa2006-02-14 14:02:08 +000078 set ::sqlite_io_error_pending 0
danielk1977eacb6c52007-08-30 10:49:54 +000079 sqlite3_memdebug_fail -1
danielk1977be29bfc2006-02-14 13:25:43 +000080
danielk19772d9fcaa2006-02-14 14:02:08 +000081 sqlite3 db test.db
drh86d7a312009-03-24 17:43:56 +000082 set c [db one {SELECT c FROM counter LIMIT 1}]
danielk19772d9fcaa2006-02-14 14:02:08 +000083 switch -- $c {
84 1 {
85 do_test async-$err-1.1.$n {
86 execsql {
87 SELECT name FROM sqlite_master;
88 }
89 } {counter}
90 }
91 2 {
92 do_test async-$err-1.2.$n.1 {
93 execsql {
94 SELECT * FROM t1;
95 }
96 } {}
97 do_test async-$err-1.2.$n.2 {
98 execsql {
99 SELECT * FROM t2;
100 }
101 } {}
102 }
103 3 {
104 do_test async-$err-1.3.$n.1 {
105 execsql {
106 SELECT * FROM t1;
107 }
108 } {abcdefghij four score}
109 do_test async-$err-1.3.$n.2 {
110 execsql {
111 SELECT * FROM t2;
112 }
113 } {klmnopqrst and seven}
114 }
115 FIN {
drh86d7a312009-03-24 17:43:56 +0000116 incr ::go -1
danielk19772d9fcaa2006-02-14 14:02:08 +0000117 }
danielk1977be29bfc2006-02-14 13:25:43 +0000118 }
danielk19772d9fcaa2006-02-14 14:02:08 +0000119
danielk1977b6be6752007-09-05 11:34:54 +0000120 db close
danielk1977be29bfc2006-02-14 13:25:43 +0000121 }
danielk1977be29bfc2006-02-14 13:25:43 +0000122}
123
124catch {db close}
danielk1977be29bfc2006-02-14 13:25:43 +0000125
126finish_test