/ Hex Artifact Content
Login

Artifact 6c567fbf870aa9e91866fe52ce6f200cd548939a:


0000: 23 20 32 30 30 31 20 4f 63 74 6f 62 65 72 20 31  # 2001 October 1
0010: 32 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  2.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an you 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 2a 2a 2a 2a 2a 0a 23 20 54 65 73 74 20 74  *******.# Test t
0170: 68 61 74 20 22 50 52 41 47 4d 41 20 69 6e 63 72  hat "PRAGMA incr
0180: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 22 20  emental_vacuum" 
0190: 64 65 74 65 63 74 73 20 61 6e 64 20 72 65 70 6f  detects and repo
01a0: 72 74 73 20 64 61 74 61 62 61 73 65 0a 23 20 63  rts database.# c
01b0: 6f 72 72 75 70 74 69 6f 6e 20 70 72 6f 70 65 72  orruption proper
01c0: 6c 79 2e 20 41 6e 64 20 74 68 61 74 20 22 50 52  ly. And that "PR
01d0: 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d  AGMA auto_vacuum
01e0: 20 3d 20 49 4e 43 52 45 4d 45 4e 54 41 4c 22 0a   = INCREMENTAL".
01f0: 23 20 64 6f 65 73 20 61 73 20 77 65 6c 6c 2e 0a  # does as well..
0200: 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b  #..set testdir [
0210: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72  file dirname $ar
0220: 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73  gv0].source $tes
0230: 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a  tdir/tester.tcl.
0240: 73 65 74 20 74 65 73 74 70 72 65 66 69 78 20 69  set testprefix i
0250: 6e 63 72 63 6f 72 72 75 70 74 0a 0a 23 20 49 66  ncrcorrupt..# If
0260: 20 74 68 69 73 20 62 75 69 6c 64 20 6f 66 20 74   this build of t
0270: 68 65 20 6c 69 62 72 61 72 79 20 64 6f 65 73 20  he library does 
0280: 6e 6f 74 20 73 75 70 70 6f 72 74 20 61 75 74 6f  not support auto
0290: 2d 76 61 63 75 75 6d 2c 20 6f 6d 69 74 20 74 68  -vacuum, omit th
02a0: 69 73 0a 23 20 77 68 6f 6c 65 20 66 69 6c 65 2e  is.# whole file.
02b0: 0a 69 66 63 61 70 61 62 6c 65 20 7b 21 61 75 74  .ifcapable {!aut
02c0: 6f 76 61 63 75 75 6d 7d 20 7b 0a 20 20 66 69 6e  ovacuum} {.  fin
02d0: 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72  ish_test.  retur
02e0: 6e 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  n.}..do_execsql_
02f0: 74 65 73 74 20 31 2e 30 20 7b 0a 20 20 50 52 41  test 1.0 {.  PRA
0300: 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 20  GMA auto_vacuum 
0310: 3d 20 32 3b 0a 20 20 43 52 45 41 54 45 20 54 41  = 2;.  CREATE TA
0320: 42 4c 45 20 74 31 28 61 20 50 52 49 4d 41 52 59  BLE t1(a PRIMARY
0330: 20 4b 45 59 2c 20 62 29 3b 0a 0a 20 20 57 49 54   KEY, b);..  WIT
0340: 48 20 64 61 74 61 28 69 29 20 41 53 20 28 0a 20  H data(i) AS (. 
0350: 20 20 20 53 45 4c 45 43 54 20 31 20 55 4e 49 4f     SELECT 1 UNIO
0360: 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 69 2b 31  N ALL SELECT i+1
0370: 20 46 52 4f 4d 20 64 61 74 61 0a 20 20 29 0a 20   FROM data.  ). 
0380: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0390: 53 45 4c 45 43 54 20 69 2c 20 72 61 6e 64 6f 6d  SELECT i, random
03a0: 62 6c 6f 62 28 36 30 30 29 20 46 52 4f 4d 20 64  blob(600) FROM d
03b0: 61 74 61 20 4c 49 4d 49 54 20 32 30 3b 0a 20 20  ata LIMIT 20;.  
03c0: 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e  PRAGMA page_coun
03d0: 74 3b 0a 7d 20 7b 32 34 7d 0a 0a 64 6f 5f 65 78  t;.} {24}..do_ex
03e0: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 20 7b  ecsql_test 1.1 {
03f0: 0a 20 20 50 52 41 47 4d 41 20 69 6e 63 72 65 6d  .  PRAGMA increm
0400: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 3b 0a 7d 20  ental_vacuum;.} 
0410: 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 31 2e 32 20  {}..do_test 1.2 
0420: 7b 0a 20 20 64 62 5f 73 61 76 65 0a 20 20 68 65  {.  db_save.  he
0430: 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74 2e 64  xio_write test.d
0440: 62 20 33 36 20 30 30 30 30 30 30 31 39 0a 20 20  b 36 00000019.  
0450: 63 61 74 63 68 73 71 6c 20 7b 20 50 52 41 47 4d  catchsql { PRAGM
0460: 41 20 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61  A incremental_va
0470: 63 75 75 6d 3b 20 7d 0a 7d 20 7b 31 20 7b 64 61  cuum; }.} {1 {da
0480: 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67  tabase disk imag
0490: 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 7d  e is malformed}}
04a0: 0a 0a 64 6f 5f 74 65 73 74 20 31 2e 33 20 7b 0a  ..do_test 1.3 {.
04b0: 20 20 73 65 74 20 73 74 6d 74 20 5b 73 71 6c 69    set stmt [sqli
04c0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 64  te3_prepare_v2 d
04d0: 62 20 22 50 52 41 47 4d 41 20 69 6e 63 72 65 6d  b "PRAGMA increm
04e0: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 22 20 2d 31  ental_vacuum" -1
04f0: 20 64 75 6d 6d 79 5d 0a 20 20 73 71 6c 69 74 65   dummy].  sqlite
0500: 33 5f 73 74 65 70 20 24 73 74 6d 74 0a 7d 20 7b  3_step $stmt.} {
0510: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 7d 0a  SQLITE_CORRUPT}.
0520: 64 6f 5f 74 65 73 74 20 31 2e 34 20 7b 20 73 71  do_test 1.4 { sq
0530: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 64 62  lite3_errcode db
0540: 20 7d 20 7b 53 51 4c 49 54 45 5f 43 4f 52 52 55   } {SQLITE_CORRU
0550: 50 54 7d 0a 64 6f 5f 74 65 73 74 20 31 2e 35 20  PT}.do_test 1.5 
0560: 7b 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  { sqlite3_errmsg
0570: 20 64 62 20 7d 20 7b 64 61 74 61 62 61 73 65 20   db } {database 
0580: 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20 6d 61  disk image is ma
0590: 6c 66 6f 72 6d 65 64 7d 0a 64 6f 5f 74 65 73 74  lformed}.do_test
05a0: 20 31 2e 36 20 7b 20 73 71 6c 69 74 65 33 5f 66   1.6 { sqlite3_f
05b0: 69 6e 61 6c 69 7a 65 20 24 73 74 6d 74 20 7d 20  inalize $stmt } 
05c0: 7b 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 7d  {SQLITE_CORRUPT}
05d0: 0a 64 6f 5f 74 65 73 74 20 31 2e 37 20 7b 20 73  .do_test 1.7 { s
05e0: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 64  qlite3_errcode d
05f0: 62 20 7d 20 7b 53 51 4c 49 54 45 5f 43 4f 52 52  b } {SQLITE_CORR
0600: 55 50 54 7d 0a 64 6f 5f 74 65 73 74 20 31 2e 38  UPT}.do_test 1.8
0610: 20 7b 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73   { sqlite3_errms
0620: 67 20 64 62 20 7d 20 7b 64 61 74 61 62 61 73 65  g db } {database
0630: 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20 6d   disk image is m
0640: 61 6c 66 6f 72 6d 65 64 7d 0a 0a 64 6f 5f 74 65  alformed}..do_te
0650: 73 74 20 31 2e 39 20 7b 0a 20 20 73 65 74 20 73  st 1.9 {.  set s
0660: 74 6d 74 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  tmt [sqlite3_pre
0670: 70 61 72 65 5f 76 32 20 64 62 20 22 50 52 41 47  pare_v2 db "PRAG
0680: 4d 41 20 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76  MA incremental_v
0690: 61 63 75 75 6d 22 20 2d 31 20 64 75 6d 6d 79 5d  acuum" -1 dummy]
06a0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
06b0: 24 73 74 6d 74 0a 7d 20 7b 53 51 4c 49 54 45 5f  $stmt.} {SQLITE_
06c0: 43 4f 52 52 55 50 54 7d 0a 64 6f 5f 74 65 73 74  CORRUPT}.do_test
06d0: 20 31 2e 31 30 20 7b 20 73 71 6c 69 74 65 33 5f   1.10 { sqlite3_
06e0: 65 72 72 63 6f 64 65 20 64 62 20 7d 20 7b 53 51  errcode db } {SQ
06f0: 4c 49 54 45 5f 43 4f 52 52 55 50 54 7d 0a 64 6f  LITE_CORRUPT}.do
0700: 5f 74 65 73 74 20 31 2e 31 31 20 7b 20 73 71 6c  _test 1.11 { sql
0710: 69 74 65 33 5f 65 72 72 6d 73 67 20 64 62 20 7d  ite3_errmsg db }
0720: 20 7b 64 61 74 61 62 61 73 65 20 64 69 73 6b 20   {database disk 
0730: 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d  image is malform
0740: 65 64 7d 0a 0a 64 6f 5f 74 65 73 74 20 31 2e 31  ed}..do_test 1.1
0750: 32 20 7b 0a 20 20 73 65 74 20 73 74 6d 74 32 20  2 {.  set stmt2 
0760: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0770: 5f 76 32 20 64 62 20 22 53 45 4c 45 43 54 20 31  _v2 db "SELECT 1
0780: 22 20 2d 31 20 64 75 6d 6d 79 5d 0a 20 20 73 71  " -1 dummy].  sq
0790: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
07a0: 73 74 6d 74 32 0a 7d 20 7b 53 51 4c 49 54 45 5f  stmt2.} {SQLITE_
07b0: 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 31 2e 31 33  OK}.do_test 1.13
07c0: 20 7b 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f   { sqlite3_errco
07d0: 64 65 20 64 62 20 7d 20 7b 53 51 4c 49 54 45 5f  de db } {SQLITE_
07e0: 4f 4b 7d 0a 64 6f 5f 74 65 73 74 20 31 2e 31 34  OK}.do_test 1.14
07f0: 20 7b 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73   { sqlite3_errms
0800: 67 20 64 62 20 7d 20 7b 6e 6f 74 20 61 6e 20 65  g db } {not an e
0810: 72 72 6f 72 7d 0a 0a 64 6f 5f 74 65 73 74 20 31  rror}..do_test 1
0820: 2e 31 35 20 7b 20 73 71 6c 69 74 65 33 5f 66 69  .15 { sqlite3_fi
0830: 6e 61 6c 69 7a 65 20 24 73 74 6d 74 20 7d 20 7b  nalize $stmt } {
0840: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 7d 0a  SQLITE_CORRUPT}.
0850: 64 6f 5f 74 65 73 74 20 31 2e 31 36 20 7b 20 73  do_test 1.16 { s
0860: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 64  qlite3_errcode d
0870: 62 20 7d 20 7b 53 51 4c 49 54 45 5f 43 4f 52 52  b } {SQLITE_CORR
0880: 55 50 54 7d 0a 64 6f 5f 74 65 73 74 20 31 2e 31  UPT}.do_test 1.1
0890: 37 20 7b 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  7 { sqlite3_errm
08a0: 73 67 20 64 62 20 7d 20 7b 64 61 74 61 62 61 73  sg db } {databas
08b0: 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20  e disk image is 
08c0: 6d 61 6c 66 6f 72 6d 65 64 7d 0a 0a 23 2d 2d 2d  malformed}..#---
08d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
08e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
08f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0910: 2d 2d 2d 2d 2d 2d 0a 23 0a 72 65 73 65 74 5f 64  ------.#.reset_d
0920: 62 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  b..do_execsql_te
0930: 73 74 20 32 2e 31 20 7b 0a 20 20 50 52 41 47 4d  st 2.1 {.  PRAGM
0940: 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20  A auto_vacuum = 
0950: 31 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  1;.  CREATE TABL
0960: 45 20 74 31 28 61 20 50 52 49 4d 41 52 59 20 4b  E t1(a PRIMARY K
0970: 45 59 2c 20 62 29 3b 0a 20 20 57 49 54 48 20 64  EY, b);.  WITH d
0980: 61 74 61 28 69 29 20 41 53 20 28 0a 20 20 20 20  ata(i) AS (.    
0990: 53 45 4c 45 43 54 20 31 20 55 4e 49 4f 4e 20 41  SELECT 1 UNION A
09a0: 4c 4c 20 53 45 4c 45 43 54 20 69 2b 31 20 46 52  LL SELECT i+1 FR
09b0: 4f 4d 20 64 61 74 61 0a 20 20 29 0a 20 20 49 4e  OM data.  ).  IN
09c0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c  SERT INTO t1 SEL
09d0: 45 43 54 20 69 2c 20 72 61 6e 64 6f 6d 62 6c 6f  ECT i, randomblo
09e0: 62 28 36 30 30 29 20 46 52 4f 4d 20 64 61 74 61  b(600) FROM data
09f0: 20 4c 49 4d 49 54 20 32 30 3b 0a 20 20 50 52 41   LIMIT 20;.  PRA
0a00: 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a  GMA page_count;.
0a10: 7d 20 7b 32 34 7d 0a 0a 64 6f 5f 74 65 73 74 20  } {24}..do_test 
0a20: 32 2e 32 20 7b 0a 20 20 64 62 5f 73 61 76 65 0a  2.2 {.  db_save.
0a30: 20 20 73 65 74 20 66 64 20 5b 6f 70 65 6e 20 74    set fd [open t
0a40: 65 73 74 2e 64 62 20 72 2b 5d 0a 20 20 63 68 61  est.db r+].  cha
0a50: 6e 20 74 72 75 6e 63 61 74 65 20 24 66 64 20 5b  n truncate $fd [
0a60: 65 78 70 72 20 32 32 2a 31 30 32 34 5d 0a 20 20  expr 22*1024].  
0a70: 63 6c 6f 73 65 20 24 66 64 0a 20 20 63 61 74 63  close $fd.  catc
0a80: 68 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 69 6e  hsql { PRAGMA in
0a90: 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d  cremental_vacuum
0aa0: 3b 20 7d 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61  ; }.} {1 {databa
0ab0: 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73  se disk image is
0ac0: 20 6d 61 6c 66 6f 72 6d 65 64 7d 7d 0a 0a 64 6f   malformed}}..do
0ad0: 5f 74 65 73 74 20 32 2e 33 20 7b 0a 20 20 73 65  _test 2.3 {.  se
0ae0: 74 20 73 74 6d 74 20 5b 73 71 6c 69 74 65 33 5f  t stmt [sqlite3_
0af0: 70 72 65 70 61 72 65 5f 76 32 20 64 62 20 22 50  prepare_v2 db "P
0b00: 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75  RAGMA auto_vacuu
0b10: 6d 20 3d 20 49 4e 43 52 45 4d 45 4e 54 41 4c 22  m = INCREMENTAL"
0b20: 20 2d 31 20 64 75 6d 6d 79 5d 0a 20 20 73 71 6c   -1 dummy].  sql
0b30: 69 74 65 33 5f 73 74 65 70 20 24 73 74 6d 74 0a  ite3_step $stmt.
0b40: 7d 20 7b 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  } {SQLITE_CORRUP
0b50: 54 7d 0a 64 6f 5f 74 65 73 74 20 32 2e 34 20 7b  T}.do_test 2.4 {
0b60: 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65   sqlite3_errcode
0b70: 20 64 62 20 7d 20 7b 53 51 4c 49 54 45 5f 43 4f   db } {SQLITE_CO
0b80: 52 52 55 50 54 7d 0a 64 6f 5f 74 65 73 74 20 32  RRUPT}.do_test 2
0b90: 2e 35 20 7b 20 73 71 6c 69 74 65 33 5f 65 72 72  .5 { sqlite3_err
0ba0: 6d 73 67 20 64 62 20 7d 20 7b 64 61 74 61 62 61  msg db } {databa
0bb0: 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73  se disk image is
0bc0: 20 6d 61 6c 66 6f 72 6d 65 64 7d 0a 64 6f 5f 74   malformed}.do_t
0bd0: 65 73 74 20 32 2e 36 20 7b 20 73 71 6c 69 74 65  est 2.6 { sqlite
0be0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 73 74 6d 74  3_finalize $stmt
0bf0: 20 7d 20 7b 53 51 4c 49 54 45 5f 43 4f 52 52 55   } {SQLITE_CORRU
0c00: 50 54 7d 0a 64 6f 5f 74 65 73 74 20 32 2e 37 20  PT}.do_test 2.7 
0c10: 7b 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  { sqlite3_errcod
0c20: 65 20 64 62 20 7d 20 7b 53 51 4c 49 54 45 5f 43  e db } {SQLITE_C
0c30: 4f 52 52 55 50 54 7d 0a 64 6f 5f 74 65 73 74 20  ORRUPT}.do_test 
0c40: 32 2e 38 20 7b 20 73 71 6c 69 74 65 33 5f 65 72  2.8 { sqlite3_er
0c50: 72 6d 73 67 20 64 62 20 7d 20 7b 64 61 74 61 62  rmsg db } {datab
0c60: 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69  ase disk image i
0c70: 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 0a 0a 64 6f  s malformed}..do
0c80: 5f 74 65 73 74 20 32 2e 39 20 7b 0a 20 20 73 65  _test 2.9 {.  se
0c90: 74 20 73 74 6d 74 20 5b 73 71 6c 69 74 65 33 5f  t stmt [sqlite3_
0ca0: 70 72 65 70 61 72 65 5f 76 32 20 64 62 20 22 50  prepare_v2 db "P
0cb0: 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75  RAGMA auto_vacuu
0cc0: 6d 20 3d 20 49 4e 43 52 45 4d 45 4e 54 41 4c 22  m = INCREMENTAL"
0cd0: 20 2d 31 20 64 75 6d 6d 79 5d 0a 20 20 73 71 6c   -1 dummy].  sql
0ce0: 69 74 65 33 5f 73 74 65 70 20 24 73 74 6d 74 0a  ite3_step $stmt.
0cf0: 7d 20 7b 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  } {SQLITE_CORRUP
0d00: 54 7d 0a 64 6f 5f 74 65 73 74 20 32 2e 31 30 20  T}.do_test 2.10 
0d10: 7b 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  { sqlite3_errcod
0d20: 65 20 64 62 20 7d 20 7b 53 51 4c 49 54 45 5f 43  e db } {SQLITE_C
0d30: 4f 52 52 55 50 54 7d 0a 64 6f 5f 74 65 73 74 20  ORRUPT}.do_test 
0d40: 32 2e 31 31 20 7b 20 73 71 6c 69 74 65 33 5f 65  2.11 { sqlite3_e
0d50: 72 72 6d 73 67 20 64 62 20 7d 20 7b 64 61 74 61  rrmsg db } {data
0d60: 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20  base disk image 
0d70: 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 0a 0a 64  is malformed}..d
0d80: 6f 5f 74 65 73 74 20 32 2e 31 32 20 7b 0a 20 20  o_test 2.12 {.  
0d90: 73 65 74 20 73 74 6d 74 32 20 5b 73 71 6c 69 74  set stmt2 [sqlit
0da0: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 64 62  e3_prepare_v2 db
0db0: 20 22 53 45 4c 45 43 54 20 31 22 20 2d 31 20 64   "SELECT 1" -1 d
0dc0: 75 6d 6d 79 5d 0a 20 20 73 71 6c 69 74 65 33 5f  ummy].  sqlite3_
0dd0: 66 69 6e 61 6c 69 7a 65 20 24 73 74 6d 74 32 0a  finalize $stmt2.
0de0: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f  } {SQLITE_OK}.do
0df0: 5f 74 65 73 74 20 32 2e 31 33 20 7b 20 73 71 6c  _test 2.13 { sql
0e00: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 64 62 20  ite3_errcode db 
0e10: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f  } {SQLITE_OK}.do
0e20: 5f 74 65 73 74 20 32 2e 31 34 20 7b 20 73 71 6c  _test 2.14 { sql
0e30: 69 74 65 33 5f 65 72 72 6d 73 67 20 64 62 20 7d  ite3_errmsg db }
0e40: 20 7b 6e 6f 74 20 61 6e 20 65 72 72 6f 72 7d 0a   {not an error}.
0e50: 0a 64 6f 5f 74 65 73 74 20 32 2e 31 35 20 7b 20  .do_test 2.15 { 
0e60: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
0e70: 20 24 73 74 6d 74 20 7d 20 7b 53 51 4c 49 54 45   $stmt } {SQLITE
0e80: 5f 43 4f 52 52 55 50 54 7d 0a 64 6f 5f 74 65 73  _CORRUPT}.do_tes
0e90: 74 20 32 2e 31 36 20 7b 20 73 71 6c 69 74 65 33  t 2.16 { sqlite3
0ea0: 5f 65 72 72 63 6f 64 65 20 64 62 20 7d 20 7b 53  _errcode db } {S
0eb0: 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 7d 0a 64  QLITE_CORRUPT}.d
0ec0: 6f 5f 74 65 73 74 20 32 2e 31 37 20 7b 20 73 71  o_test 2.17 { sq
0ed0: 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 64 62 20  lite3_errmsg db 
0ee0: 7d 20 7b 64 61 74 61 62 61 73 65 20 64 69 73 6b  } {database disk
0ef0: 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f 72   image is malfor
0f00: 6d 65 64 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73  med}..finish_tes
0f10: 74 0a                                            t.