xref: /sqlite-3.40.0/test/async2.test (revision 74e4352a)
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.3 2006/02/14 14:02:08 danielk1977 Exp $
9
10
11if {[info commands sqlite3async_enable]==""} {
12  # The async logic is not built into this system
13  return
14}
15
16set testdir [file dirname $argv0]
17source $testdir/tester.tcl
18
19# Enable asynchronous IO.
20
21set setup_script {
22  CREATE TABLE counter(c);
23  INSERT INTO counter(c) VALUES (1);
24}
25
26set sql_script {
27  BEGIN;
28    UPDATE counter SET c = 2;
29    CREATE TABLE t1(a PRIMARY KEY, b, c);
30    CREATE TABLE t2(a PRIMARY KEY, b, c);
31  COMMIT;
32
33  BEGIN;
34    UPDATE counter SET c = 3;
35    INSERT INTO t1 VALUES('abcdefghij', 'four', 'score');
36    INSERT INTO t2 VALUES('klmnopqrst', 'and', 'seven');
37  COMMIT;
38
39  UPDATE counter SET c = 'FIN';
40}
41
42db close
43
44
45foreach err [list ioerr malloc] {
46  set ::go 1
47  for {set n 1} {$::go} {incr n} {
48    set ::sqlite_io_error_pending 0
49    sqlite_malloc_fail 0
50    file delete -force test.db test.db-journal
51    sqlite3 db test.db
52    execsql $::setup_script
53    db close
54
55    sqlite3async_enable 1
56    sqlite3 db test.db
57    execsql $::sql_script
58    db close
59
60    switch -- $err {
61      ioerr  { set ::sqlite_io_error_pending $n }
62      malloc { sqlite_malloc_fail $n }
63    }
64    sqlite3async_halt idle
65    sqlite3async_start
66    sqlite3async_wait
67
68    set ::sqlite_io_error_pending 0
69    sqlite_malloc_fail 0
70
71    sqlite3 db test.db
72    set c [db eval {SELECT c FROM counter LIMIT 1}]
73    switch -- $c {
74      1 {
75        do_test async-$err-1.1.$n {
76          execsql {
77            SELECT name FROM sqlite_master;
78          }
79        } {counter}
80      }
81      2 {
82        do_test async-$err-1.2.$n.1 {
83          execsql {
84            SELECT * FROM t1;
85          }
86        } {}
87        do_test async-$err-1.2.$n.2 {
88          execsql {
89            SELECT * FROM t2;
90          }
91        } {}
92      }
93      3 {
94        do_test async-$err-1.3.$n.1 {
95          execsql {
96            SELECT * FROM t1;
97          }
98        } {abcdefghij four score}
99        do_test async-$err-1.3.$n.2 {
100          execsql {
101            SELECT * FROM t2;
102          }
103        } {klmnopqrst and seven}
104      }
105      FIN {
106        set ::go 0
107      }
108    }
109
110    sqlite3async_enable 0
111  }
112}
113
114catch {db close}
115sqlite3async_halt idle
116sqlite3async_start
117sqlite3async_wait
118
119finish_test
120