xref: /sqlite-3.40.0/test/async2.test (revision be29bfc0)
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.1 2006/02/14 13:25:45 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
44set ::go 1
45for {set n 3} {$::go} {incr n} {
46  set ::sqlite_io_error_pending 0
47  file delete -force test.db test.db-journal
48  sqlite3 db test.db
49  execsql $::setup_script
50  db close
51
52  sqlite3async_enable 1
53  sqlite3 db test.db
54  execsql $::sql_script
55  db close
56
57  set ::sqlite_io_error_pending $n
58  sqlite3async_halt idle
59  sqlite3async_start
60  sqlite3async_wait
61
62  sqlite3async_enable 0
63  set ::sqlite_io_error_pending 0
64  sqlite3 db test.db
65  set c [db eval {SELECT c FROM counter LIMIT 1}]
66  switch -- $c {
67    1 {
68      do_test async-ioerr-1.1.$n {
69        execsql {
70          SELECT name FROM sqlite_master;
71        }
72      } {counter}
73    }
74    2 {
75      do_test async-ioerr-1.2.$n.1 {
76        execsql {
77          SELECT * FROM t1;
78        }
79      } {}
80      do_test async-ioerr-1.2.$n.2 {
81        execsql {
82          SELECT * FROM t2;
83        }
84      } {}
85    }
86    3 {
87      do_test async-ioerr-1.3.$n.1 {
88        execsql {
89          SELECT * FROM t1;
90        }
91      } {abcdefghij four score}
92      do_test async-ioerr-1.3.$n.2 {
93        execsql {
94          SELECT * FROM t2;
95        }
96      } {klmnopqrst and seven}
97    }
98    FIN {
99      set ::go 0
100    }
101  }
102
103  sqlite3async_enable 0
104}
105
106catch {db close}
107sqlite3async_halt idle
108sqlite3async_start
109sqlite3async_wait
110
111finish_test
112