CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
incrblob_err.test141 linesDownload Raw Back to test
1# 2007 May 12#3# The author disclaims copyright to this source code.  In place of4# a legal notice, here is a blessing:5#6#    May you do good and not evil.7#    May you find forgiveness for yourself and forgive others.8#    May you share freely, never taking more than you give.9#10#***********************************************************************11#12# $Id: incrblob_err.test,v 1.14 2008/07/18 17:16:27 drh Exp $13#14 15set testdir [file dirname $argv0]16source $testdir/tester.tcl17set ::testprefix incrblob_err18 19ifcapable {!incrblob  || !tclvar} {20  finish_test21  return22}23 24source $testdir/malloc_common.tcl25 26unset -nocomplain ::fd ::data27set ::fd [open $::cmdlinearg(INFO_SCRIPT)]28set ::data [read $::fd]29close $::fd30 31do_malloc_test 1 -tclprep {32  set bytes [file size $::cmdlinearg(INFO_SCRIPT)]33  execsql {34    CREATE TABLE blobs(k, v BLOB);35    INSERT INTO blobs VALUES(1, zeroblob($::bytes));36  }37} -tclbody {38  set ::blob [db incrblob blobs v 1]39  fconfigure $::blob -translation binary40  set rc [catch {puts -nonewline $::blob $::data}]41  if {$rc} { error "out of memory" }42} 43 44do_malloc_test 2 -tclprep {45  execsql {46    CREATE TABLE blobs(k, v BLOB);47    INSERT INTO blobs VALUES(1, $::data);48  }49} -tclbody {50  set ::blob [db incrblob blobs v 1]51  set rc [catch {set ::r [read $::blob]}]52  if {$rc} { 53    error "out of memory" 54  } elseif {$::r ne $::data} {55    error "Bad data read..."56  }57}58 59do_malloc_test 3 -tclprep {60  execsql {61    CREATE TABLE blobs(k, v BLOB);62    INSERT INTO blobs VALUES(1, $::data);63  }64} -tclbody {65  set ::blob [db incrblob blobs v 1]66  set rc [catch {set ::r [read $::blob]}]67  if {$rc} { 68    error "out of memory" 69  } elseif {$::r ne $::data} {70    error "Bad data read..."71  }72  set rc [catch {close $::blob}]73  if {$rc} { 74    error "out of memory" 75  }76}77 78do_ioerr_test incrblob_err-4 -cksum 1 -sqlprep {79  CREATE TABLE blobs(k, v BLOB);80  INSERT INTO blobs VALUES(1, $::data);81} -tclbody {82  set ::blob [db incrblob blobs v 1]83  read $::blob84}85 86do_ioerr_test incrblob_err-5 -cksum 1 -sqlprep {87  CREATE TABLE blobs(k, v BLOB);88  INSERT INTO blobs VALUES(1, zeroblob(length(CAST($::data AS BLOB))));89} -tclbody {90  set ::blob [db incrblob blobs v 1]91  fconfigure $::blob -translation binary92  puts -nonewline $::blob $::data93  close $::blob94}95 96do_ioerr_test incrblob_err-6 -cksum 1 -sqlprep {97  CREATE TABLE blobs(k, v BLOB);98  INSERT INTO blobs VALUES(1, $::data || $::data || $::data);99} -tclbody {100  set ::blob [db incrblob blobs v 1]101  fconfigure $::blob -translation binary102  seek $::blob -20 end103  puts -nonewline $::blob "12345678900987654321"104  close $::blob105}106 107do_ioerr_test incrblob_err-7 -cksum 1 -sqlprep {108  PRAGMA auto_vacuum = 1;109  CREATE TABLE blobs(k INTEGER PRIMARY KEY, v BLOB);110  INSERT INTO blobs VALUES(1, zeroblob(500 * 1020));111} -tclbody {112  # Read some data from the end of the large blob inserted into table 113  # "blobs". This forces the IO error to occur while reading a pointer114  # map page for the purposes of seeking to the end of the blob.115  #116  sqlite3 db2 test.db117  set ::blob [db2 incrblob blobs v 1]118  sqlite3_blob_read $::blob [expr 500*1020-20] 20119  close $::blob120}121catch {db2 close}122 123do_ioerr_test incrblob_err-8 -cksum 1 -sqlprep {124  PRAGMA auto_vacuum = 1;125  CREATE TABLE blobs(k INTEGER PRIMARY KEY, v BLOB);126  INSERT INTO blobs VALUES(1, zeroblob(500 * 1020));127} -tclbody {128  # Read some data from the end of the large blob inserted into table 129  # "blobs". This forces the IO error to occur while reading a pointer130  # map page for the purposes of seeking to the end of the blob.131  #132  sqlite3 db2 test.db133  set ::blob [db2 incrblob blobs v 1]134  sqlite3_blob_write $::blob [expr 500*1020-20] 12345678900987654321135  close $::blob136}137 138catch {db2 close}139 140finish_test141