SQLite4
Hex Artifact Content
Not logged in

Artifact 6d3ab309a33ec824c2e5389ab26e7920aedf77bb:


0000: 23 20 32 30 31 30 20 4f 63 74 6f 62 65 72 20 33  # 2010 October 3
0010: 30 0a 23 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  0.#.#    May you
0020: 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74   do good and not
0030: 20 65 76 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20   evil..#    May 
0040: 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69 76 65  you find forgive
0050: 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73 65 6c  ness for yoursel
0060: 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20 6f 74  f and forgive ot
0070: 68 65 72 73 2e 0a 23 20 20 20 20 4d 61 79 20 79  hers..#    May y
0080: 6f 75 20 73 68 61 72 65 20 66 72 65 65 6c 79 2c  ou share freely,
0090: 20 6e 65 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f   never taking mo
00a0: 72 65 20 74 68 61 6e 20 79 6f 75 20 67 69 76 65  re than you give
00b0: 2e 0a 23 0a 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..#.#***********
00c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
00d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
00e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54  ************.# T
0100: 65 73 74 20 74 68 61 74 20 74 68 65 20 46 54 53  est that the FTS
0110: 33 20 65 78 74 65 6e 73 69 6f 6e 20 64 6f 65 73  3 extension does
0120: 20 6e 6f 74 20 63 72 61 73 68 20 77 68 65 6e 20   not crash when 
0130: 69 74 20 65 6e 63 6f 75 6e 74 65 72 73 20 61 0a  it encounters a.
0140: 23 20 63 6f 72 72 75 70 74 20 64 61 74 61 20 73  # corrupt data s
0150: 74 72 75 63 74 75 72 65 20 6f 6e 20 64 69 73 6b  tructure on disk
0160: 2e 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72  ..#..set testdir
0170: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24   [file dirname $
0180: 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74  argv0].source $t
0190: 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63  estdir/tester.tc
01a0: 6c 0a 0a 23 20 49 66 20 53 51 4c 49 54 45 34 5f  l..# If SQLITE4_
01b0: 45 4e 41 42 4c 45 5f 46 54 53 33 20 69 73 20 6e  ENABLE_FTS3 is n
01c0: 6f 74 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69 74  ot defined, omit
01d0: 20 74 68 69 73 20 66 69 6c 65 2e 0a 69 66 63 61   this file..ifca
01e0: 70 61 62 6c 65 20 21 66 74 73 33 20 7b 20 66 69  pable !fts3 { fi
01f0: 6e 69 73 68 5f 74 65 73 74 20 3b 20 72 65 74 75  nish_test ; retu
0200: 72 6e 20 7d 0a 0a 73 65 74 20 3a 3a 74 65 73 74  rn }..set ::test
0210: 70 72 65 66 69 78 20 66 74 73 33 63 6f 72 72 75  prefix fts3corru
0220: 70 74 32 0a 0a 73 65 74 20 64 61 74 61 20 5b 6c  pt2..set data [l
0230: 69 73 74 5d 0a 6c 61 70 70 65 6e 64 20 64 61 74  ist].lappend dat
0240: 61 20 7b 2a 7d 7b 0a 20 20 20 22 61 6d 78 74 76  a {*}{.   "amxtv
0250: 6f 6f 20 61 64 71 77 72 6f 79 68 7a 20 61 75 71  oo adqwroyhz auq
0260: 20 61 69 74 68 74 69 72 20 61 76 6e 69 71 6e 75   aithtir avniqnu
0270: 79 6e 76 66 20 61 78 70 20 61 68 69 62 61 79 66  ynvf axp ahibayf
0280: 79 6e 69 67 20 61 67 62 69 63 70 6d 22 0a 20 20  ynig agbicpm".  
0290: 20 22 61 6a 64 74 65 62 73 20 61 6e 74 65 61 78   "ajdtebs anteax
02a0: 72 20 61 69 65 79 6e 65 6e 77 6d 64 20 61 77 70  r aieynenwmd awp
02b0: 6c 20 61 6c 6f 20 61 6b 78 63 72 77 6f 77 20 61  l alo akxcrwow a
02c0: 6f 78 66 74 67 65 20 61 6f 71 76 67 75 6c 22 0a  oxftge aoqvgul".
02d0: 20 20 20 22 61 6d 63 66 76 64 72 20 61 75 7a 20     "amcfvdr auz 
02e0: 61 70 75 20 61 65 62 65 6c 6d 20 61 68 75 78 79  apu aebelm ahuxy
02f0: 7a 20 61 71 63 20 61 73 79 61 66 64 62 20 61 67  z aqc asyafdb ag
0300: 75 6c 76 68 76 71 75 22 0a 20 20 20 22 61 70 65  ulvhvqu".   "ape
0310: 70 77 66 79 7a 20 61 7a 6b 68 64 76 6b 77 20 61  pwfyz azkhdvkw a
0320: 65 6e 79 65 6c 78 7a 62 6b 20 61 73 6c 6e 69 74  enyelxzbk aslnit
0330: 62 79 65 74 20 61 79 63 64 73 64 63 70 67 72 20  byet aycdsdcpgr 
0340: 61 71 7a 7a 64 62 63 20 61 67 66 69 20 61 78 6e  aqzzdbc agfi axn
0350: 79 70 79 64 6f 75 22 0a 20 20 20 22 61 61 71 72  ypydou".   "aaqr
0360: 7a 7a 63 6d 20 61 70 63 78 64 78 6f 20 61 74 75  zzcm apcxdxo atu
0370: 6d 6c 74 7a 6a 20 61 65 76 76 69 76 6f 20 61 6f  mltzj aevvivo ao
0380: 64 6b 6e 6f 66 74 20 61 71 6f 79 79 74 6f 7a 20  dknoft aqoyytoz 
0390: 61 6c 6f 62 78 20 61 70 6c 64 74 22 0a 20 20 20  alobx apldt".   
03a0: 22 61 64 6a 6c 6c 78 6c 68 6e 6d 6a 20 61 69 75  "adjllxlhnmj aiu
03b0: 68 76 75 6a 20 61 64 77 70 70 63 65 75 68 74 20  hvuj adwppceuht 
03c0: 61 74 76 6a 20 61 7a 72 73 61 6d 20 61 68 6b 6a  atvj azrsam ahkj
03d0: 71 64 68 6e 79 20 61 75 64 6c 71 78 72 20 61 6f  qdhny audlqxr ao
03e0: 74 67 63 64 22 0a 20 20 20 22 61 69 72 61 20 61  tgcd".   "aira a
03f0: 7a 66 6c 73 63 65 6f 73 20 61 77 6a 20 61 75 7a  zflsceos awj auz
0400: 62 6f 62 66 6b 63 20 61 77 6d 65 7a 70 6c 72 20  bobfkc awmezplr 
0410: 61 65 68 20 61 77 65 63 20 61 68 6e 64 78 6c 6d  aeh awec ahndxlm
0420: 76 22 0a 20 20 20 22 61 79 64 77 6e 69 65 64 20  v".   "aydwnied 
0430: 61 6c 6b 20 61 75 6f 61 70 20 61 67 69 68 79 71  alk auoap agihyq
0440: 65 69 78 20 61 79 6d 71 78 7a 61 6a 6e 6c 20 61  eix aymqxzajnl a
0450: 79 64 77 6e 69 65 64 20 61 6f 6a 6b 61 72 78 20  ydwnied aojkarx 
0460: 61 67 62 6f 22 0a 20 20 20 22 61 68 61 6a 73 6d  agbo".   "ahajsm
0470: 63 6c 20 61 6e 76 78 20 61 6d 64 68 6a 6d 20 61  cl anvx amdhjm a
0480: 6f 70 74 73 6a 20 61 67 75 67 7a 6a 6a 6d 20 61  optsj agugzjjm a
0490: 70 6b 65 76 6d 20 61 63 6e 6a 20 61 63 6a 67 22  pkevm acnj acjg"
04a0: 0a 20 20 20 22 61 6d 77 74 6b 77 20 61 6f 67 74  .   "amwtkw aogt
04b0: 74 62 79 6b 76 74 20 61 75 62 77 72 66 71 6e 62  tbykvt aubwrfqnb
04c0: 6a 66 20 61 6a 6f 77 20 61 67 73 6a 20 61 65 72  jf ajow agsj aer
04d0: 6b 71 7a 6a 64 71 73 74 20 61 6e 65 6e 6c 76 62  kqzjdqst anenlvb
04e0: 61 6c 6b 6e 20 61 72 66 61 6a 7a 7a 67 63 6b 78  alkn arfajzzgckx
04f0: 22 0a 20 20 20 22 61 64 71 71 71 6f 66 6b 6d 7a  ".   "adqqqofkmz
0500: 20 61 6d 6a 70 61 76 6a 75 68 77 20 61 71 67 65   amjpavjuhw aqge
0510: 68 67 6e 62 20 61 77 76 76 78 6c 62 74 71 7a 6e  hgnb awvvxlbtqzn
0520: 20 61 67 73 74 71 6b 6f 20 61 6b 6d 6b 7a 65 68   agstqko akmkzeh
0530: 79 68 20 61 74 61 67 7a 65 79 20 61 67 77 6a 61  yh atagzey agwja
0540: 22 0a 20 20 20 22 61 6d 61 67 20 61 68 65 20 61  ".   "amag ahe a
0550: 75 74 6b 6c 6c 79 77 68 72 20 61 76 6e 6b 20 61  utkllywhr avnk a
0560: 74 6d 74 20 61 6b 6e 20 61 6e 76 64 68 20 61 69  tmt akn anvdh ai
0570: 78 66 72 76 22 0a 20 20 20 22 61 71 64 79 65 72  xfrv".   "aqdyer
0580: 62 77 73 20 61 76 65 66 79 6b 6c 79 20 61 77 6c  bws avefykly awl
0590: 20 61 7a 61 64 75 6f 6a 67 7a 6f 20 61 6e 78 66   azaduojgzo anxf
05a0: 73 6d 77 20 61 78 70 74 20 61 62 67 62 76 6b 20  smw axpt abgbvk 
05b0: 61 74 69 22 0a 20 20 20 22 61 74 74 79 71 6b 77  ati".   "attyqkw
05c0: 7a 20 61 69 77 65 79 70 69 63 7a 75 6c 20 61 66  z aiweypiczul af
05d0: 79 20 61 73 69 74 61 71 62 63 7a 68 68 20 61 69  y asitaqbczhh ai
05e0: 74 78 69 73 69 7a 70 76 20 61 75 68 76 69 71 20  txisizpv auhviq 
05f0: 61 69 62 71 6c 20 61 6a 66 71 63 22 0a 20 20 20  aibql ajfqc".   
0600: 22 61 79 6c 7a 70 72 74 6d 74 61 20 61 69 75 65  "aylzprtmta aiue
0610: 6d 69 68 71 72 70 69 20 61 77 6c 75 76 67 73 77  mihqrpi awluvgsw
0620: 20 61 6d 70 62 75 79 20 61 78 6c 69 66 70 7a 66   ampbuy axlifpzf
0630: 71 72 20 61 65 6d 73 20 61 6f 61 78 77 61 64 73  qr aems aoaxwads
0640: 20 61 70 69 61 6e 66 6e 22 0a 20 20 20 22 61 6f   apianfn".   "ao
0650: 64 72 6b 69 6a 65 6c 71 20 61 63 64 62 20 61 61  drkijelq acdb aa
0660: 73 65 72 72 64 78 6d 20 61 71 79 61 73 67 6f 66  serrdxm aqyasgof
0670: 71 75 20 61 65 76 76 69 76 6f 20 61 66 69 20 61  qu aevvivo afi a
0680: 70 6d 77 75 20 61 65 6f 71 79 73 6c 22 0a 20 20  pmwu aeoqysl".  
0690: 20 22 61 6d 71 6e 6b 20 61 6e 6b 61 6f 74 6d 20   "amqnk ankaotm 
06a0: 61 79 66 79 20 61 6a 63 75 70 65 65 6f 63 20 61  ayfy ajcupeeoc a
06b0: 64 76 63 62 75 6b 61 6e 20 61 75 63 61 68 6c 77  dvcbukan aucahlw
06c0: 6e 79 6b 20 61 64 62 66 79 6f 20 61 7a 71 6a 70  nyk adbfyo azqjp
06d0: 65 61 6e 74 22 0a 20 20 20 22 61 66 63 7a 70 70  eant".   "afczpp
06e0: 20 61 73 71 72 73 20 61 68 73 6c 76 64 61 20 61   asqrs ahslvda a
06f0: 6b 68 6c 66 20 61 69 71 67 64 70 20 61 74 79 64  khlf aiqgdp atyd
0700: 20 61 7a 6e 75 67 6c 78 71 62 72 67 20 61 77 69   aznuglxqbrg awi
0710: 72 6e 64 72 68 22 0a 20 20 20 22 61 71 68 69 61  rndrh".   "aqhia
0720: 6a 70 20 61 6d 78 65 61 7a 62 20 61 73 78 75 65  jp amxeazb asxue
0730: 68 67 20 61 6b 6f 64 20 61 78 76 6f 6c 76 73 70  hg akod axvolvsp
0740: 20 61 67 63 7a 20 61 73 6d 6f 76 6d 6f 68 79 20   agcz asmovmohy 
0750: 61 63 6d 71 61 22 0a 20 20 20 22 61 76 76 6f 6d  acmqa".   "avvom
0760: 76 20 61 61 66 6d 73 20 61 73 68 75 61 65 63 20  v aafms ashuaec 
0770: 61 72 65 76 78 20 61 75 64 74 71 20 61 6c 72 77  arevx audtq alrw
0780: 71 68 6a 76 61 6f 20 61 76 67 73 67 70 67 20 61  qhjvao avgsgpg a
0790: 6a 62 72 63 74 70 73 65 6c 22 0a 20 20 20 22 61  jbrctpsel".   "a
07a0: 74 78 6f 69 72 72 20 61 79 6f 70 62 6f 6f 62 71  txoirr ayopboobq
07b0: 64 75 20 61 6a 75 6e 6e 74 75 61 20 61 72 68 20  du ajunntua arh 
07c0: 61 65 72 6e 69 6d 78 69 64 20 61 69 70 6c 6a 64  aernimxid aipljd
07d0: 61 20 61 67 6c 6f 20 61 65 66 6b 22 0a 20 20 20  a aglo aefk".   
07e0: 22 61 6f 6e 78 66 20 61 63 6d 6e 6e 6b 6e 61 20  "aonxf acmnnkna 
07f0: 61 62 67 76 69 61 73 77 65 20 61 75 6c 76 63 62  abgviaswe aulvcb
0800: 76 20 61 78 70 20 61 70 65 6d 67 61 6b 70 7a 6f  v axp apemgakpzo
0810: 20 61 69 62 71 6c 20 61 63 69 6f 61 69 64 22 0a   aibql acioaid".
0820: 20 20 20 22 61 78 6f 20 61 6c 72 77 71 68 6a 76     "axo alrwqhjv
0830: 61 6f 20 61 79 71 6f 75 6e 66 74 64 7a 6c 20 61  ao ayqounftdzl a
0840: 7a 6d 6f 61 6b 64 79 68 20 61 70 61 6a 7a 65 20  zmoakdyh apajze 
0850: 61 6a 6b 20 61 72 74 76 79 20 61 70 78 69 61 6d  ajk artvy apxiam
0860: 79 22 0a 20 20 20 22 61 79 6a 61 66 73 72 61 7a  y".   "ayjafsraz
0870: 20 61 64 64 6a 6a 20 61 67 73 6a 20 61 73 65 6a   addjj agsj asej
0880: 74 7a 69 71 77 73 20 61 63 61 74 76 68 65 67 75  tziqws acatvhegu
0890: 20 61 6f 78 64 6a 71 62 6c 73 76 76 20 61 65 6b   aoxdjqblsvv aek
08a0: 64 6d 6d 62 73 20 61 61 6f 62 65 22 0a 20 20 20  dmmbs aaobe".   
08b0: 22 61 62 6a 6a 76 7a 75 62 6b 77 74 20 61 6c 63  "abjjvzubkwt alc
08c0: 7a 76 20 61 74 69 20 61 77 7a 20 61 75 79 78 67  zv ati awz auyxg
08d0: 63 78 65 62 20 61 79 6d 6a 6f 79 6d 20 61 6e 71  cxeb aymjoym anq
08e0: 6f 75 6b 70 72 74 79 74 20 61 74 77 66 68 70 6d  oukprtyt atwfhpm
08f0: 62 6f 6f 68 22 0a 20 20 20 22 61 6a 66 71 7a 20  booh".   "ajfqz 
0900: 61 65 74 68 6c 67 69 72 20 61 63 6c 63 78 20 61  aethlgir aclcx a
0910: 6f 77 6c 79 76 65 74 62 79 20 61 70 72 6f 71 6d  owlyvetby aproqm
0920: 20 61 66 6a 6c 71 74 6b 76 20 61 6e 65 62 66 79   afjlqtkv anebfy
0930: 20 61 6b 7a 72 63 70 66 72 72 76 77 22 0a 20 20   akzrcpfrrvw".  
0940: 20 22 61 6f 6c 65 64 66 6f 74 6d 20 61 69 77 6c   "aoledfotm aiwl
0950: 66 6d 20 61 65 65 6a 6c 61 65 6a 20 61 6e 7a 20  fm aeejlaej anz 
0960: 61 62 67 62 76 6b 20 61 6b 74 66 6e 20 61 61 79  abgbvk aktfn aay
0970: 6f 68 20 61 6e 70 79 77 67 64 76 67 7a 22 0a 20  oh anpywgdvgz". 
0980: 20 20 22 61 63 76 6d 6c 64 67 75 6c 64 20 61 73    "acvmldguld as
0990: 64 76 7a 20 61 71 62 20 61 65 6f 6d 73 79 7a 79  dvz aqb aeomsyzy
09a0: 75 20 61 67 67 79 6c 68 70 72 62 64 7a 20 61 73  u aggylhprbdz as
09b0: 72 66 6b 77 7a 20 61 75 69 70 79 62 70 73 6e 20  rfkwz auipybpsn 
09c0: 61 67 73 6e 73 7a 7a 66 62 22 0a 7d 0a 0a 64 6f  agsnszzfb".}..do
09d0: 5f 74 65 73 74 20 66 74 73 33 63 6f 72 72 75 70  _test fts3corrup
09e0: 74 32 2d 31 2e 30 20 7b 0a 20 20 65 78 65 63 73  t2-1.0 {.  execs
09f0: 71 6c 20 42 45 47 49 4e 0a 20 20 65 78 65 63 73  ql BEGIN.  execs
0a00: 71 6c 20 7b 20 43 52 45 41 54 45 20 56 49 52 54  ql { CREATE VIRT
0a10: 55 41 4c 20 54 41 42 4c 45 20 74 32 20 55 53 49  UAL TABLE t2 USI
0a20: 4e 47 20 46 54 53 33 28 61 2c 20 62 29 3b 20 7d  NG FTS3(a, b); }
0a30: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53  .  execsql { INS
0a40: 45 52 54 20 49 4e 54 4f 20 74 32 28 74 32 29 20  ERT INTO t2(t2) 
0a50: 56 41 4c 55 45 53 28 27 6e 6f 64 65 73 69 7a 65  VALUES('nodesize
0a60: 3d 33 32 27 29 20 7d 0a 20 20 66 6f 72 65 61 63  =32') }.  foreac
0a70: 68 20 64 20 24 64 61 74 61 20 7b 0a 20 20 20 20  h d $data {.    
0a80: 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54  execsql { INSERT
0a90: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
0aa0: 24 64 2c 20 24 64 29 20 7d 0a 20 20 7d 0a 20 20  $d, $d) }.  }.  
0ab0: 65 78 65 63 73 71 6c 20 43 4f 4d 4d 49 54 0a 20  execsql COMMIT. 
0ac0: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
0ad0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
0ae0: 74 32 5f 73 65 67 6d 65 6e 74 73 20 7d 0a 7d 20  t2_segments }.} 
0af0: 7b 31 36 33 7d 0a 0a 70 72 6f 63 20 73 65 74 5f  {163}..proc set_
0b00: 62 79 74 65 20 7b 62 6c 6f 62 20 62 79 74 65 20  byte {blob byte 
0b10: 76 61 6c 7d 20 7b 0a 20 20 62 69 6e 61 72 79 20  val} {.  binary 
0b20: 66 6f 72 6d 61 74 20 61 2a 63 61 2a 20 20 20 20  format a*ca*    
0b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b40: 20 20 20 20 20 5c 0a 20 20 20 20 20 20 5b 73 74       \.      [st
0b50: 72 69 6e 67 20 72 61 6e 67 65 20 24 62 6c 6f 62  ring range $blob
0b60: 20 30 20 5b 65 78 70 72 20 24 62 79 74 65 2d 31   0 [expr $byte-1
0b70: 5d 5d 20 20 20 5c 0a 20 20 20 20 20 20 24 76 61  ]]   \.      $va
0b80: 6c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l               
0b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ba0: 20 20 20 20 20 5c 0a 20 20 20 20 20 20 5b 73 74       \.      [st
0bb0: 72 69 6e 67 20 72 61 6e 67 65 20 24 62 6c 6f 62  ring range $blob
0bc0: 20 5b 65 78 70 72 20 24 62 79 74 65 2b 31 5d 20   [expr $byte+1] 
0bd0: 65 6e 64 5d 20 5c 0a 7d 0a 0a 73 65 74 20 74 6e  end] \.}..set tn
0be0: 20 30 0a 73 65 74 20 63 20 32 35 36 0a 66 6f 72   0.set c 256.for
0bf0: 65 61 63 68 20 7b 72 6f 77 69 64 20 73 7a 20 62  each {rowid sz b
0c00: 6c 6f 62 7d 20 5b 0a 20 20 64 62 20 65 76 61 6c  lob} [.  db eval
0c10: 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20   {SELECT rowid, 
0c20: 6c 65 6e 67 74 68 28 62 6c 6f 63 6b 29 2c 20 62  length(block), b
0c30: 6c 6f 63 6b 20 46 52 4f 4d 20 74 32 5f 73 65 67  lock FROM t2_seg
0c40: 6d 65 6e 74 73 7d 0a 5d 20 7b 0a 20 20 69 6e 63  ments}.] {.  inc
0c50: 72 20 74 6e 0a 20 20 73 65 74 20 63 20 5b 65 78  r tn.  set c [ex
0c60: 70 72 20 28 28 24 63 2b 32 35 35 29 25 32 35 36  pr (($c+255)%256
0c70: 29 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  )].  for {set i 
0c80: 30 7d 20 7b 24 69 20 3c 20 24 73 7a 7d 20 7b 69  0} {$i < $sz} {i
0c90: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74  ncr i} {.    set
0ca0: 20 62 32 20 5b 73 65 74 5f 62 79 74 65 20 24 62   b2 [set_byte $b
0cb0: 6c 6f 62 20 24 69 20 24 63 5d 0a 20 20 20 20 65  lob $i $c].    e
0cc0: 78 65 63 73 71 6c 20 7b 20 55 50 44 41 54 45 20  xecsql { UPDATE 
0cd0: 74 32 5f 73 65 67 6d 65 6e 74 73 20 53 45 54 20  t2_segments SET 
0ce0: 62 6c 6f 63 6b 20 3d 20 24 62 32 20 57 48 45 52  block = $b2 WHER
0cf0: 45 20 72 6f 77 69 64 20 3d 20 24 72 6f 77 69 64  E rowid = $rowid
0d00: 20 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 66   }.    do_test f
0d10: 74 73 33 63 6f 72 72 75 70 74 32 2d 31 2e 24 74  ts3corrupt2-1.$t
0d20: 6e 2e 24 69 20 7b 0a 20 20 20 20 20 20 63 61 74  n.$i {.      cat
0d30: 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a  chsql { SELECT *
0d40: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 74   FROM t2 WHERE t
0d50: 32 20 4d 41 54 43 48 20 27 61 2a 27 20 7d 0a 20  2 MATCH 'a*' }. 
0d60: 20 20 20 20 20 73 65 74 20 7b 7d 20 7b 7d 0a 20       set {} {}. 
0d70: 20 20 20 7d 20 7b 7d 0a 20 20 7d 0a 20 20 65 78     } {}.  }.  ex
0d80: 65 63 73 71 6c 20 7b 20 55 50 44 41 54 45 20 74  ecsql { UPDATE t
0d90: 32 5f 73 65 67 6d 65 6e 74 73 20 53 45 54 20 62  2_segments SET b
0da0: 6c 6f 63 6b 20 3d 20 24 62 6c 6f 62 20 57 48 45  lock = $blob WHE
0db0: 52 45 20 72 6f 77 69 64 20 3d 20 24 72 6f 77 69  RE rowid = $rowi
0dc0: 64 20 7d 0a 7d 0a 0a 66 6f 72 65 61 63 68 20 63  d }.}..foreach c
0dd0: 20 7b 35 30 20 31 30 30 20 31 35 30 20 32 30 30   {50 100 150 200
0de0: 20 32 35 30 7d 20 7b 0a 20 20 66 6f 72 65 61 63   250} {.  foreac
0df0: 68 20 7b 72 6f 77 69 64 20 73 7a 20 62 6c 6f 62  h {rowid sz blob
0e00: 7d 20 5b 0a 20 20 20 20 64 62 20 65 76 61 6c 20  } [.    db eval 
0e10: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 6c  {SELECT rowid, l
0e20: 65 6e 67 74 68 28 72 6f 6f 74 29 2c 20 72 6f 6f  ength(root), roo
0e30: 74 20 46 52 4f 4d 20 74 32 5f 73 65 67 64 69 72  t FROM t2_segdir
0e40: 7d 0a 20 20 5d 20 7b 0a 20 20 20 20 69 6e 63 72  }.  ] {.    incr
0e50: 20 74 6e 0a 20 20 20 20 66 6f 72 20 7b 73 65 74   tn.    for {set
0e60: 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 73 7a 7d   i 0} {$i < $sz}
0e70: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20   {incr i} {.    
0e80: 20 20 73 65 74 20 62 32 20 5b 73 65 74 5f 62 79    set b2 [set_by
0e90: 74 65 20 24 62 6c 6f 62 20 24 69 20 24 63 5d 0a  te $blob $i $c].
0ea0: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20        execsql { 
0eb0: 55 50 44 41 54 45 20 74 32 5f 73 65 67 64 69 72  UPDATE t2_segdir
0ec0: 20 53 45 54 20 72 6f 6f 74 20 3d 20 24 62 32 20   SET root = $b2 
0ed0: 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 24 72  WHERE rowid = $r
0ee0: 6f 77 69 64 20 7d 0a 20 20 20 20 20 20 64 6f 5f  owid }.      do_
0ef0: 74 65 73 74 20 66 74 73 33 63 6f 72 72 75 70 74  test fts3corrupt
0f00: 32 2d 32 2e 24 63 2e 24 74 6e 2e 24 69 20 7b 0a  2-2.$c.$tn.$i {.
0f10: 20 20 20 20 20 20 20 20 63 61 74 63 68 73 71 6c          catchsql
0f20: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
0f30: 20 74 32 20 57 48 45 52 45 20 74 32 20 4d 41 54   t2 WHERE t2 MAT
0f40: 43 48 20 27 61 2a 27 20 7d 0a 20 20 20 20 20 20  CH 'a*' }.      
0f50: 20 20 73 65 74 20 7b 7d 20 7b 7d 0a 20 20 20 20    set {} {}.    
0f60: 20 20 7d 20 7b 7d 0a 20 20 20 20 7d 0a 20 20 20    } {}.    }.   
0f70: 20 65 78 65 63 73 71 6c 20 7b 20 55 50 44 41 54   execsql { UPDAT
0f80: 45 20 74 32 5f 73 65 67 64 69 72 20 53 45 54 20  E t2_segdir SET 
0f90: 72 6f 6f 74 20 3d 20 24 62 6c 6f 62 20 57 48 45  root = $blob WHE
0fa0: 52 45 20 72 6f 77 69 64 20 3d 20 24 72 6f 77 69  RE rowid = $rowi
0fb0: 64 20 7d 0a 20 20 7d 0a 7d 0a 0a 0a 0a 0a 0a 0a  d }.  }.}.......
0fc0: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.