SQLite

Artifact [f1da7f7a]
Login

Artifact f1da7f7adfe8d7f09ea79b42e5ca6dcc41102f27f8e334ad71539501ddd910cc:


# 2009 January 8
#
# The author disclaims copyright to this source code.  In place of
# a legal notice, here is a blessing:
#
#    May you do good and not evil.
#    May you find forgiveness for yourself and forgive others.
#    May you share freely, never taking more than you give.
#
#***********************************************************************
#
# Test the outcome of a writer crashing within a call to the VFS
# xWrite function.
#


set testdir [file dirname $argv0]
source $testdir/tester.tcl
set testprefix writecrash

do_not_use_codec


if {$tcl_platform(platform)=="windows"} {
  finish_test
  return
}

do_execsql_test 1.0 {
  CREATE TABLE t1(a INTEGER PRIMARY KEY, b BLOB UNIQUE);
  WITH s(i) AS (
    VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<100
  )
  INSERT INTO t1 SELECT NULL, randomblob(900) FROM s;
} {}

set bGo 1
for {set tn 1} {$bGo} {incr tn} {

db close
sqlite3 db test.db

  do_test 1.$tn.1 {
    set res [crash_on_write $tn {
      UPDATE t1 SET b = randomblob(899) WHERE (a%3)==0
    }]
    set bGo 0
    if {[string match {1 {child killed:*}} $res]} {
      set res {0 {}}
      set bGo 1
    }
    set res
  } {0 {}}

#db close
#sqlite3 db test.db

  do_execsql_test 1.$tn.2 { PRAGMA integrity_check } {ok}

db close
sqlite3 db test.db

  do_execsql_test 1.$tn.3 { PRAGMA integrity_check } {ok}
}



finish_test