Snapshot of upstream SQLite 3.34.1
[sqlcipher.git] / test / async2.test
blob7994a7219d748d124f4455005e890eb458f6ae49
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.
6 #***********************************************************************
8 # $Id: async2.test,v 1.12 2009/04/25 08:39:15 danielk1977 Exp $
11 set testdir [file dirname $argv0]
12 source $testdir/tester.tcl
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
24 # Enable asynchronous IO.
26 set setup_script {
27   CREATE TABLE counter(c);
28   INSERT INTO counter(c) VALUES (1);
29
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;
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;
44   UPDATE counter SET c = 'FIN';
47 db close
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     }
69     catchsql $::sql_script
70     db close
72     sqlite3async_control halt idle
73     sqlite3async_start
74     sqlite3async_wait
75     sqlite3async_control halt never
76     sqlite3async_shutdown
78     set ::sqlite_io_error_pending 0
79     sqlite3_memdebug_fail -1
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   }
124 catch {db close}
126 finish_test