/ Hex Artifact Content
Login

Artifact c577c91d4ed9e8336cdb188b15d6ee2a6fe9604e:


0000: 23 20 32 30 30 37 20 4d 61 79 20 31 0a 23 0a 23  # 2007 May 1.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u give..#.#*****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 0a 23 0a 23 20 24 49 64 3a 20 69 6e 63 72  **.#.# $Id: incr
0170: 62 6c 6f 62 5f 65 72 72 2e 74 65 73 74 2c 76 20  blob_err.test,v 
0180: 31 2e 31 34 20 32 30 30 38 2f 30 37 2f 31 38 20  1.14 2008/07/18 
0190: 31 37 3a 31 36 3a 32 37 20 64 72 68 20 45 78 70  17:16:27 drh Exp
01a0: 20 24 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69   $.#..set testdi
01b0: 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  r [file dirname 
01c0: 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24  $argv0].source $
01d0: 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74  testdir/tester.t
01e0: 63 6c 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b 21  cl..ifcapable {!
01f0: 69 6e 63 72 62 6c 6f 62 20 20 7c 7c 20 21 6d 65  incrblob  || !me
0200: 6d 64 65 62 75 67 20 7c 7c 20 21 74 63 6c 76 61  mdebug || !tclva
0210: 72 7d 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65  r} {.  finish_te
0220: 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 73  st.  return.}..s
0230: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 6d  ource $testdir/m
0240: 61 6c 6c 6f 63 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c  alloc_common.tcl
0250: 0a 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c  ..unset -nocompl
0260: 61 69 6e 20 3a 3a 66 64 20 3a 3a 64 61 74 61 0a  ain ::fd ::data.
0270: 73 65 74 20 3a 3a 66 64 20 5b 6f 70 65 6e 20 5b  set ::fd [open [
0280: 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0a 73 65  info script]].se
0290: 74 20 3a 3a 64 61 74 61 20 5b 72 65 61 64 20 24  t ::data [read $
02a0: 3a 3a 66 64 5d 0a 63 6c 6f 73 65 20 24 3a 3a 66  ::fd].close $::f
02b0: 64 0a 0a 64 6f 5f 6d 61 6c 6c 6f 63 5f 74 65 73  d..do_malloc_tes
02c0: 74 20 31 20 2d 74 63 6c 70 72 65 70 20 7b 0a 20  t 1 -tclprep {. 
02d0: 20 73 65 74 20 62 79 74 65 73 20 5b 66 69 6c 65   set bytes [file
02e0: 20 73 69 7a 65 20 5b 69 6e 66 6f 20 73 63 72 69   size [info scri
02f0: 70 74 5d 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b  pt]].  execsql {
0300: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0310: 45 20 62 6c 6f 62 73 28 6b 2c 20 76 20 42 4c 4f  E blobs(k, v BLO
0320: 42 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  B);.    INSERT I
0330: 4e 54 4f 20 62 6c 6f 62 73 20 56 41 4c 55 45 53  NTO blobs VALUES
0340: 28 31 2c 20 7a 65 72 6f 62 6c 6f 62 28 24 3a 3a  (1, zeroblob($::
0350: 62 79 74 65 73 29 29 3b 0a 20 20 7d 0a 7d 20 2d  bytes));.  }.} -
0360: 74 63 6c 62 6f 64 79 20 7b 0a 20 20 73 65 74 20  tclbody {.  set 
0370: 3a 3a 62 6c 6f 62 20 5b 64 62 20 69 6e 63 72 62  ::blob [db incrb
0380: 6c 6f 62 20 62 6c 6f 62 73 20 76 20 31 5d 0a 20  lob blobs v 1]. 
0390: 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b   set rc [catch {
03a0: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
03b0: 24 3a 3a 62 6c 6f 62 20 24 3a 3a 64 61 74 61 7d  $::blob $::data}
03c0: 5d 0a 20 20 69 66 20 7b 24 72 63 7d 20 7b 20 65  ].  if {$rc} { e
03d0: 72 72 6f 72 20 22 6f 75 74 20 6f 66 20 6d 65 6d  rror "out of mem
03e0: 6f 72 79 22 20 7d 0a 7d 20 0a 0a 64 6f 5f 6d 61  ory" }.} ..do_ma
03f0: 6c 6c 6f 63 5f 74 65 73 74 20 32 20 2d 74 63 6c  lloc_test 2 -tcl
0400: 70 72 65 70 20 7b 0a 20 20 65 78 65 63 73 71 6c  prep {.  execsql
0410: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
0420: 42 4c 45 20 62 6c 6f 62 73 28 6b 2c 20 76 20 42  BLE blobs(k, v B
0430: 4c 4f 42 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  LOB);.    INSERT
0440: 20 49 4e 54 4f 20 62 6c 6f 62 73 20 56 41 4c 55   INTO blobs VALU
0450: 45 53 28 31 2c 20 24 3a 3a 64 61 74 61 29 3b 0a  ES(1, $::data);.
0460: 20 20 7d 0a 7d 20 2d 74 63 6c 62 6f 64 79 20 7b    }.} -tclbody {
0470: 0a 20 20 73 65 74 20 3a 3a 62 6c 6f 62 20 5b 64  .  set ::blob [d
0480: 62 20 69 6e 63 72 62 6c 6f 62 20 62 6c 6f 62 73  b incrblob blobs
0490: 20 76 20 31 5d 0a 20 20 73 65 74 20 72 63 20 5b   v 1].  set rc [
04a0: 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 72 20 5b  catch {set ::r [
04b0: 72 65 61 64 20 24 3a 3a 62 6c 6f 62 5d 7d 5d 0a  read $::blob]}].
04c0: 20 20 69 66 20 7b 24 72 63 7d 20 7b 20 0a 20 20    if {$rc} { .  
04d0: 20 20 65 72 72 6f 72 20 22 6f 75 74 20 6f 66 20    error "out of 
04e0: 6d 65 6d 6f 72 79 22 20 0a 20 20 7d 20 65 6c 73  memory" .  } els
04f0: 65 69 66 20 7b 24 3a 3a 72 20 6e 65 20 24 3a 3a  eif {$::r ne $::
0500: 64 61 74 61 7d 20 7b 0a 20 20 20 20 65 72 72 6f  data} {.    erro
0510: 72 20 22 42 61 64 20 64 61 74 61 20 72 65 61 64  r "Bad data read
0520: 2e 2e 2e 22 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f 6d  ...".  }.}..do_m
0530: 61 6c 6c 6f 63 5f 74 65 73 74 20 33 20 2d 74 63  alloc_test 3 -tc
0540: 6c 70 72 65 70 20 7b 0a 20 20 65 78 65 63 73 71  lprep {.  execsq
0550: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
0560: 41 42 4c 45 20 62 6c 6f 62 73 28 6b 2c 20 76 20  ABLE blobs(k, v 
0570: 42 4c 4f 42 29 3b 0a 20 20 20 20 49 4e 53 45 52  BLOB);.    INSER
0580: 54 20 49 4e 54 4f 20 62 6c 6f 62 73 20 56 41 4c  T INTO blobs VAL
0590: 55 45 53 28 31 2c 20 24 3a 3a 64 61 74 61 29 3b  UES(1, $::data);
05a0: 0a 20 20 7d 0a 7d 20 2d 74 63 6c 62 6f 64 79 20  .  }.} -tclbody 
05b0: 7b 0a 20 20 73 65 74 20 3a 3a 62 6c 6f 62 20 5b  {.  set ::blob [
05c0: 64 62 20 69 6e 63 72 62 6c 6f 62 20 62 6c 6f 62  db incrblob blob
05d0: 73 20 76 20 31 5d 0a 20 20 73 65 74 20 72 63 20  s v 1].  set rc 
05e0: 5b 63 61 74 63 68 20 7b 73 65 74 20 3a 3a 72 20  [catch {set ::r 
05f0: 5b 72 65 61 64 20 24 3a 3a 62 6c 6f 62 5d 7d 5d  [read $::blob]}]
0600: 0a 20 20 69 66 20 7b 24 72 63 7d 20 7b 20 0a 20  .  if {$rc} { . 
0610: 20 20 20 65 72 72 6f 72 20 22 6f 75 74 20 6f 66     error "out of
0620: 20 6d 65 6d 6f 72 79 22 20 0a 20 20 7d 20 65 6c   memory" .  } el
0630: 73 65 69 66 20 7b 24 3a 3a 72 20 6e 65 20 24 3a  seif {$::r ne $:
0640: 3a 64 61 74 61 7d 20 7b 0a 20 20 20 20 65 72 72  :data} {.    err
0650: 6f 72 20 22 42 61 64 20 64 61 74 61 20 72 65 61  or "Bad data rea
0660: 64 2e 2e 2e 22 0a 20 20 7d 0a 20 20 73 65 74 20  d...".  }.  set 
0670: 72 63 20 5b 63 61 74 63 68 20 7b 63 6c 6f 73 65  rc [catch {close
0680: 20 24 3a 3a 62 6c 6f 62 7d 5d 0a 20 20 69 66 20   $::blob}].  if 
0690: 7b 24 72 63 7d 20 7b 20 0a 20 20 20 20 65 72 72  {$rc} { .    err
06a0: 6f 72 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  or "out of memor
06b0: 79 22 20 0a 20 20 7d 0a 7d 20 0a 0a 0a 64 6f 5f  y" .  }.} ...do_
06c0: 69 6f 65 72 72 5f 74 65 73 74 20 69 6e 63 72 62  ioerr_test incrb
06d0: 6c 6f 62 5f 65 72 72 2d 34 20 2d 63 6b 73 75 6d  lob_err-4 -cksum
06e0: 20 31 20 2d 73 71 6c 70 72 65 70 20 7b 0a 20 20   1 -sqlprep {.  
06f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 62 6c 6f  CREATE TABLE blo
0700: 62 73 28 6b 2c 20 76 20 42 4c 4f 42 29 3b 0a 20  bs(k, v BLOB);. 
0710: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 62 6c 6f   INSERT INTO blo
0720: 62 73 20 56 41 4c 55 45 53 28 31 2c 20 24 3a 3a  bs VALUES(1, $::
0730: 64 61 74 61 29 3b 0a 7d 20 2d 74 63 6c 62 6f 64  data);.} -tclbod
0740: 79 20 7b 0a 20 20 73 65 74 20 3a 3a 62 6c 6f 62  y {.  set ::blob
0750: 20 5b 64 62 20 69 6e 63 72 62 6c 6f 62 20 62 6c   [db incrblob bl
0760: 6f 62 73 20 76 20 31 5d 0a 20 20 72 65 61 64 20  obs v 1].  read 
0770: 24 3a 3a 62 6c 6f 62 0a 7d 0a 0a 64 6f 5f 69 6f  $::blob.}..do_io
0780: 65 72 72 5f 74 65 73 74 20 69 6e 63 72 62 6c 6f  err_test incrblo
0790: 62 5f 65 72 72 2d 35 20 2d 63 6b 73 75 6d 20 31  b_err-5 -cksum 1
07a0: 20 2d 73 71 6c 70 72 65 70 20 7b 0a 20 20 43 52   -sqlprep {.  CR
07b0: 45 41 54 45 20 54 41 42 4c 45 20 62 6c 6f 62 73  EATE TABLE blobs
07c0: 28 6b 2c 20 76 20 42 4c 4f 42 29 3b 0a 20 20 49  (k, v BLOB);.  I
07d0: 4e 53 45 52 54 20 49 4e 54 4f 20 62 6c 6f 62 73  NSERT INTO blobs
07e0: 20 56 41 4c 55 45 53 28 31 2c 20 7a 65 72 6f 62   VALUES(1, zerob
07f0: 6c 6f 62 28 6c 65 6e 67 74 68 28 43 41 53 54 28  lob(length(CAST(
0800: 24 3a 3a 64 61 74 61 20 41 53 20 42 4c 4f 42 29  $::data AS BLOB)
0810: 29 29 29 3b 0a 7d 20 2d 74 63 6c 62 6f 64 79 20  )));.} -tclbody 
0820: 7b 0a 20 20 73 65 74 20 3a 3a 62 6c 6f 62 20 5b  {.  set ::blob [
0830: 64 62 20 69 6e 63 72 62 6c 6f 62 20 62 6c 6f 62  db incrblob blob
0840: 73 20 76 20 31 5d 0a 20 20 70 75 74 73 20 2d 6e  s v 1].  puts -n
0850: 6f 6e 65 77 6c 69 6e 65 20 24 3a 3a 62 6c 6f 62  onewline $::blob
0860: 20 24 3a 3a 64 61 74 61 0a 20 20 63 6c 6f 73 65   $::data.  close
0870: 20 24 3a 3a 62 6c 6f 62 0a 7d 0a 0a 64 6f 5f 69   $::blob.}..do_i
0880: 6f 65 72 72 5f 74 65 73 74 20 69 6e 63 72 62 6c  oerr_test incrbl
0890: 6f 62 5f 65 72 72 2d 36 20 2d 63 6b 73 75 6d 20  ob_err-6 -cksum 
08a0: 31 20 2d 73 71 6c 70 72 65 70 20 7b 0a 20 20 43  1 -sqlprep {.  C
08b0: 52 45 41 54 45 20 54 41 42 4c 45 20 62 6c 6f 62  REATE TABLE blob
08c0: 73 28 6b 2c 20 76 20 42 4c 4f 42 29 3b 0a 20 20  s(k, v BLOB);.  
08d0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 62 6c 6f 62  INSERT INTO blob
08e0: 73 20 56 41 4c 55 45 53 28 31 2c 20 24 3a 3a 64  s VALUES(1, $::d
08f0: 61 74 61 20 7c 7c 20 24 3a 3a 64 61 74 61 20 7c  ata || $::data |
0900: 7c 20 24 3a 3a 64 61 74 61 29 3b 0a 7d 20 2d 74  | $::data);.} -t
0910: 63 6c 62 6f 64 79 20 7b 0a 20 20 73 65 74 20 3a  clbody {.  set :
0920: 3a 62 6c 6f 62 20 5b 64 62 20 69 6e 63 72 62 6c  :blob [db incrbl
0930: 6f 62 20 62 6c 6f 62 73 20 76 20 31 5d 0a 20 20  ob blobs v 1].  
0940: 73 65 65 6b 20 24 3a 3a 62 6c 6f 62 20 2d 32 30  seek $::blob -20
0950: 20 65 6e 64 0a 20 20 70 75 74 73 20 2d 6e 6f 6e   end.  puts -non
0960: 65 77 6c 69 6e 65 20 24 3a 3a 62 6c 6f 62 20 22  ewline $::blob "
0970: 31 32 33 34 35 36 37 38 39 30 30 39 38 37 36 35  1234567890098765
0980: 34 33 32 31 22 0a 20 20 63 6c 6f 73 65 20 24 3a  4321".  close $:
0990: 3a 62 6c 6f 62 0a 7d 0a 0a 64 6f 5f 69 6f 65 72  :blob.}..do_ioer
09a0: 72 5f 74 65 73 74 20 69 6e 63 72 62 6c 6f 62 5f  r_test incrblob_
09b0: 65 72 72 2d 37 20 2d 63 6b 73 75 6d 20 31 20 2d  err-7 -cksum 1 -
09c0: 73 71 6c 70 72 65 70 20 7b 0a 20 20 50 52 41 47  sqlprep {.  PRAG
09d0: 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d  MA auto_vacuum =
09e0: 20 31 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42   1;.  CREATE TAB
09f0: 4c 45 20 62 6c 6f 62 73 28 6b 20 49 4e 54 45 47  LE blobs(k INTEG
0a00: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
0a10: 76 20 42 4c 4f 42 29 3b 0a 20 20 49 4e 53 45 52  v BLOB);.  INSER
0a20: 54 20 49 4e 54 4f 20 62 6c 6f 62 73 20 56 41 4c  T INTO blobs VAL
0a30: 55 45 53 28 31 2c 20 7a 65 72 6f 62 6c 6f 62 28  UES(1, zeroblob(
0a40: 35 30 30 20 2a 20 31 30 32 30 29 29 3b 0a 7d 20  500 * 1020));.} 
0a50: 2d 74 63 6c 62 6f 64 79 20 7b 0a 20 20 23 20 52  -tclbody {.  # R
0a60: 65 61 64 20 73 6f 6d 65 20 64 61 74 61 20 66 72  ead some data fr
0a70: 6f 6d 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  om the end of th
0a80: 65 20 6c 61 72 67 65 20 62 6c 6f 62 20 69 6e 73  e large blob ins
0a90: 65 72 74 65 64 20 69 6e 74 6f 20 74 61 62 6c 65  erted into table
0aa0: 20 0a 20 20 23 20 22 62 6c 6f 62 73 22 2e 20 54   .  # "blobs". T
0ab0: 68 69 73 20 66 6f 72 63 65 73 20 74 68 65 20 49  his forces the I
0ac0: 4f 20 65 72 72 6f 72 20 74 6f 20 6f 63 63 75 72  O error to occur
0ad0: 20 77 68 69 6c 65 20 72 65 61 64 69 6e 67 20 61   while reading a
0ae0: 20 70 6f 69 6e 74 65 72 0a 20 20 23 20 6d 61 70   pointer.  # map
0af0: 20 70 61 67 65 20 66 6f 72 20 74 68 65 20 70 75   page for the pu
0b00: 72 70 6f 73 65 73 20 6f 66 20 73 65 65 6b 69 6e  rposes of seekin
0b10: 67 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  g to the end of 
0b20: 74 68 65 20 62 6c 6f 62 2e 0a 20 20 23 0a 20 20  the blob..  #.  
0b30: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
0b40: 2e 64 62 0a 20 20 73 65 74 20 3a 3a 62 6c 6f 62  .db.  set ::blob
0b50: 20 5b 64 62 32 20 69 6e 63 72 62 6c 6f 62 20 62   [db2 incrblob b
0b60: 6c 6f 62 73 20 76 20 31 5d 0a 20 20 73 71 6c 69  lobs v 1].  sqli
0b70: 74 65 33 5f 62 6c 6f 62 5f 72 65 61 64 20 24 3a  te3_blob_read $:
0b80: 3a 62 6c 6f 62 20 5b 65 78 70 72 20 35 30 30 2a  :blob [expr 500*
0b90: 31 30 32 30 2d 32 30 5d 20 32 30 0a 20 20 63 6c  1020-20] 20.  cl
0ba0: 6f 73 65 20 24 3a 3a 62 6c 6f 62 0a 7d 0a 63 61  ose $::blob.}.ca
0bb0: 74 63 68 20 7b 64 62 32 20 63 6c 6f 73 65 7d 0a  tch {db2 close}.
0bc0: 0a 64 6f 5f 69 6f 65 72 72 5f 74 65 73 74 20 69  .do_ioerr_test i
0bd0: 6e 63 72 62 6c 6f 62 5f 65 72 72 2d 38 20 2d 63  ncrblob_err-8 -c
0be0: 6b 73 75 6d 20 31 20 2d 73 71 6c 70 72 65 70 20  ksum 1 -sqlprep 
0bf0: 7b 0a 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f  {.  PRAGMA auto_
0c00: 76 61 63 75 75 6d 20 3d 20 31 3b 0a 20 20 43 52  vacuum = 1;.  CR
0c10: 45 41 54 45 20 54 41 42 4c 45 20 62 6c 6f 62 73  EATE TABLE blobs
0c20: 28 6b 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (k INTEGER PRIMA
0c30: 52 59 20 4b 45 59 2c 20 76 20 42 4c 4f 42 29 3b  RY KEY, v BLOB);
0c40: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 62  .  INSERT INTO b
0c50: 6c 6f 62 73 20 56 41 4c 55 45 53 28 31 2c 20 7a  lobs VALUES(1, z
0c60: 65 72 6f 62 6c 6f 62 28 35 30 30 20 2a 20 31 30  eroblob(500 * 10
0c70: 32 30 29 29 3b 0a 7d 20 2d 74 63 6c 62 6f 64 79  20));.} -tclbody
0c80: 20 7b 0a 20 20 23 20 52 65 61 64 20 73 6f 6d 65   {.  # Read some
0c90: 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20 65   data from the e
0ca0: 6e 64 20 6f 66 20 74 68 65 20 6c 61 72 67 65 20  nd of the large 
0cb0: 62 6c 6f 62 20 69 6e 73 65 72 74 65 64 20 69 6e  blob inserted in
0cc0: 74 6f 20 74 61 62 6c 65 20 0a 20 20 23 20 22 62  to table .  # "b
0cd0: 6c 6f 62 73 22 2e 20 54 68 69 73 20 66 6f 72 63  lobs". This forc
0ce0: 65 73 20 74 68 65 20 49 4f 20 65 72 72 6f 72 20  es the IO error 
0cf0: 74 6f 20 6f 63 63 75 72 20 77 68 69 6c 65 20 72  to occur while r
0d00: 65 61 64 69 6e 67 20 61 20 70 6f 69 6e 74 65 72  eading a pointer
0d10: 0a 20 20 23 20 6d 61 70 20 70 61 67 65 20 66 6f  .  # map page fo
0d20: 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
0d30: 66 20 73 65 65 6b 69 6e 67 20 74 6f 20 74 68 65  f seeking to the
0d40: 20 65 6e 64 20 6f 66 20 74 68 65 20 62 6c 6f 62   end of the blob
0d50: 2e 0a 20 20 23 0a 20 20 73 71 6c 69 74 65 33 20  ..  #.  sqlite3 
0d60: 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 73 65  db2 test.db.  se
0d70: 74 20 3a 3a 62 6c 6f 62 20 5b 64 62 32 20 69 6e  t ::blob [db2 in
0d80: 63 72 62 6c 6f 62 20 62 6c 6f 62 73 20 76 20 31  crblob blobs v 1
0d90: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 62 6c 6f 62  ].  sqlite3_blob
0da0: 5f 77 72 69 74 65 20 24 3a 3a 62 6c 6f 62 20 5b  _write $::blob [
0db0: 65 78 70 72 20 35 30 30 2a 31 30 32 30 2d 32 30  expr 500*1020-20
0dc0: 5d 20 31 32 33 34 35 36 37 38 39 30 30 39 38 37  ] 12345678900987
0dd0: 36 35 34 33 32 31 0a 20 20 63 6c 6f 73 65 20 24  654321.  close $
0de0: 3a 3a 62 6c 6f 62 0a 7d 0a 0a 63 61 74 63 68 20  ::blob.}..catch 
0df0: 7b 64 62 32 20 63 6c 6f 73 65 7d 0a 0a 66 69 6e  {db2 close}..fin
0e00: 69 73 68 5f 74 65 73 74 0a                       ish_test.