/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 8062cf10a09d8c048f8de7711e94571c38b38168db0e5877ba7561789e5eeb2b:


0000: 23 20 32 30 31 38 2d 30 34 2d 32 38 0a 23 0a 23  # 2018-04-28.#.#
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 20 54 65 73 74 20 63 61 73 65 73 20  **.# Test cases 
0170: 66 6f 72 20 53 51 4c 49 54 45 5f 44 42 43 4f 4e  for SQLITE_DBCON
0180: 46 49 47 5f 52 45 53 45 54 5f 44 41 54 41 42 41  FIG_RESET_DATABA
0190: 53 45 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69  SE.#..set testdi
01a0: 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  r [file dirname 
01b0: 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24  $argv0].source $
01c0: 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74  testdir/tester.t
01d0: 63 6c 0a 73 65 74 20 74 65 73 74 70 72 65 66 69  cl.set testprefi
01e0: 78 20 72 65 73 65 74 64 62 0a 0a 64 6f 5f 6e 6f  x resetdb..do_no
01f0: 74 5f 75 73 65 5f 63 6f 64 65 63 0a 0a 69 66 63  t_use_codec..ifc
0200: 61 70 61 62 6c 65 20 21 76 74 61 62 7c 7c 21 63  apable !vtab||!c
0210: 6f 6d 70 6f 75 6e 64 20 7b 0a 20 20 66 69 6e 69  ompound {.  fini
0220: 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e  sh_test.  return
0230: 0a 7d 0a 0a 23 20 49 6e 20 74 68 65 20 22 69 6e  .}..# In the "in
0240: 6d 65 6d 6f 72 79 5f 6a 6f 75 72 6e 61 6c 22 20  memory_journal" 
0250: 70 65 72 6d 75 74 61 74 69 6f 6e 2c 20 65 61 63  permutation, eac
0260: 68 20 6e 65 77 20 63 6f 6e 6e 65 63 74 69 6f 6e  h new connection
0270: 20 65 78 65 63 75 74 65 73 20 0a 23 20 22 50 52   executes .# "PR
0280: 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  AGMA journal_mod
0290: 65 20 3d 20 6d 65 6d 6f 72 79 22 2e 20 54 68 69  e = memory". Thi
02a0: 73 20 66 61 69 6c 73 20 77 69 74 68 20 53 51 4c  s fails with SQL
02b0: 49 54 45 5f 42 55 53 59 20 69 66 20 61 74 74 65  ITE_BUSY if atte
02c0: 6d 70 74 65 64 0a 23 20 6f 6e 20 61 20 77 61 6c  mpted.# on a wal
02d0: 20 6d 6f 64 65 20 64 61 74 61 62 61 73 65 20 77   mode database w
02e0: 69 74 68 20 65 78 69 73 74 69 6e 67 20 63 6f 6e  ith existing con
02f0: 6e 65 63 74 69 6f 6e 73 2e 20 46 6f 72 20 74 68  nections. For th
0300: 69 73 20 61 6e 64 20 61 20 66 65 77 0a 23 20 6f  is and a few.# o
0310: 74 68 65 72 20 72 65 61 73 6f 6e 73 2c 20 74 68  ther reasons, th
0320: 69 73 20 74 65 73 74 20 69 73 20 6e 6f 74 20 72  is test is not r
0330: 75 6e 20 61 73 20 70 61 72 74 20 6f 66 20 22 69  un as part of "i
0340: 6e 6d 65 6d 6f 72 79 5f 6a 6f 75 72 6e 61 6c 22  nmemory_journal"
0350: 2e 0a 23 0a 23 20 50 65 72 6d 75 74 61 74 69 6f  ..#.# Permutatio
0360: 6e 20 22 6a 6f 75 72 6e 61 6c 74 65 73 74 22 20  n "journaltest" 
0370: 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
0380: 20 77 61 6c 20 6d 6f 64 65 2e 0a 23 0a 69 66 20   wal mode..#.if 
0390: 7b 5b 70 65 72 6d 75 74 61 74 69 6f 6e 5d 3d 3d  {[permutation]==
03a0: 22 69 6e 6d 65 6d 6f 72 79 5f 6a 6f 75 72 6e 61  "inmemory_journa
03b0: 6c 22 0a 20 7c 7c 20 5b 70 65 72 6d 75 74 61 74  l". || [permutat
03c0: 69 6f 6e 5d 3d 3d 22 6a 6f 75 72 6e 61 6c 74 65  ion]=="journalte
03d0: 73 74 22 0a 7d 20 7b 0a 20 20 66 69 6e 69 73 68  st".} {.  finish
03e0: 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d  _test.  return.}
03f0: 0a 0a 23 20 43 72 65 61 74 65 20 61 20 73 61 6d  ..# Create a sam
0400: 70 6c 65 20 64 61 74 61 62 61 73 65 0a 64 6f 5f  ple database.do_
0410: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 30 30  execsql_test 100
0420: 20 7b 0a 20 20 50 52 41 47 4d 41 20 61 75 74 6f   {.  PRAGMA auto
0430: 5f 76 61 63 75 75 6d 20 3d 20 30 3b 0a 20 20 50  _vacuum = 0;.  P
0440: 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 3d  RAGMA page_size=
0450: 34 30 39 36 3b 0a 20 20 43 52 45 41 54 45 20 54  4096;.  CREATE T
0460: 41 42 4c 45 20 74 31 28 61 2c 62 29 3b 0a 20 20  ABLE t1(a,b);.  
0470: 57 49 54 48 20 52 45 43 55 52 53 49 56 45 20 63  WITH RECURSIVE c
0480: 28 78 29 20 41 53 20 28 56 41 4c 55 45 53 28 31  (x) AS (VALUES(1
0490: 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45  ) UNION ALL SELE
04a0: 43 54 20 78 2b 31 20 46 52 4f 4d 20 63 20 57 48  CT x+1 FROM c WH
04b0: 45 52 45 20 78 3c 32 30 29 0a 20 20 20 20 49 4e  ERE x<20).    IN
04c0: 53 45 52 54 20 49 4e 54 4f 20 74 31 28 61 2c 62  SERT INTO t1(a,b
04d0: 29 20 53 45 4c 45 43 54 20 78 2c 20 72 61 6e 64  ) SELECT x, rand
04e0: 6f 6d 62 6c 6f 62 28 33 30 30 29 20 46 52 4f 4d  omblob(300) FROM
04f0: 20 63 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44   c;.  CREATE IND
0500: 45 58 20 74 31 61 20 4f 4e 20 74 31 28 61 29 3b  EX t1a ON t1(a);
0510: 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  .  CREATE INDEX 
0520: 74 31 62 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20  t1b ON t1(b);.  
0530: 53 45 4c 45 43 54 20 73 75 6d 28 61 29 2c 20 73  SELECT sum(a), s
0540: 75 6d 28 6c 65 6e 67 74 68 28 62 29 29 20 46 52  um(length(b)) FR
0550: 4f 4d 20 74 31 3b 0a 20 20 50 52 41 47 4d 41 20  OM t1;.  PRAGMA 
0560: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b  integrity_check;
0570: 0a 20 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61  .  PRAGMA journa
0580: 6c 5f 6d 6f 64 65 3b 0a 20 20 50 52 41 47 4d 41  l_mode;.  PRAGMA
0590: 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 7d 20 7b   page_count;.} {
05a0: 32 31 30 20 36 30 30 30 20 6f 6b 20 64 65 6c 65  210 6000 ok dele
05b0: 74 65 20 38 7d 0a 0a 23 20 56 65 72 69 66 79 20  te 8}..# Verify 
05c0: 74 68 61 74 20 74 68 65 20 73 61 6d 65 20 63 6f  that the same co
05d0: 6e 74 65 6e 74 20 69 73 20 73 65 65 6e 20 66 72  ntent is seen fr
05e0: 6f 6d 20 61 20 73 65 70 61 72 61 74 65 20 64 61  om a separate da
05f0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
0600: 6e 0a 73 71 6c 69 74 65 33 20 64 62 32 20 74 65  n.sqlite3 db2 te
0610: 73 74 2e 64 62 0a 64 6f 5f 74 65 73 74 20 31 31  st.db.do_test 11
0620: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  0 {.  execsql {.
0630: 20 20 20 20 53 45 4c 45 43 54 20 73 75 6d 28 61      SELECT sum(a
0640: 29 2c 20 73 75 6d 28 6c 65 6e 67 74 68 28 62 29  ), sum(length(b)
0650: 29 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 50  ) FROM t1;.    P
0660: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
0670: 63 68 65 63 6b 3b 0a 20 20 20 20 50 52 41 47 4d  check;.    PRAGM
0680: 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3b 0a  A journal_mode;.
0690: 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f      PRAGMA page_
06a0: 63 6f 75 6e 74 3b 0a 20 20 7d 20 64 62 32 0a 7d  count;.  } db2.}
06b0: 20 7b 32 31 30 20 36 30 30 30 20 6f 6b 20 64 65   {210 6000 ok de
06c0: 6c 65 74 65 20 38 7d 0a 0a 64 6f 5f 74 65 73 74  lete 8}..do_test
06d0: 20 32 30 30 20 7b 0a 20 20 23 20 54 68 6f 72 6f   200 {.  # Thoro
06e0: 75 67 68 6c 79 20 63 6f 72 72 75 70 74 20 74 68  ughly corrupt th
06f0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
0700: 62 79 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74  by overwriting t
0710: 68 65 20 66 69 72 73 74 0a 20 20 23 20 70 61 67  he first.  # pag
0720: 65 20 77 69 74 68 20 72 61 6e 64 6f 6d 6e 65 73  e with randomnes
0730: 73 2e 0a 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  s..  sqlite3_db_
0740: 63 6f 6e 66 69 67 20 64 62 20 44 45 46 45 4e 53  config db DEFENS
0750: 49 56 45 20 30 0a 20 20 63 61 74 63 68 73 71 6c  IVE 0.  catchsql
0760: 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 73 71   {.    UPDATE sq
0770: 6c 69 74 65 5f 64 62 70 61 67 65 20 53 45 54 20  lite_dbpage SET 
0780: 64 61 74 61 3d 72 61 6e 64 6f 6d 62 6c 6f 62 28  data=randomblob(
0790: 34 30 39 36 29 20 57 48 45 52 45 20 70 67 6e 6f  4096) WHERE pgno
07a0: 3d 31 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 71  =1;.    PRAGMA q
07b0: 75 69 63 6b 5f 63 68 65 63 6b 3b 0a 20 20 7d 0a  uick_check;.  }.
07c0: 7d 20 7b 31 20 7b 66 69 6c 65 20 69 73 20 6e 6f  } {1 {file is no
07d0: 74 20 61 20 64 61 74 61 62 61 73 65 7d 7d 0a 64  t a database}}.d
07e0: 6f 5f 74 65 73 74 20 32 30 31 20 7b 0a 20 20 63  o_test 201 {.  c
07f0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 50 52  atchsql {.    PR
0800: 41 47 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b  AGMA quick_check
0810: 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b 31 20 7b  ;.  } db2.} {1 {
0820: 66 69 6c 65 20 69 73 20 6e 6f 74 20 61 20 64 61  file is not a da
0830: 74 61 62 61 73 65 7d 7d 0a 0a 64 6f 5f 74 65 73  tabase}}..do_tes
0840: 74 20 32 31 30 20 7b 0a 20 20 23 20 52 65 73 65  t 210 {.  # Rese
0850: 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  t the database f
0860: 69 6c 65 20 75 73 69 6e 67 20 53 51 4c 49 54 45  ile using SQLITE
0870: 5f 44 42 43 4f 4e 46 49 47 5f 52 45 53 45 54 5f  _DBCONFIG_RESET_
0880: 44 41 54 41 42 41 53 45 0a 20 20 73 71 6c 69 74  DATABASE.  sqlit
0890: 65 33 5f 64 62 5f 63 6f 6e 66 69 67 20 64 62 20  e3_db_config db 
08a0: 52 45 53 45 54 5f 44 42 20 31 0a 20 20 64 62 20  RESET_DB 1.  db 
08b0: 65 76 61 6c 20 56 41 43 55 55 4d 0a 20 20 73 71  eval VACUUM.  sq
08c0: 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 20  lite3_db_config 
08d0: 64 62 20 52 45 53 45 54 5f 44 42 20 30 0a 0a 20  db RESET_DB 0.. 
08e0: 20 23 20 49 66 20 75 73 69 6e 67 20 73 71 6c 69   # If using sqli
08f0: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 69 6e  te3_prepare() in
0900: 73 74 65 61 64 20 6f 66 20 5f 76 32 28 29 20 6f  stead of _v2() o
0910: 72 20 5f 76 33 28 29 2c 20 74 68 65 20 62 6c 6f  r _v3(), the blo
0920: 63 6b 20 0a 20 20 23 20 62 65 6c 6f 77 20 72 61  ck .  # below ra
0930: 69 73 65 73 20 61 6e 20 53 51 4c 49 54 45 5f 53  ises an SQLITE_S
0940: 43 48 45 4d 41 20 65 72 72 6f 72 2e 20 54 68 65  CHEMA error. The
0950: 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 69 78 65 73   following fixes
0960: 20 74 68 69 73 2e 0a 20 20 69 66 20 7b 5b 70 65   this..  if {[pe
0970: 72 6d 75 74 61 74 69 6f 6e 5d 3d 3d 22 70 72 65  rmutation]=="pre
0980: 70 61 72 65 22 7d 20 7b 20 63 61 74 63 68 73 71  pare"} { catchsq
0990: 6c 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l "SELECT * FROM
09a0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 20   sqlite_master" 
09b0: 64 62 32 20 7d 0a 0a 20 20 23 20 56 65 72 69 66  db2 }..  # Verif
09c0: 79 20 74 68 61 74 20 74 68 65 20 72 65 73 65 74  y that the reset
09d0: 20 74 6f 6f 6b 2c 20 65 76 65 6e 20 6f 6e 20 74   took, even on t
09e0: 68 65 20 73 65 70 61 72 61 74 65 20 64 61 74 61  he separate data
09f0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a  base connection.
0a00: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
0a10: 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f    PRAGMA page_co
0a20: 75 6e 74 3b 0a 20 20 20 20 20 50 52 41 47 4d 41  unt;.     PRAGMA
0a30: 20 70 61 67 65 5f 73 69 7a 65 3b 0a 20 20 20 20   page_size;.    
0a40: 20 50 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68   PRAGMA quick_ch
0a50: 65 63 6b 3b 0a 20 20 20 20 20 50 52 41 47 4d 41  eck;.     PRAGMA
0a60: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3b 0a 20   journal_mode;. 
0a70: 20 7d 20 64 62 32 0a 7d 20 7b 30 20 7b 31 20 34   } db2.} {0 {1 4
0a80: 30 39 36 20 6f 6b 20 64 65 6c 65 74 65 7d 7d 0a  096 ok delete}}.
0a90: 0a 23 20 44 65 6c 65 74 65 20 74 68 65 20 6f 6c  .# Delete the ol
0aa0: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 61 6e  d connections an
0ab0: 64 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 73  d database and s
0ac0: 74 61 72 74 20 6f 76 65 72 20 61 67 61 69 6e 0a  tart over again.
0ad0: 23 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65  # with a differe
0ae0: 6e 74 20 70 61 67 65 20 73 69 7a 65 20 61 6e 64  nt page size and
0af0: 20 69 6e 20 57 41 4c 20 6d 6f 64 65 2e 0a 23 0a   in WAL mode..#.
0b00: 64 62 20 63 6c 6f 73 65 0a 64 62 32 20 63 6c 6f  db close.db2 clo
0b10: 73 65 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74  se.forcedelete t
0b20: 65 73 74 2e 64 62 0a 73 71 6c 69 74 65 33 20 64  est.db.sqlite3 d
0b30: 62 20 74 65 73 74 2e 64 62 0a 64 6f 5f 65 78 65  b test.db.do_exe
0b40: 63 73 71 6c 5f 74 65 73 74 20 33 30 30 20 7b 0a  csql_test 300 {.
0b50: 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61    PRAGMA auto_va
0b60: 63 75 75 6d 20 3d 20 30 3b 0a 20 20 50 52 41 47  cuum = 0;.  PRAG
0b70: 4d 41 20 70 61 67 65 5f 73 69 7a 65 3d 38 31 39  MA page_size=819
0b80: 32 3b 0a 20 20 50 52 41 47 4d 41 20 6a 6f 75 72  2;.  PRAGMA jour
0b90: 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 3b 0a 20 20  nal_mode=WAL;.  
0ba0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
0bb0: 61 2c 62 29 3b 0a 20 20 57 49 54 48 20 52 45 43  a,b);.  WITH REC
0bc0: 55 52 53 49 56 45 20 63 28 78 29 20 41 53 20 28  URSIVE c(x) AS (
0bd0: 56 41 4c 55 45 53 28 31 29 20 55 4e 49 4f 4e 20  VALUES(1) UNION 
0be0: 41 4c 4c 20 53 45 4c 45 43 54 20 78 2b 31 20 46  ALL SELECT x+1 F
0bf0: 52 4f 4d 20 63 20 57 48 45 52 45 20 78 3c 32 30  ROM c WHERE x<20
0c00: 29 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ).    INSERT INT
0c10: 4f 20 74 31 28 61 2c 62 29 20 53 45 4c 45 43 54  O t1(a,b) SELECT
0c20: 20 78 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31   x, randomblob(1
0c30: 33 30 30 29 20 46 52 4f 4d 20 63 3b 0a 20 20 43  300) FROM c;.  C
0c40: 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 61 20  REATE INDEX t1a 
0c50: 4f 4e 20 74 31 28 61 29 3b 0a 20 20 43 52 45 41  ON t1(a);.  CREA
0c60: 54 45 20 49 4e 44 45 58 20 74 31 62 20 4f 4e 20  TE INDEX t1b ON 
0c70: 74 31 28 62 29 3b 0a 20 20 53 45 4c 45 43 54 20  t1(b);.  SELECT 
0c80: 73 75 6d 28 61 29 2c 20 73 75 6d 28 6c 65 6e 67  sum(a), sum(leng
0c90: 74 68 28 62 29 29 20 46 52 4f 4d 20 74 31 3b 0a  th(b)) FROM t1;.
0ca0: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
0cb0: 74 79 5f 63 68 65 63 6b 3b 0a 20 20 50 52 41 47  ty_check;.  PRAG
0cc0: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3b  MA journal_mode;
0cd0: 0a 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 73  .  PRAGMA page_s
0ce0: 69 7a 65 3b 0a 20 20 50 52 41 47 4d 41 20 70 61  ize;.  PRAGMA pa
0cf0: 67 65 5f 63 6f 75 6e 74 3b 0a 7d 20 7b 77 61 6c  ge_count;.} {wal
0d00: 20 32 31 30 20 32 36 30 30 30 20 6f 6b 20 77 61   210 26000 ok wa
0d10: 6c 20 38 31 39 32 20 31 32 7d 0a 73 71 6c 69 74  l 8192 12}.sqlit
0d20: 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 64  e3 db2 test.db.d
0d30: 6f 5f 74 65 73 74 20 33 31 30 20 7b 0a 20 20 65  o_test 310 {.  e
0d40: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
0d50: 45 43 54 20 73 75 6d 28 61 29 2c 20 73 75 6d 28  ECT sum(a), sum(
0d60: 6c 65 6e 67 74 68 28 62 29 29 20 46 52 4f 4d 20  length(b)) FROM 
0d70: 74 31 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 69  t1;.    PRAGMA i
0d80: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a  ntegrity_check;.
0d90: 20 20 20 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e      PRAGMA journ
0da0: 61 6c 5f 6d 6f 64 65 3b 0a 20 20 20 20 50 52 41  al_mode;.    PRA
0db0: 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 3b 0a 20  GMA page_size;. 
0dc0: 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 63     PRAGMA page_c
0dd0: 6f 75 6e 74 3b 0a 20 20 7d 20 64 62 32 0a 7d 20  ount;.  } db2.} 
0de0: 7b 32 31 30 20 32 36 30 30 30 20 6f 6b 20 77 61  {210 26000 ok wa
0df0: 6c 20 38 31 39 32 20 31 32 7d 0a 0a 23 20 43 6f  l 8192 12}..# Co
0e00: 72 72 75 70 74 20 74 68 65 20 64 61 74 61 62 61  rrupt the databa
0e10: 73 65 20 61 67 61 69 6e 0a 73 71 6c 69 74 65 33  se again.sqlite3
0e20: 5f 64 62 5f 63 6f 6e 66 69 67 20 64 62 20 44 45  _db_config db DE
0e30: 46 45 4e 53 49 56 45 20 30 0a 64 6f 5f 63 61 74  FENSIVE 0.do_cat
0e40: 63 68 73 71 6c 5f 74 65 73 74 20 33 32 30 20 7b  chsql_test 320 {
0e50: 0a 20 20 55 50 44 41 54 45 20 73 71 6c 69 74 65  .  UPDATE sqlite
0e60: 5f 64 62 70 61 67 65 20 53 45 54 20 64 61 74 61  _dbpage SET data
0e70: 3d 72 61 6e 64 6f 6d 62 6c 6f 62 28 38 31 39 32  =randomblob(8192
0e80: 29 20 57 48 45 52 45 20 70 67 6e 6f 3d 31 3b 0a  ) WHERE pgno=1;.
0e90: 20 20 50 52 41 47 4d 41 20 71 75 69 63 6b 5f 63    PRAGMA quick_c
0ea0: 68 65 63 6b 0a 7d 20 7b 31 20 7b 66 69 6c 65 20  heck.} {1 {file 
0eb0: 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  is not a databas
0ec0: 65 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 33 33 30  e}}..do_test 330
0ed0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
0ee0: 20 20 20 20 50 52 41 47 4d 41 20 71 75 69 63 6b      PRAGMA quick
0ef0: 5f 63 68 65 63 6b 0a 20 20 7d 20 64 62 32 0a 7d  _check.  } db2.}
0f00: 20 7b 31 20 7b 66 69 6c 65 20 69 73 20 6e 6f 74   {1 {file is not
0f10: 20 61 20 64 61 74 61 62 61 73 65 7d 7d 0a 0a 64   a database}}..d
0f20: 62 32 20 63 61 63 68 65 20 66 6c 75 73 68 20 20  b2 cache flush  
0f30: 20 20 20 20 20 20 20 3b 23 20 52 65 71 75 69 72         ;# Requir
0f40: 65 64 20 62 79 20 70 65 72 6d 75 74 61 74 69 6f  ed by permutatio
0f50: 6e 20 22 70 72 65 70 61 72 65 22 2e 0a 0a 23 20  n "prepare"...# 
0f60: 52 65 73 65 74 20 74 68 65 20 64 61 74 61 62 61  Reset the databa
0f70: 73 65 20 79 65 74 20 61 67 61 69 6e 2e 20 20 56  se yet again.  V
0f80: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 70  erify that the p
0f90: 61 67 65 20 73 69 7a 65 20 61 6e 64 0a 23 20 6a  age size and.# j
0fa0: 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 61 72 65 20  ournal mode are 
0fb0: 70 72 65 73 65 72 76 65 64 2e 0a 23 0a 64 6f 5f  preserved..#.do_
0fc0: 74 65 73 74 20 34 30 30 20 7b 0a 20 20 73 71 6c  test 400 {.  sql
0fd0: 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 20 64  ite3_db_config d
0fe0: 62 20 52 45 53 45 54 5f 44 42 20 31 0a 20 20 64  b RESET_DB 1.  d
0ff0: 62 20 65 76 61 6c 20 56 41 43 55 55 4d 0a 20 20  b eval VACUUM.  
1000: 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69  sqlite3_db_confi
1010: 67 20 64 62 20 52 45 53 45 54 5f 44 42 20 30 0a  g db RESET_DB 0.
1020: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
1030: 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f    PRAGMA page_co
1040: 75 6e 74 3b 0a 20 20 20 20 20 50 52 41 47 4d 41  unt;.     PRAGMA
1050: 20 70 61 67 65 5f 73 69 7a 65 3b 0a 20 20 20 20   page_size;.    
1060: 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f   PRAGMA journal_
1070: 6d 6f 64 65 3b 0a 20 20 20 20 20 50 52 41 47 4d  mode;.     PRAGM
1080: 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 3b 0a 20  A quick_check;. 
1090: 20 7d 20 64 62 32 0a 7d 20 7b 30 20 7b 31 20 38   } db2.} {0 {1 8
10a0: 31 39 32 20 77 61 6c 20 6f 6b 7d 7d 0a 64 62 32  192 wal ok}}.db2
10b0: 20 63 6c 6f 73 65 0a 0a 23 20 52 65 73 65 74 20   close..# Reset 
10c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 79 65 74  the database yet
10d0: 20 61 67 61 69 6e 2e 20 54 68 69 73 20 74 69 6d   again. This tim
10e0: 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66  e immediately af
10f0: 74 65 72 20 69 74 20 69 73 20 63 6c 6f 73 65 64  ter it is closed
1100: 0a 23 20 61 6e 64 20 72 65 6f 70 65 6e 65 64 2e  .# and reopened.
1110: 20 53 6f 20 74 68 61 74 20 74 68 65 20 56 41 43   So that the VAC
1120: 55 55 4d 20 69 73 20 74 68 65 20 66 69 72 73 74  UUM is the first
1130: 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 2e 0a   statement run..
1140: 23 0a 64 62 20 63 6c 6f 73 65 0a 73 71 6c 69 74  #.db close.sqlit
1150: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 64 6f  e3 db test.db.do
1160: 5f 74 65 73 74 20 35 30 30 20 7b 0a 20 20 73 71  _test 500 {.  sq
1170: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 5b  lite3_finalize [
1180: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 70 72 65  .    sqlite3_pre
1190: 70 61 72 65 20 64 62 20 22 53 45 4c 45 43 54 20  pare db "SELECT 
11a0: 31 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  1 FROM sqlite_ma
11b0: 73 74 65 72 20 4c 49 4d 49 54 20 31 22 20 2d 31  ster LIMIT 1" -1
11c0: 20 74 61 69 6c 0a 20 20 5d 0a 20 20 73 71 6c 69   tail.  ].  sqli
11d0: 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 20 64 62  te3_db_config db
11e0: 20 52 45 53 45 54 5f 44 42 20 31 0a 20 20 64 62   RESET_DB 1.  db
11f0: 20 65 76 61 6c 20 56 41 43 55 55 4d 0a 20 20 73   eval VACUUM.  s
1200: 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67  qlite3_db_config
1210: 20 64 62 20 52 45 53 45 54 5f 44 42 20 30 0a 20   db RESET_DB 0. 
1220: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
1230: 74 2e 64 62 0a 20 20 63 61 74 63 68 73 71 6c 20  t.db.  catchsql 
1240: 7b 0a 20 20 20 20 20 50 52 41 47 4d 41 20 70 61  {.     PRAGMA pa
1250: 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 20 50  ge_count;.     P
1260: 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 3b  RAGMA page_size;
1270: 0a 20 20 20 20 20 50 52 41 47 4d 41 20 6a 6f 75  .     PRAGMA jou
1280: 72 6e 61 6c 5f 6d 6f 64 65 3b 0a 20 20 20 20 20  rnal_mode;.     
1290: 50 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68 65  PRAGMA quick_che
12a0: 63 6b 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b 30  ck;.  } db2.} {0
12b0: 20 7b 31 20 38 31 39 32 20 77 61 6c 20 6f 6b 7d   {1 8192 wal ok}
12c0: 7d 0a 64 62 32 20 63 6c 6f 73 65 0a 0a 23 2d 2d  }.db2 close..#--
12d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1310: 2d 2d 2d 2d 2d 2d 2d 0a 72 65 73 65 74 5f 64 62  -------.reset_db
1320: 0a 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73  .sqlite3 db2 tes
1330: 74 2e 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  t.db.do_execsql_
1340: 74 65 73 74 20 36 30 30 20 7b 0a 20 20 50 52 41  test 600 {.  PRA
1350: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
1360: 20 3d 20 77 61 6c 3b 0a 20 20 43 52 45 41 54 45   = wal;.  CREATE
1370: 20 54 41 42 4c 45 20 74 31 28 61 29 3b 0a 20 20   TABLE t1(a);.  
1380: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1390: 41 4c 55 45 53 28 31 29 2c 20 28 32 29 2c 20 28  ALUES(1), (2), (
13a0: 33 29 2c 20 28 34 29 3b 0a 7d 20 7b 77 61 6c 7d  3), (4);.} {wal}
13b0: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
13c0: 74 20 2d 64 62 20 64 62 32 20 36 31 30 20 7b 0a  t -db db2 610 {.
13d0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
13e0: 74 31 0a 7d 20 7b 31 20 32 20 33 20 34 7d 0a 0a  t1.} {1 2 3 4}..
13f0: 64 6f 5f 74 65 73 74 20 36 32 30 20 7b 0a 20 20  do_test 620 {.  
1400: 73 65 74 20 72 65 73 20 5b 6c 69 73 74 5d 0a 20  set res [list]. 
1410: 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43   db2 eval {SELEC
1420: 54 20 61 20 46 52 4f 4d 20 74 31 7d 20 7b 0a 20  T a FROM t1} {. 
1430: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24     lappend res $
1440: 61 0a 20 20 20 20 69 66 20 7b 24 61 3d 3d 33 7d  a.    if {$a==3}
1450: 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   {.      sqlite3
1460: 5f 64 62 5f 63 6f 6e 66 69 67 20 64 62 20 52 45  _db_config db RE
1470: 53 45 54 5f 44 42 20 31 0a 20 20 20 20 20 20 64  SET_DB 1.      d
1480: 62 20 65 76 61 6c 20 56 41 43 55 55 4d 0a 20 20  b eval VACUUM.  
1490: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 63      sqlite3_db_c
14a0: 6f 6e 66 69 67 20 64 62 20 52 45 53 45 54 5f 44  onfig db RESET_D
14b0: 42 20 30 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  B 0.    }.  }.. 
14c0: 20 73 65 74 20 72 65 73 0a 7d 20 7b 31 20 32 20   set res.} {1 2 
14d0: 33 20 34 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c  3 4}..do_execsql
14e0: 5f 74 65 73 74 20 2d 64 62 20 64 62 32 20 36 33  _test -db db2 63
14f0: 30 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  0 {.  SELECT * F
1500: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
1510: 72 0a 7d 20 7b 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  r.} {}..#-------
1520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1560: 2d 2d 0a 64 62 32 20 63 6c 6f 73 65 0a 72 65 73  --.db2 close.res
1570: 65 74 5f 64 62 0a 0a 64 6f 5f 65 78 65 63 73 71  et_db..do_execsq
1580: 6c 5f 74 65 73 74 20 37 30 30 20 7b 0a 20 20 50  l_test 700 {.  P
1590: 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 3d  RAGMA page_size=
15a0: 35 31 32 3b 0a 20 20 50 52 41 47 4d 41 20 61 75  512;.  PRAGMA au
15b0: 74 6f 5f 76 61 63 75 75 6d 20 3d 20 30 3b 0a 20  to_vacuum = 0;. 
15c0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
15d0: 28 61 2c 62 2c 63 29 3b 0a 20 20 43 52 45 41 54  (a,b,c);.  CREAT
15e0: 45 20 49 4e 44 45 58 20 74 31 61 20 4f 4e 20 74  E INDEX t1a ON t
15f0: 31 28 61 29 3b 0a 20 20 43 52 45 41 54 45 20 49  1(a);.  CREATE I
1600: 4e 44 45 58 20 74 31 62 63 20 4f 4e 20 74 31 28  NDEX t1bc ON t1(
1610: 62 2c 63 29 3b 0a 20 20 57 49 54 48 20 52 45 43  b,c);.  WITH REC
1620: 55 52 53 49 56 45 20 63 28 78 29 20 41 53 20 28  URSIVE c(x) AS (
1630: 56 41 4c 55 45 53 28 31 29 20 55 4e 49 4f 4e 20  VALUES(1) UNION 
1640: 41 4c 4c 20 53 45 4c 45 43 54 20 78 2b 31 20 46  ALL SELECT x+1 F
1650: 52 4f 4d 20 63 20 57 48 45 52 45 20 78 3c 31 30  ROM c WHERE x<10
1660: 29 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ).    INSERT INT
1670: 4f 20 74 31 28 61 2c 62 2c 63 29 20 53 45 4c 45  O t1(a,b,c) SELE
1680: 43 54 20 78 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62  CT x, randomblob
1690: 28 31 30 30 29 2c 72 61 6e 64 6f 6d 62 6c 6f 62  (100),randomblob
16a0: 28 31 30 30 29 20 46 52 4f 4d 20 63 3b 0a 20 20  (100) FROM c;.  
16b0: 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e  PRAGMA page_coun
16c0: 74 3b 0a 20 20 50 52 41 47 4d 41 20 69 6e 74 65  t;.  PRAGMA inte
16d0: 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a 7d 20 7b  grity_check;.} {
16e0: 31 39 20 6f 6b 7d 0a 0a 69 66 20 7b 5b 6e 6f 6e  19 ok}..if {[non
16f0: 7a 65 72 6f 5f 72 65 73 65 72 76 65 64 5f 62 79  zero_reserved_by
1700: 74 65 73 5d 7d 20 7b 0a 20 20 66 69 6e 69 73 68  tes]} {.  finish
1710: 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d  _test.  return.}
1720: 0a 0a 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e  ..sqlite3_db_con
1730: 66 69 67 20 64 62 20 44 45 46 45 4e 53 49 56 45  fig db DEFENSIVE
1740: 20 30 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65   0.do_execsql_te
1750: 73 74 20 37 31 30 20 7b 0a 20 20 55 50 44 41 54  st 710 {.  UPDAT
1760: 45 20 73 71 6c 69 74 65 5f 64 62 70 61 67 65 20  E sqlite_dbpage 
1770: 53 45 54 20 64 61 74 61 3d 0a 20 20 20 20 58 27  SET data=.    X'
1780: 35 33 35 31 34 43 36 39 37 34 36 35 32 30 36 36  53514C6974652066
1790: 36 46 37 32 36 44 36 31 37 34 32 30 33 33 30 30  6F726D6174203300
17a0: 30 32 30 30 30 33 30 31 30 30 34 30 32 30 32 30  0200030100402020
17b0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 33  0000000000000013
17c0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
17d0: 30 30 30 30 30 30 30 33 30 30 30 30 30 30 30 34  0000000300000004
17e0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
17f0: 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 30  0000000100000000
1800: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1810: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1820: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1830: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1840: 30 30 30 30 30 30 30 30 30 44 30 30 30 30 30 30  000000000D000000
1850: 30 33 30 31 37 43 30 30 30 31 44 38 30 31 41 43  03017C0001D801AC
1860: 30 31 37 43 30 30 30 30 30 30 30 30 30 30 30 30  017C000000000000
1870: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1880: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1890: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
18a0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
18b0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
18c0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
18d0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
18e0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
18f0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1900: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1910: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1920: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1930: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1940: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1950: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1960: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1970: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1980: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1990: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
19a0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
19b0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
19c0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
19d0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
19e0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
19f0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1a00: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1a10: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1a20: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1a30: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1a40: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1a50: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1a60: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
1a70: 30 30 30 30 30 30 30 30 32 45 30 33 30 36 31 37  000000002E030617
1a80: 31 35 31 31 30 31 34 35 36 39 36 45 36 34 36 35  15110145696E6465
1a90: 37 38 37 34 33 31 36 32 36 33 37 34 33 31 30 34  7874316263743104
1aa0: 34 33 35 32 34 35 34 31 35 34 34 35 32 30 34 39  4352454154452049
1ab0: 34 45 34 34 34 35 35 38 32 30 37 34 33 31 36 32  4E44455820743162
1ac0: 36 33 32 30 34 46 34 45 32 30 37 34 33 31 32 38  63204F4E20743128
1ad0: 36 32 32 43 36 33 32 39 32 41 30 32 30 36 31 37  622C63292A020617
1ae0: 31 33 31 31 30 31 33 46 36 39 36 45 36 34 36 35  1311013F696E6465
1af0: 37 38 37 34 33 31 36 31 37 34 33 31 30 33 34 33  7874316174310343
1b00: 35 32 34 35 34 31 35 34 34 35 32 30 34 39 34 45  524541544520494E
1b10: 34 34 34 35 35 38 32 30 37 34 33 31 36 31 32 30  4445582074316120
1b20: 34 46 34 45 32 30 37 34 33 31 32 38 36 31 32 39  4F4E207431286129
1b30: 32 36 30 31 30 36 31 37 31 31 31 31 30 31 33 39  2601061711110139
1b40: 37 34 36 31 36 32 36 43 36 35 37 34 33 31 37 34  7461626C65743174
1b50: 33 31 30 32 34 33 35 32 34 35 34 31 35 34 34 35  3102435245415445
1b60: 32 30 35 34 34 31 34 32 34 43 34 35 32 30 37 34  205441424C452074
1b70: 33 31 32 38 36 31 32 43 36 32 32 43 36 33 32 39  3128612C622C6329
1b80: 27 20 57 48 45 52 45 20 70 67 6e 6f 3d 31 3b 0a  ' WHERE pgno=1;.
1b90: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
1ba0: 73 74 20 37 32 30 20 7b 0a 20 20 50 52 41 47 4d  st 720 {.  PRAGM
1bb0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
1bc0: 6b 3b 0a 7d 20 7b 6f 6b 7d 0a 0a 64 6f 5f 74 65  k;.} {ok}..do_te
1bd0: 73 74 20 37 33 30 20 7b 0a 20 20 73 71 6c 69 74  st 730 {.  sqlit
1be0: 65 33 5f 64 62 5f 63 6f 6e 66 69 67 20 64 62 20  e3_db_config db 
1bf0: 52 45 53 45 54 5f 44 42 20 31 0a 20 20 64 62 20  RESET_DB 1.  db 
1c00: 65 76 61 6c 20 56 41 43 55 55 4d 0a 20 20 73 71  eval VACUUM.  sq
1c10: 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 20  lite3_db_config 
1c20: 64 62 20 52 45 53 45 54 5f 44 42 20 30 0a 7d 20  db RESET_DB 0.} 
1c30: 7b 30 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  {0}..do_execsql_
1c40: 74 65 73 74 20 37 34 30 20 7b 0a 20 20 50 52 41  test 740 {.  PRA
1c50: 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a  GMA page_count;.
1c60: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
1c70: 74 79 5f 63 68 65 63 6b 3b 0a 7d 20 7b 31 20 6f  ty_check;.} {1 o
1c80: 6b 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a  k}..finish_test.