OLD | NEW |
| (Empty) |
1 # | |
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 # | |
8 # $Id: async2.test,v 1.12 2009/04/25 08:39:15 danielk1977 Exp $ | |
9 | |
10 | |
11 set testdir [file dirname $argv0] | |
12 source $testdir/tester.tcl | |
13 | |
14 if { | |
15 [info commands sqlite3async_initialize]=="" || | |
16 [info command sqlite3_memdebug_fail]=="" | |
17 } { | |
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 | |
24 # Enable asynchronous IO. | |
25 | |
26 set setup_script { | |
27 CREATE TABLE counter(c); | |
28 INSERT INTO counter(c) VALUES (1); | |
29 } | |
30 | |
31 set 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 | |
47 db close | |
48 | |
49 foreach err [list ioerr malloc-transient malloc-persistent] { | |
50 set ::go 10 | |
51 for {set n 1} {$::go} {incr n} { | |
52 set ::sqlite_io_error_pending 0 | |
53 sqlite3_memdebug_fail -1 | |
54 forcedelete test.db test.db-journal | |
55 sqlite3 db test.db | |
56 execsql $::setup_script | |
57 db close | |
58 | |
59 sqlite3async_initialize "" 1 | |
60 sqlite3 db test.db | |
61 sqlite3_db_config_lookaside db 0 0 0 | |
62 | |
63 switch -- $err { | |
64 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 } | |
67 } | |
68 | |
69 catchsql $::sql_script | |
70 db close | |
71 | |
72 sqlite3async_control halt idle | |
73 sqlite3async_start | |
74 sqlite3async_wait | |
75 sqlite3async_control halt never | |
76 sqlite3async_shutdown | |
77 | |
78 set ::sqlite_io_error_pending 0 | |
79 sqlite3_memdebug_fail -1 | |
80 | |
81 sqlite3 db test.db | |
82 set c [db one {SELECT c FROM counter LIMIT 1}] | |
83 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 { | |
116 incr ::go -1 | |
117 } | |
118 } | |
119 | |
120 db close | |
121 } | |
122 } | |
123 | |
124 catch {db close} | |
125 | |
126 finish_test | |
OLD | NEW |