github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/async2.test (about)

     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.12 2009/04/25 08:39:15 danielk1977 Exp $
     9  
    10  
    11  set testdir [file dirname $argv0]
    12  source $testdir/tester.tcl
    13  
    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
    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 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      }
    68  
    69      catchsql $::sql_script
    70      db close
    71  
    72      sqlite3async_control halt idle
    73      sqlite3async_start
    74      sqlite3async_wait
    75      sqlite3async_control halt never
    76      sqlite3async_shutdown
    77  
    78      set ::sqlite_io_error_pending 0
    79      sqlite3_memdebug_fail -1
    80  
    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    }
   122  }
   123  
   124  catch {db close}
   125  
   126  finish_test