xref: /sqlite-3.40.0/test/async2.test (revision fda06bef)
1be29bfc0Sdanielk1977#
2be29bfc0Sdanielk1977#    May you do good and not evil.
3be29bfc0Sdanielk1977#    May you find forgiveness for yourself and forgive others.
4be29bfc0Sdanielk1977#    May you share freely, never taking more than you give.
5be29bfc0Sdanielk1977#
6be29bfc0Sdanielk1977#***********************************************************************
7be29bfc0Sdanielk1977#
86f050aa2Sdanielk1977# $Id: async2.test,v 1.12 2009/04/25 08:39:15 danielk1977 Exp $
9be29bfc0Sdanielk1977
10be29bfc0Sdanielk1977
11be29bfc0Sdanielk1977set testdir [file dirname $argv0]
12be29bfc0Sdanielk1977source $testdir/tester.tcl
13be29bfc0Sdanielk1977
140e87b701Sdanielk1977if {
156f050aa2Sdanielk1977  [info commands sqlite3async_initialize]=="" ||
16df7ca22aSdanielk1977  [info command sqlite3_memdebug_fail]==""
170e87b701Sdanielk1977} {
180e87b701Sdanielk1977  # The async logic is not built into this system
190e87b701Sdanielk1977  puts "Skipping async2 tests: not compiled with required features"
200e87b701Sdanielk1977  finish_test
210e87b701Sdanielk1977  return
220e87b701Sdanielk1977}
230e87b701Sdanielk1977
24be29bfc0Sdanielk1977# Enable asynchronous IO.
25be29bfc0Sdanielk1977
26be29bfc0Sdanielk1977set setup_script {
27be29bfc0Sdanielk1977  CREATE TABLE counter(c);
28be29bfc0Sdanielk1977  INSERT INTO counter(c) VALUES (1);
29be29bfc0Sdanielk1977}
30be29bfc0Sdanielk1977
31be29bfc0Sdanielk1977set sql_script {
32be29bfc0Sdanielk1977  BEGIN;
33be29bfc0Sdanielk1977    UPDATE counter SET c = 2;
34be29bfc0Sdanielk1977    CREATE TABLE t1(a PRIMARY KEY, b, c);
35be29bfc0Sdanielk1977    CREATE TABLE t2(a PRIMARY KEY, b, c);
36be29bfc0Sdanielk1977  COMMIT;
37be29bfc0Sdanielk1977
38be29bfc0Sdanielk1977  BEGIN;
39be29bfc0Sdanielk1977    UPDATE counter SET c = 3;
40be29bfc0Sdanielk1977    INSERT INTO t1 VALUES('abcdefghij', 'four', 'score');
41be29bfc0Sdanielk1977    INSERT INTO t2 VALUES('klmnopqrst', 'and', 'seven');
42be29bfc0Sdanielk1977  COMMIT;
43be29bfc0Sdanielk1977
44be29bfc0Sdanielk1977  UPDATE counter SET c = 'FIN';
45be29bfc0Sdanielk1977}
46be29bfc0Sdanielk1977
47be29bfc0Sdanielk1977db close
48be29bfc0Sdanielk1977
49eacb6c59Sdanielk1977foreach err [list ioerr malloc-transient malloc-persistent] {
5086d7a315Sdrh  set ::go 10
512d9fcaa6Sdanielk1977  for {set n 1} {$::go} {incr n} {
52be29bfc0Sdanielk1977    set ::sqlite_io_error_pending 0
53eacb6c59Sdanielk1977    sqlite3_memdebug_fail -1
54*fda06befSmistachkin    forcedelete test.db test.db-journal
55be29bfc0Sdanielk1977    sqlite3 db test.db
56be29bfc0Sdanielk1977    execsql $::setup_script
57be29bfc0Sdanielk1977    db close
58be29bfc0Sdanielk1977
596f050aa2Sdanielk1977    sqlite3async_initialize "" 1
60be29bfc0Sdanielk1977    sqlite3 db test.db
6186d7a315Sdrh    sqlite3_db_config_lookaside db 0 0 0
62be29bfc0Sdanielk1977
632d9fcaa6Sdanielk1977    switch -- $err {
642d9fcaa6Sdanielk1977      ioerr             { set ::sqlite_io_error_pending $n }
65eacb6c59Sdanielk1977      malloc-persistent { sqlite3_memdebug_fail $n -repeat 1 }
66eacb6c59Sdanielk1977      malloc-transient  { sqlite3_memdebug_fail $n -repeat 0 }
672d9fcaa6Sdanielk1977    }
687a4252b2Sdanielk1977
697a4252b2Sdanielk1977    catchsql $::sql_script
707a4252b2Sdanielk1977    db close
717a4252b2Sdanielk1977
726f050aa2Sdanielk1977    sqlite3async_control halt idle
73be29bfc0Sdanielk1977    sqlite3async_start
74be29bfc0Sdanielk1977    sqlite3async_wait
756f050aa2Sdanielk1977    sqlite3async_control halt never
766f050aa2Sdanielk1977    sqlite3async_shutdown
77be29bfc0Sdanielk1977
78be29bfc0Sdanielk1977    set ::sqlite_io_error_pending 0
79eacb6c59Sdanielk1977    sqlite3_memdebug_fail -1
802d9fcaa6Sdanielk1977
81be29bfc0Sdanielk1977    sqlite3 db test.db
8286d7a315Sdrh    set c [db one {SELECT c FROM counter LIMIT 1}]
83be29bfc0Sdanielk1977    switch -- $c {
84be29bfc0Sdanielk1977      1 {
852d9fcaa6Sdanielk1977        do_test async-$err-1.1.$n {
86be29bfc0Sdanielk1977          execsql {
87be29bfc0Sdanielk1977            SELECT name FROM sqlite_master;
88be29bfc0Sdanielk1977          }
89be29bfc0Sdanielk1977        } {counter}
90be29bfc0Sdanielk1977      }
91be29bfc0Sdanielk1977      2 {
922d9fcaa6Sdanielk1977        do_test async-$err-1.2.$n.1 {
93be29bfc0Sdanielk1977          execsql {
94be29bfc0Sdanielk1977            SELECT * FROM t1;
95be29bfc0Sdanielk1977          }
96be29bfc0Sdanielk1977        } {}
972d9fcaa6Sdanielk1977        do_test async-$err-1.2.$n.2 {
98be29bfc0Sdanielk1977          execsql {
99be29bfc0Sdanielk1977            SELECT * FROM t2;
100be29bfc0Sdanielk1977          }
101be29bfc0Sdanielk1977        } {}
102be29bfc0Sdanielk1977      }
103be29bfc0Sdanielk1977      3 {
1042d9fcaa6Sdanielk1977        do_test async-$err-1.3.$n.1 {
105be29bfc0Sdanielk1977          execsql {
106be29bfc0Sdanielk1977            SELECT * FROM t1;
107be29bfc0Sdanielk1977          }
108be29bfc0Sdanielk1977        } {abcdefghij four score}
1092d9fcaa6Sdanielk1977        do_test async-$err-1.3.$n.2 {
110be29bfc0Sdanielk1977          execsql {
111be29bfc0Sdanielk1977            SELECT * FROM t2;
112be29bfc0Sdanielk1977          }
113be29bfc0Sdanielk1977        } {klmnopqrst and seven}
114be29bfc0Sdanielk1977      }
115be29bfc0Sdanielk1977      FIN {
11686d7a315Sdrh        incr ::go -1
117be29bfc0Sdanielk1977      }
118be29bfc0Sdanielk1977    }
119be29bfc0Sdanielk1977
120b6be675dSdanielk1977    db close
121be29bfc0Sdanielk1977  }
1222d9fcaa6Sdanielk1977}
123be29bfc0Sdanielk1977
124be29bfc0Sdanielk1977catch {db close}
125be29bfc0Sdanielk1977
126be29bfc0Sdanielk1977finish_test
127