File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / async2.test
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:16 2012 UTC (12 years, 10 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    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.1.1 2012/02/21 17:04:16 misho 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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>