persistentstorage/sqlite3api/TEST/TclScript/async2.test
changeset 0 08ec8eefde2f
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     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.9 2007/11/05 17:01:08 danielk1977 Exp $
       
     9 
       
    10 
       
    11 set testdir [file dirname $argv0]
       
    12 source $testdir/tester.tcl
       
    13 
       
    14 if {
       
    15   [info commands sqlite3async_enable]=="" ||
       
    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 1
       
    51   for {set n 1} {$::go} {incr n} {
       
    52     set ::sqlite_io_error_pending 0
       
    53     sqlite3_memdebug_fail -1
       
    54     file delete -force test.db test.db-journal
       
    55     sqlite3 db test.db
       
    56     execsql $::setup_script
       
    57     db close
       
    58   
       
    59     sqlite3async_enable 1
       
    60     sqlite3 db test.db
       
    61   
       
    62     switch -- $err {
       
    63       ioerr             { set ::sqlite_io_error_pending $n }
       
    64       malloc-persistent { sqlite3_memdebug_fail $n -repeat 1 }
       
    65       malloc-transient  { sqlite3_memdebug_fail $n -repeat 0 }
       
    66     }
       
    67 
       
    68     catchsql $::sql_script
       
    69     db close
       
    70 
       
    71     sqlite3async_halt idle
       
    72     sqlite3async_start
       
    73     sqlite3async_wait
       
    74     sqlite3async_halt never
       
    75     sqlite3async_enable 0
       
    76 
       
    77     set ::sqlite_io_error_pending 0
       
    78     sqlite3_memdebug_fail -1
       
    79 
       
    80     sqlite3 db test.db
       
    81     set c [db eval {SELECT c FROM counter LIMIT 1}]
       
    82     switch -- $c {
       
    83       1 {
       
    84         do_test async-$err-1.1.$n {
       
    85           execsql {
       
    86             SELECT name FROM sqlite_master;
       
    87           }
       
    88         } {counter}
       
    89       }
       
    90       2 {
       
    91         do_test async-$err-1.2.$n.1 {
       
    92           execsql {
       
    93             SELECT * FROM t1;
       
    94           }
       
    95         } {}
       
    96         do_test async-$err-1.2.$n.2 {
       
    97           execsql {
       
    98             SELECT * FROM t2;
       
    99           }
       
   100         } {}
       
   101       }
       
   102       3 {
       
   103         do_test async-$err-1.3.$n.1 {
       
   104           execsql {
       
   105             SELECT * FROM t1;
       
   106           }
       
   107         } {abcdefghij four score}
       
   108         do_test async-$err-1.3.$n.2 {
       
   109           execsql {
       
   110             SELECT * FROM t2;
       
   111           }
       
   112         } {klmnopqrst and seven}
       
   113       }
       
   114       FIN {
       
   115         set ::go 0
       
   116       }
       
   117     }
       
   118   
       
   119     db close
       
   120   }
       
   121 }
       
   122 
       
   123 catch {db close}
       
   124 sqlite3async_halt idle
       
   125 sqlite3async_start
       
   126 sqlite3async_wait
       
   127 sqlite3async_halt never
       
   128 
       
   129 finish_test