/ Hex Artifact Content
Login

Artifact 24f676831acddd2f4056a598fd731a72c6311f49:


0000: 23 20 32 30 31 32 20 4a 75 6c 79 20 31 32 0a 23  # 2012 July 12.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  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 0a 23 0a 0a 73 65 74 20 74 65 73 74  ****.#..set test
0170: 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  dir [file dirnam
0180: 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65  e $argv0].source
0190: 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72   $testdir/tester
01a0: 2e 74 63 6c 0a 73 65 74 20 74 65 73 74 70 72 65  .tcl.set testpre
01b0: 66 69 78 20 73 70 65 6c 6c 66 69 78 0a 0a 69 66  fix spellfix..if
01c0: 63 61 70 61 62 6c 65 20 21 76 74 61 62 20 7b 20  capable !vtab { 
01d0: 66 69 6e 69 73 68 5f 74 65 73 74 20 3b 20 72 65  finish_test ; re
01e0: 74 75 72 6e 20 7d 0a 0a 6c 6f 61 64 5f 73 74 61  turn }..load_sta
01f0: 74 69 63 5f 65 78 74 65 6e 73 69 6f 6e 20 64 62  tic_extension db
0200: 20 73 70 65 6c 6c 66 69 78 20 6e 65 78 74 63 68   spellfix nextch
0210: 61 72 0a 0a 73 65 74 20 76 6f 63 61 62 20 7b 0a  ar..set vocab {.
0220: 72 61 62 62 69 20 72 61 62 62 69 74 20 72 61 62  rabbi rabbit rab
0230: 62 69 74 73 20 72 61 62 62 6c 65 20 72 61 62 69  bits rabble rabi
0240: 64 20 72 61 62 69 65 73 20 72 61 63 63 6f 6f 6e  d rabies raccoon
0250: 20 72 61 63 63 6f 6f 6e 73 20 72 61 63 65 20 72   raccoons race r
0260: 61 63 65 64 20 72 61 63 65 72 0a 72 61 63 65 72  aced racer.racer
0270: 73 20 72 61 63 65 73 20 72 61 63 65 74 72 61 63  s races racetrac
0280: 6b 20 72 61 63 69 61 6c 20 72 61 63 69 61 6c 6c  k racial raciall
0290: 79 20 72 61 63 69 6e 67 20 72 61 63 6b 20 72 61  y racing rack ra
02a0: 63 6b 65 64 20 72 61 63 6b 65 74 20 72 61 63 6b  cked racket rack
02b0: 65 74 65 65 72 0a 72 61 63 6b 65 74 65 65 72 69  eteer.racketeeri
02c0: 6e 67 20 72 61 63 6b 65 74 65 65 72 73 20 72 61  ng racketeers ra
02d0: 63 6b 65 74 73 20 72 61 63 6b 69 6e 67 20 72 61  ckets racking ra
02e0: 63 6b 73 20 72 61 64 61 72 20 72 61 64 61 72 73  cks radar radars
02f0: 20 72 61 64 69 61 6c 20 72 61 64 69 61 6c 6c 79   radial radially
0300: 0a 72 61 64 69 61 6e 20 72 61 64 69 61 6e 63 65  .radian radiance
0310: 20 72 61 64 69 61 6e 74 20 72 61 64 69 61 6e 74   radiant radiant
0320: 6c 79 20 72 61 64 69 61 74 65 20 72 61 64 69 61  ly radiate radia
0330: 74 65 64 20 72 61 64 69 61 74 65 73 20 72 61 64  ted radiates rad
0340: 69 61 74 69 6e 67 20 72 61 64 69 61 74 69 6f 6e  iating radiation
0350: 0a 72 61 64 69 61 74 69 6f 6e 73 20 72 61 64 69  .radiations radi
0360: 61 74 6f 72 20 72 61 64 69 61 74 6f 72 73 20 72  ator radiators r
0370: 61 64 69 63 61 6c 20 72 61 64 69 63 61 6c 6c 79  adical radically
0380: 20 72 61 64 69 63 61 6c 73 20 72 61 64 69 63 65   radicals radice
0390: 73 20 72 61 64 69 69 20 72 61 64 69 6f 0a 72 61  s radii radio.ra
03a0: 64 69 6f 61 63 74 69 76 65 20 72 61 64 69 6f 61  dioactive radioa
03b0: 73 74 72 6f 6e 6f 6d 79 20 72 61 64 69 6f 65 64  stronomy radioed
03c0: 20 72 61 64 69 6f 67 72 61 70 68 79 20 72 61 64   radiography rad
03d0: 69 6f 69 6e 67 20 72 61 64 69 6f 6c 6f 67 79 20  ioing radiology 
03e0: 72 61 64 69 6f 73 20 72 61 64 69 73 68 0a 72 61  radios radish.ra
03f0: 64 69 73 68 65 73 20 72 61 64 69 75 6d 20 72 61  dishes radium ra
0400: 64 69 75 73 20 72 61 64 69 78 20 72 61 64 6f 6e  dius radix radon
0410: 20 72 61 66 74 20 72 61 66 74 65 72 20 72 61 66   raft rafter raf
0420: 74 65 72 73 20 72 61 66 74 73 20 72 61 67 20 72  ters rafts rag r
0430: 61 67 65 20 72 61 67 65 64 0a 72 61 67 65 73 20  age raged.rages 
0440: 72 61 67 67 65 64 20 72 61 67 67 65 64 6c 79 20  ragged raggedly 
0450: 72 61 67 67 65 64 6e 65 73 73 20 72 61 67 69 6e  raggedness ragin
0460: 67 20 72 61 67 73 20 72 61 67 77 65 65 64 20 72  g rags ragweed r
0470: 61 69 64 20 72 61 69 64 65 64 20 72 61 69 64 65  aid raided raide
0480: 72 20 72 61 69 64 65 72 73 0a 72 61 69 64 69 6e  r raiders.raidin
0490: 67 20 72 61 69 64 73 20 72 61 69 6c 20 72 61 69  g raids rail rai
04a0: 6c 65 64 20 72 61 69 6c 65 72 20 72 61 69 6c 65  led railer raile
04b0: 72 73 20 72 61 69 6c 69 6e 67 20 72 61 69 6c 72  rs railing railr
04c0: 6f 61 64 20 72 61 69 6c 72 6f 61 64 65 64 20 72  oad railroaded r
04d0: 61 69 6c 72 6f 61 64 65 72 0a 72 61 69 6c 72 6f  ailroader.railro
04e0: 61 64 65 72 73 20 72 61 69 6c 72 6f 61 64 69 6e  aders railroadin
04f0: 67 20 72 61 69 6c 72 6f 61 64 73 20 72 61 69 6c  g railroads rail
0500: 73 20 72 61 69 6c 77 61 79 20 72 61 69 6c 77 61  s railway railwa
0510: 79 73 20 72 61 69 6d 65 6e 74 20 72 61 69 6e 20  ys raiment rain 
0520: 72 61 69 6e 62 6f 77 0a 72 61 69 6e 63 6f 61 74  rainbow.raincoat
0530: 20 72 61 69 6e 63 6f 61 74 73 20 72 61 69 6e 64   raincoats raind
0540: 72 6f 70 20 72 61 69 6e 64 72 6f 70 73 20 72 61  rop raindrops ra
0550: 69 6e 65 64 20 72 61 69 6e 66 61 6c 6c 20 72 61  ined rainfall ra
0560: 69 6e 69 65 72 20 72 61 69 6e 69 65 73 74 20 72  inier rainiest r
0570: 61 69 6e 69 6e 67 0a 72 61 69 6e 73 20 72 61 69  aining.rains rai
0580: 6e 73 74 6f 72 6d 20 72 61 69 6e 79 20 72 61 69  nstorm rainy rai
0590: 73 65 20 72 61 69 73 65 64 20 72 61 69 73 65 72  se raised raiser
05a0: 20 72 61 69 73 65 72 73 20 72 61 69 73 65 73 20   raisers raises 
05b0: 72 61 69 73 69 6e 20 72 61 69 73 69 6e 67 20 72  raisin raising r
05c0: 61 6b 65 0a 72 61 6b 65 64 20 72 61 6b 65 73 20  ake.raked rakes 
05d0: 72 61 6b 69 6e 67 20 72 61 6c 6c 69 65 64 20 72  raking rallied r
05e0: 61 6c 6c 69 65 73 20 72 61 6c 6c 79 20 72 61 6c  allies rally ral
05f0: 6c 79 69 6e 67 20 72 61 6d 20 72 61 6d 62 6c 65  lying ram ramble
0600: 20 72 61 6d 62 6c 65 72 20 72 61 6d 62 6c 65 73   rambler rambles
0610: 0a 72 61 6d 62 6c 69 6e 67 20 72 61 6d 62 6c 69  .rambling rambli
0620: 6e 67 73 20 72 61 6d 69 66 69 63 61 74 69 6f 6e  ngs ramification
0630: 20 72 61 6d 69 66 69 63 61 74 69 6f 6e 73 20 72   ramifications r
0640: 61 6d 70 20 72 61 6d 70 61 67 65 20 72 61 6d 70  amp rampage ramp
0650: 61 6e 74 20 72 61 6d 70 61 72 74 0a 72 61 6d 70  ant rampart.ramp
0660: 73 20 72 61 6d 72 6f 64 20 72 61 6d 73 20 72 61  s ramrod rams ra
0670: 6e 20 72 61 6e 63 68 20 72 61 6e 63 68 65 64 20  n ranch ranched 
0680: 72 61 6e 63 68 65 72 20 72 61 6e 63 68 65 72 73  rancher ranchers
0690: 20 72 61 6e 63 68 65 73 20 72 61 6e 63 68 69 6e   ranches ranchin
06a0: 67 20 72 61 6e 63 69 64 0a 72 61 6e 64 6f 6d 20  g rancid.random 
06b0: 72 61 6e 64 6f 6d 69 7a 61 74 69 6f 6e 20 72 61  randomization ra
06c0: 6e 64 6f 6d 69 7a 65 20 72 61 6e 64 6f 6d 69 7a  ndomize randomiz
06d0: 65 64 20 72 61 6e 64 6f 6d 69 7a 65 73 20 72 61  ed randomizes ra
06e0: 6e 64 6f 6d 6c 79 20 72 61 6e 64 6f 6d 6e 65 73  ndomly randomnes
06f0: 73 20 72 61 6e 64 79 0a 72 61 6e 67 20 72 61 6e  s randy.rang ran
0700: 67 65 20 72 61 6e 67 65 64 20 72 61 6e 67 65 6c  ge ranged rangel
0710: 61 6e 64 20 72 61 6e 67 65 72 20 72 61 6e 67 65  and ranger range
0720: 72 73 20 72 61 6e 67 65 73 20 72 61 6e 67 69 6e  rs ranges rangin
0730: 67 20 72 61 6e 67 79 20 72 61 6e 6b 20 72 61 6e  g rangy rank ran
0740: 6b 65 64 0a 72 61 6e 6b 65 72 20 72 61 6e 6b 65  ked.ranker ranke
0750: 72 73 20 72 61 6e 6b 65 73 74 20 72 61 6e 6b 69  rs rankest ranki
0760: 6e 67 20 72 61 6e 6b 69 6e 67 73 20 72 61 6e 6b  ng rankings rank
0770: 6c 65 20 72 61 6e 6b 6c 79 20 72 61 6e 6b 6e 65  le rankly rankne
0780: 73 73 20 72 61 6e 6b 73 20 72 61 6e 73 61 63 6b  ss ranks ransack
0790: 0a 72 61 6e 73 61 63 6b 65 64 20 72 61 6e 73 61  .ransacked ransa
07a0: 63 6b 69 6e 67 20 72 61 6e 73 61 63 6b 73 20 72  cking ransacks r
07b0: 61 6e 73 6f 6d 20 72 61 6e 73 6f 6d 65 72 20 72  ansom ransomer r
07c0: 61 6e 73 6f 6d 69 6e 67 20 72 61 6e 73 6f 6d 73  ansoming ransoms
07d0: 20 72 61 6e 74 20 72 61 6e 74 65 64 0a 72 61 6e   rant ranted.ran
07e0: 74 65 72 20 72 61 6e 74 65 72 73 20 72 61 6e 74  ter ranters rant
07f0: 69 6e 67 20 72 61 6e 74 73 20 72 61 70 20 72 61  ing rants rap ra
0800: 70 61 63 69 6f 75 73 20 72 61 70 65 20 72 61 70  pacious rape rap
0810: 65 64 20 72 61 70 65 72 20 72 61 70 65 73 20 72  ed raper rapes r
0820: 61 70 69 64 0a 72 61 70 69 64 69 74 79 20 72 61  apid.rapidity ra
0830: 70 69 64 6c 79 20 72 61 70 69 64 73 20 72 61 70  pidly rapids rap
0840: 69 65 72 20 72 61 70 69 6e 67 20 72 61 70 70 6f  ier raping rappo
0850: 72 74 20 72 61 70 70 72 6f 63 68 65 6d 65 6e 74  rt rapprochement
0860: 20 72 61 70 73 20 72 61 70 74 20 72 61 70 74 6c   raps rapt raptl
0870: 79 0a 72 61 70 74 75 72 65 20 72 61 70 74 75 72  y.rapture raptur
0880: 65 73 20 72 61 70 74 75 72 6f 75 73 20 72 61 72  es rapturous rar
0890: 65 20 72 61 72 65 6c 79 20 72 61 72 65 6e 65 73  e rarely rarenes
08a0: 73 20 72 61 72 65 72 20 72 61 72 65 73 74 20 72  s rarer rarest r
08b0: 61 72 69 74 79 20 72 61 73 63 61 6c 0a 72 61 73  arity rascal.ras
08c0: 63 61 6c 6c 79 20 72 61 73 63 61 6c 73 20 72 61  cally rascals ra
08d0: 73 68 20 72 61 73 68 65 72 20 72 61 73 68 6c 79  sh rasher rashly
08e0: 20 72 61 73 68 6e 65 73 73 20 72 61 73 70 20 72   rashness rasp r
08f0: 61 73 70 62 65 72 72 79 20 72 61 73 70 65 64 20  aspberry rasped 
0900: 72 61 73 70 69 6e 67 0a 72 61 73 70 73 20 72 61  rasping.rasps ra
0910: 73 74 65 72 20 72 61 74 20 72 61 74 65 20 72 61  ster rat rate ra
0920: 74 65 64 20 72 61 74 65 72 20 72 61 74 65 72 73  ted rater raters
0930: 20 72 61 74 65 73 20 72 61 74 68 65 72 20 72 61   rates rather ra
0940: 74 69 66 69 63 61 74 69 6f 6e 20 72 61 74 69 66  tification ratif
0950: 69 65 64 0a 72 61 74 69 66 69 65 73 20 72 61 74  ied.ratifies rat
0960: 69 66 79 20 72 61 74 69 66 79 69 6e 67 20 72 61  ify ratifying ra
0970: 74 69 6e 67 20 72 61 74 69 6e 67 73 20 72 61 74  ting ratings rat
0980: 69 6f 20 72 61 74 69 6f 6e 20 72 61 74 69 6f 6e  io ration ration
0990: 61 6c 20 72 61 74 69 6f 6e 61 6c 65 0a 72 61 74  al rationale.rat
09a0: 69 6f 6e 61 6c 65 73 20 72 61 74 69 6f 6e 61 6c  ionales rational
09b0: 69 74 69 65 73 20 72 61 74 69 6f 6e 61 6c 69 74  ities rationalit
09c0: 79 20 72 61 74 69 6f 6e 61 6c 69 7a 61 74 69 6f  y rationalizatio
09d0: 6e 20 72 61 74 69 6f 6e 61 6c 69 7a 61 74 69 6f  n rationalizatio
09e0: 6e 73 0a 72 61 74 69 6f 6e 61 6c 69 7a 65 20 72  ns.rationalize r
09f0: 61 74 69 6f 6e 61 6c 69 7a 65 64 20 72 61 74 69  ationalized rati
0a00: 6f 6e 61 6c 69 7a 65 73 20 72 61 74 69 6f 6e 61  onalizes rationa
0a10: 6c 69 7a 69 6e 67 20 72 61 74 69 6f 6e 61 6c 6c  lizing rationall
0a20: 79 20 72 61 74 69 6f 6e 61 6c 73 0a 72 61 74 69  y rationals.rati
0a30: 6f 6e 69 6e 67 20 72 61 74 69 6f 6e 73 20 72 61  oning rations ra
0a40: 74 69 6f 73 20 72 61 74 73 20 72 61 74 74 6c 65  tios rats rattle
0a50: 20 72 61 74 74 6c 65 64 20 72 61 74 74 6c 65 72   rattled rattler
0a60: 20 72 61 74 74 6c 65 72 73 20 72 61 74 74 6c 65   rattlers rattle
0a70: 73 0a 72 61 74 74 6c 65 73 6e 61 6b 65 20 72 61  s.rattlesnake ra
0a80: 74 74 6c 65 73 6e 61 6b 65 73 20 72 61 74 74 6c  ttlesnakes rattl
0a90: 69 6e 67 20 72 61 75 63 6f 75 73 20 72 61 76 61  ing raucous rava
0aa0: 67 65 20 72 61 76 61 67 65 64 20 72 61 76 61 67  ge ravaged ravag
0ab0: 65 72 20 72 61 76 61 67 65 72 73 0a 72 61 76 61  er ravagers.rava
0ac0: 67 65 73 20 72 61 76 61 67 69 6e 67 20 72 61 76  ges ravaging rav
0ad0: 65 20 72 61 76 65 64 20 72 61 76 65 6e 20 72 61  e raved raven ra
0ae0: 76 65 6e 69 6e 67 20 72 61 76 65 6e 6f 75 73 20  vening ravenous 
0af0: 72 61 76 65 6e 6f 75 73 6c 79 20 72 61 76 65 6e  ravenously raven
0b00: 73 20 72 61 76 65 73 0a 72 61 76 69 6e 65 20 72  s raves.ravine r
0b10: 61 76 69 6e 65 73 20 72 61 76 69 6e 67 20 72 61  avines raving ra
0b20: 76 69 6e 67 73 20 72 61 77 20 72 61 77 65 72 20  vings raw rawer 
0b30: 72 61 77 65 73 74 20 72 61 77 6c 79 20 72 61 77  rawest rawly raw
0b40: 6e 65 73 73 20 72 61 79 20 72 61 79 73 20 72 61  ness ray rays ra
0b50: 7a 65 0a 72 61 7a 6f 72 20 72 61 7a 6f 72 73 20  ze.razor razors 
0b60: 72 65 20 72 65 61 62 62 72 65 76 69 61 74 65 20  re reabbreviate 
0b70: 72 65 61 62 62 72 65 76 69 61 74 65 64 20 72 65  reabbreviated re
0b80: 61 62 62 72 65 76 69 61 74 65 73 20 72 65 61 62  abbreviates reab
0b90: 62 72 65 76 69 61 74 69 6e 67 20 72 65 61 63 68  breviating reach
0ba0: 0a 72 65 61 63 68 61 62 69 6c 69 74 79 20 72 65  .reachability re
0bb0: 61 63 68 61 62 6c 65 20 72 65 61 63 68 61 62 6c  achable reachabl
0bc0: 79 20 72 65 61 63 68 65 64 20 72 65 61 63 68 65  y reached reache
0bd0: 72 20 72 65 61 63 68 65 73 20 72 65 61 63 68 69  r reaches reachi
0be0: 6e 67 20 72 65 61 63 71 75 69 72 65 64 0a 72 65  ng reacquired.re
0bf0: 61 63 74 20 72 65 61 63 74 65 64 20 72 65 61 63  act reacted reac
0c00: 74 69 6e 67 20 72 65 61 63 74 69 6f 6e 20 72 65  ting reaction re
0c10: 61 63 74 69 6f 6e 61 72 69 65 73 20 72 65 61 63  actionaries reac
0c20: 74 69 6f 6e 61 72 79 20 72 65 61 63 74 69 6f 6e  tionary reaction
0c30: 73 20 72 65 61 63 74 69 76 61 74 65 0a 72 65 61  s reactivate.rea
0c40: 63 74 69 76 61 74 65 64 20 72 65 61 63 74 69 76  ctivated reactiv
0c50: 61 74 65 73 20 72 65 61 63 74 69 76 61 74 69 6e  ates reactivatin
0c60: 67 20 72 65 61 63 74 69 76 61 74 69 6f 6e 20 72  g reactivation r
0c70: 65 61 63 74 69 76 65 20 72 65 61 63 74 69 76 65  eactive reactive
0c80: 6c 79 0a 72 65 61 63 74 69 76 69 74 79 20 72 65  ly.reactivity re
0c90: 61 63 74 6f 72 20 72 65 61 63 74 6f 72 73 20 72  actor reactors r
0ca0: 65 61 63 74 73 20 72 65 61 64 20 72 65 61 64 61  eacts read reada
0cb0: 62 69 6c 69 74 79 20 72 65 61 64 61 62 6c 65 20  bility readable 
0cc0: 72 65 61 64 65 72 20 72 65 61 64 65 72 73 0a 72  reader readers.r
0cd0: 65 61 64 69 65 64 20 72 65 61 64 69 65 72 20 72  eadied readier r
0ce0: 65 61 64 69 65 73 20 72 65 61 64 69 65 73 74 20  eadies readiest 
0cf0: 72 65 61 64 69 6c 79 20 72 65 61 64 69 6e 65 73  readily readines
0d00: 73 20 72 65 61 64 69 6e 67 20 72 65 61 64 69 6e  s reading readin
0d10: 67 73 20 72 65 61 64 6a 75 73 74 65 64 0a 72 65  gs readjusted.re
0d20: 61 64 6f 75 74 20 72 65 61 64 6f 75 74 73 20 72  adout readouts r
0d30: 65 61 64 73 20 72 65 61 64 79 20 72 65 61 64 79  eads ready ready
0d40: 69 6e 67 20 72 65 61 6c 20 72 65 61 6c 65 73 74  ing real realest
0d50: 20 72 65 61 6c 69 67 6e 20 72 65 61 6c 69 67 6e   realign realign
0d60: 65 64 20 72 65 61 6c 69 67 6e 69 6e 67 0a 72 65  ed realigning.re
0d70: 61 6c 69 67 6e 73 20 72 65 61 6c 69 73 6d 20 72  aligns realism r
0d80: 65 61 6c 69 73 74 20 72 65 61 6c 69 73 74 69 63  ealist realistic
0d90: 20 72 65 61 6c 69 73 74 69 63 61 6c 6c 79 20 72   realistically r
0da0: 65 61 6c 69 73 74 73 20 72 65 61 6c 69 74 69 65  ealists realitie
0db0: 73 20 72 65 61 6c 69 74 79 0a 7d 0a 0a 64 6f 5f  s reality.}..do_
0dc0: 74 65 73 74 20 31 2e 31 20 7b 0a 20 20 65 78 65  test 1.1 {.  exe
0dd0: 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 56 49  csql { CREATE VI
0de0: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55  RTUAL TABLE t1 U
0df0: 53 49 4e 47 20 73 70 65 6c 6c 66 69 78 31 20 7d  SING spellfix1 }
0e00: 0a 20 20 66 6f 72 65 61 63 68 20 77 6f 72 64 20  .  foreach word 
0e10: 24 76 6f 63 61 62 20 7b 0a 20 20 20 20 65 78 65  $vocab {.    exe
0e20: 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e  csql { INSERT IN
0e30: 54 4f 20 74 31 28 77 6f 72 64 29 20 56 41 4c 55  TO t1(word) VALU
0e40: 45 53 28 24 77 6f 72 64 29 20 7d 0a 20 20 7d 0a  ES($word) }.  }.
0e50: 7d 20 7b 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 74  } {}..foreach {t
0e60: 6e 20 77 6f 72 64 20 72 65 73 7d 20 7b 0a 20 20  n word res} {.  
0e70: 31 20 20 20 72 61 78 70 69 2a 20 20 20 20 20 7b  1   raxpi*     {
0e80: 72 61 73 70 69 6e 67 20 35 20 72 61 73 70 65 64  rasping 5 rasped
0e90: 20 35 20 72 61 67 77 65 65 64 20 35 20 72 61 73   5 ragweed 5 ras
0ea0: 70 62 65 72 72 79 20 36 20 72 61 73 70 20 34 7d  pberry 6 rasp 4}
0eb0: 0a 20 20 32 20 20 20 72 69 6c 2a 20 20 20 20 20  .  2   ril*     
0ec0: 20 20 7b 72 61 69 6c 20 34 20 72 61 69 6c 65 64    {rail 4 railed
0ed0: 20 34 20 72 61 69 6c 65 72 20 34 20 72 61 69 6c   4 railer 4 rail
0ee0: 65 72 73 20 34 20 72 61 69 6c 69 6e 67 20 34 7d  ers 4 railing 4}
0ef0: 0a 20 20 33 20 20 20 72 69 6c 69 73 2a 20 20 20  .  3   rilis*   
0f00: 20 20 7b 72 65 61 6c 69 73 6d 20 36 20 72 65 61    {realism 6 rea
0f10: 6c 69 73 74 20 36 20 72 65 61 6c 69 73 74 69 63  list 6 realistic
0f20: 20 36 20 72 65 61 6c 69 73 74 69 63 61 6c 6c 79   6 realistically
0f30: 20 36 20 72 65 61 6c 69 73 74 73 20 36 7d 0a 20   6 realists 6}. 
0f40: 20 34 20 20 20 72 65 61 69 6c 2a 20 20 20 20 20   4   reail*     
0f50: 7b 72 65 61 6c 20 33 20 72 65 61 6c 65 73 74 20  {real 3 realest 
0f60: 33 20 72 65 61 6c 69 67 6e 20 33 20 72 65 61 6c  3 realign 3 real
0f70: 69 67 6e 65 64 20 33 20 72 65 61 6c 69 67 6e 69  igned 3 realigni
0f80: 6e 67 20 33 7d 0a 20 20 35 20 20 20 72 61 73 2a  ng 3}.  5   ras*
0f90: 20 20 20 20 20 20 20 7b 72 61 73 63 61 6c 20 33         {rascal 3
0fa0: 20 72 61 73 63 61 6c 6c 79 20 33 20 72 61 73 63   rascally 3 rasc
0fb0: 61 6c 73 20 33 20 72 61 73 68 20 33 20 72 61 73  als 3 rash 3 ras
0fc0: 68 65 72 20 33 7d 0a 20 20 36 20 20 20 72 65 61  her 3}.  6   rea
0fd0: 6c 69 73 74 73 73 2a 20 7b 72 65 61 6c 69 73 74  listss* {realist
0fe0: 73 20 38 20 72 65 61 6c 69 67 6e 73 20 38 20 72  s 8 realigns 8 r
0ff0: 65 61 6c 69 73 74 69 63 20 39 20 72 65 61 6c 69  ealistic 9 reali
1000: 73 74 69 63 61 6c 6c 79 20 39 20 72 65 61 6c 65  stically 9 reale
1010: 73 74 20 37 7d 0a 20 20 37 20 20 20 72 65 61 6c  st 7}.  7   real
1020: 69 73 74 73 73 20 20 7b 72 65 61 6c 69 73 74 73  istss  {realists
1030: 20 38 20 72 65 61 6c 69 73 74 20 37 20 72 65 61   8 realist 7 rea
1040: 6c 69 67 6e 73 20 38 20 72 65 61 6c 69 73 74 69  ligns 8 realisti
1050: 63 20 39 20 72 65 61 6c 65 73 74 20 37 7d 0a 20  c 9 realest 7}. 
1060: 20 38 20 20 20 72 6c 6c 61 74 69 6f 6e 2a 20 20   8   rllation*  
1070: 7b 72 65 61 6c 69 74 69 65 73 20 39 20 72 65 61  {realities 9 rea
1080: 6c 69 74 79 20 37 20 72 61 6c 6c 69 65 64 20 37  lity 7 rallied 7
1090: 20 72 61 69 6c 65 64 20 34 7d 0a 20 20 39 20 20   railed 4}.  9  
10a0: 20 72 65 6e 73 74 6f 6d 2a 20 20 20 7b 72 61 69   renstom*   {rai
10b0: 6e 73 74 6f 72 6d 20 38 20 72 61 6e 73 6f 6d 20  nstorm 8 ransom 
10c0: 36 20 72 61 6e 73 6f 6d 65 72 20 36 20 72 61 6e  6 ransomer 6 ran
10d0: 73 6f 6d 69 6e 67 20 36 20 72 61 6e 73 6f 6d 73  soming 6 ransoms
10e0: 20 36 7d 0a 7d 20 7b 0a 20 20 64 6f 5f 65 78 65   6}.} {.  do_exe
10f0: 63 73 71 6c 5f 74 65 73 74 20 31 2e 32 2e 24 74  csql_test 1.2.$t
1100: 6e 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  n {.    SELECT w
1110: 6f 72 64 2c 20 6d 61 74 63 68 6c 65 6e 20 46 52  ord, matchlen FR
1120: 4f 4d 20 74 31 20 57 48 45 52 45 20 77 6f 72 64  OM t1 WHERE word
1130: 20 4d 41 54 43 48 20 24 77 6f 72 64 20 0a 20 20   MATCH $word .  
1140: 20 20 20 4f 52 44 45 52 20 42 59 20 73 63 6f 72     ORDER BY scor
1150: 65 2c 20 77 6f 72 64 20 4c 49 4d 49 54 20 35 0a  e, word LIMIT 5.
1160: 20 20 7d 20 24 72 65 73 0a 7d 0a 0a 23 20 54 65    } $res.}..# Te
1170: 73 74 73 20 6f 66 20 74 68 65 20 6e 65 78 74 5f  sts of the next_
1180: 63 68 61 72 20 66 75 6e 63 74 69 6f 6e 2e 0a 23  char function..#
1190: 0a 64 6f 5f 74 65 73 74 20 31 2e 31 30 20 7b 0a  .do_test 1.10 {.
11a0: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
11b0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 76 6f 63  CREATE TABLE voc
11c0: 61 62 28 77 20 54 45 58 54 20 50 52 49 4d 41 52  ab(w TEXT PRIMAR
11d0: 59 20 4b 45 59 29 3b 0a 20 20 20 20 49 4e 53 45  Y KEY);.    INSE
11e0: 52 54 20 49 4e 54 4f 20 76 6f 63 61 62 20 53 45  RT INTO vocab SE
11f0: 4c 45 43 54 20 77 6f 72 64 20 46 52 4f 4d 20 74  LECT word FROM t
1200: 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 65  1;.  }.} {}.do_e
1210: 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 31  xecsql_test 1.11
1220: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6e 65 78 74   {.  SELECT next
1230: 5f 63 68 61 72 28 27 72 65 27 2c 27 76 6f 63 61  _char('re','voca
1240: 62 27 2c 27 77 27 29 3b 0a 7d 20 7b 61 7d 0a 64  b','w');.} {a}.d
1250: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
1260: 2e 31 31 73 75 62 20 7b 0a 20 20 53 45 4c 45 43  .11sub {.  SELEC
1270: 54 20 6e 65 78 74 5f 63 68 61 72 28 27 72 65 27  T next_char('re'
1280: 2c 27 28 53 45 4c 45 43 54 20 77 20 41 53 20 78  ,'(SELECT w AS x
1290: 20 46 52 4f 4d 20 76 6f 63 61 62 29 27 2c 27 78   FROM vocab)','x
12a0: 27 29 3b 0a 7d 20 7b 61 7d 0a 64 6f 5f 65 78 65  ');.} {a}.do_exe
12b0: 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 32 20 7b  csql_test 1.12 {
12c0: 0a 20 20 53 45 4c 45 43 54 20 6e 65 78 74 5f 63  .  SELECT next_c
12d0: 68 61 72 28 27 72 27 2c 27 76 6f 63 61 62 27 2c  har('r','vocab',
12e0: 27 77 27 29 3b 0a 7d 20 7b 61 65 7d 0a 64 6f 5f  'w');.} {ae}.do_
12f0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 31  execsql_test 1.1
1300: 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 6e 65 78  3 {.  SELECT nex
1310: 74 5f 63 68 61 72 28 27 27 2c 27 76 6f 63 61 62  t_char('','vocab
1320: 27 2c 27 77 27 29 3b 0a 7d 20 7b 72 7d 0a 64 6f  ','w');.} {r}.do
1330: 5f 74 65 73 74 20 31 2e 31 34 20 7b 0a 20 20 63  _test 1.14 {.  c
1340: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
1350: 6e 65 78 74 5f 63 68 61 72 28 27 27 2c 27 78 79  next_char('','xy
1360: 7a 7a 79 27 2c 27 61 27 29 7d 0a 7d 20 7b 31 20  zzy','a')}.} {1 
1370: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  {no such table: 
1380: 78 79 7a 7a 79 7d 7d 0a 0a 64 6f 5f 65 78 65 63  xyzzy}}..do_exec
1390: 73 71 6c 5f 74 65 73 74 20 31 2e 32 30 20 7b 0a  sql_test 1.20 {.
13a0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 76    CREATE TABLE v
13b0: 6f 63 61 62 32 28 77 20 54 45 58 54 29 3b 0a 20  ocab2(w TEXT);. 
13c0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 76 6f   CREATE INDEX vo
13d0: 63 61 62 32 77 20 4f 4e 20 76 6f 63 61 62 32 28  cab2w ON vocab2(
13e0: 77 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65  w COLLATE nocase
13f0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
1400: 20 76 6f 63 61 62 32 20 56 41 4c 55 45 53 28 27   vocab2 VALUES('
1410: 61 62 63 27 29 2c 20 28 27 41 42 44 27 29 2c 20  abc'), ('ABD'), 
1420: 28 27 61 42 65 27 29 2c 20 28 27 41 62 46 27 29  ('aBe'), ('AbF')
1430: 3b 0a 20 20 53 45 4c 45 43 54 20 6e 65 78 74 5f  ;.  SELECT next_
1440: 63 68 61 72 28 27 61 62 27 2c 20 27 76 6f 63 61  char('ab', 'voca
1450: 62 32 27 2c 20 27 77 27 2c 20 6e 75 6c 6c 2c 20  b2', 'w', null, 
1460: 27 6e 6f 63 61 73 65 27 29 3b 0a 7d 20 7b 63 44  'nocase');.} {cD
1470: 65 46 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  eF}.do_execsql_t
1480: 65 73 74 20 31 2e 32 31 20 7b 0a 20 20 53 45 4c  est 1.21 {.  SEL
1490: 45 43 54 20 6e 65 78 74 5f 63 68 61 72 28 27 61  ECT next_char('a
14a0: 62 27 2c 27 76 6f 63 61 62 32 27 2c 27 77 27 2c  b','vocab2','w',
14b0: 6e 75 6c 6c 2c 6e 75 6c 6c 29 3b 0a 7d 20 7b 63  null,null);.} {c
14c0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
14d0: 74 20 31 2e 32 32 20 7b 0a 20 20 53 45 4c 45 43  t 1.22 {.  SELEC
14e0: 54 20 6e 65 78 74 5f 63 68 61 72 28 27 41 42 27  T next_char('AB'
14f0: 2c 27 76 6f 63 61 62 32 27 2c 27 77 27 2c 6e 75  ,'vocab2','w',nu
1500: 6c 6c 2c 27 4e 4f 43 41 53 45 27 29 3b 0a 7d 20  ll,'NOCASE');.} 
1510: 7b 63 44 65 46 7d 0a 64 6f 5f 65 78 65 63 73 71  {cDeF}.do_execsq
1520: 6c 5f 74 65 73 74 20 31 2e 32 33 20 7b 0a 20 20  l_test 1.23 {.  
1530: 53 45 4c 45 43 54 20 6e 65 78 74 5f 63 68 61 72  SELECT next_char
1540: 28 27 61 62 27 2c 27 76 6f 63 61 62 32 27 2c 27  ('ab','vocab2','
1550: 77 27 2c 6e 75 6c 6c 2c 27 62 69 6e 61 72 79 27  w',null,'binary'
1560: 29 3b 0a 7d 20 7b 63 7d 0a 0a 64 6f 5f 65 78 65  );.} {c}..do_exe
1570: 63 73 71 6c 5f 74 65 73 74 20 31 2e 33 30 20 7b  csql_test 1.30 {
1580: 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20  .  SELECT rowid 
1590: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77 6f  FROM t1 WHERE wo
15a0: 72 64 3d 27 72 61 62 62 69 74 27 3b 0a 7d 20 7b  rd='rabbit';.} {
15b0: 32 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  2}.do_execsql_te
15c0: 73 74 20 31 2e 33 31 20 7b 0a 20 20 55 50 44 41  st 1.31 {.  UPDA
15d0: 54 45 20 74 31 20 53 45 54 20 72 6f 77 69 64 3d  TE t1 SET rowid=
15e0: 32 30 30 30 20 57 48 45 52 45 20 77 6f 72 64 3d  2000 WHERE word=
15f0: 27 72 61 62 62 69 74 27 3b 0a 20 20 53 45 4c 45  'rabbit';.  SELE
1600: 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31  CT rowid FROM t1
1610: 20 57 48 45 52 45 20 77 6f 72 64 3d 27 72 61 62   WHERE word='rab
1620: 62 69 74 27 3b 0a 7d 20 7b 32 30 30 30 7d 0a 64  bit';.} {2000}.d
1630: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
1640: 2e 33 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49  .32 {.  INSERT I
1650: 4e 54 4f 20 74 31 28 72 6f 77 69 64 2c 20 77 6f  NTO t1(rowid, wo
1660: 72 64 29 20 56 41 4c 55 45 53 28 33 30 30 30 2c  rd) VALUES(3000,
1670: 27 6d 65 6c 6f 64 79 27 29 3b 0a 20 20 53 45 4c  'melody');.  SEL
1680: 45 43 54 20 72 6f 77 69 64 2c 20 77 6f 72 64 2c  ECT rowid, word,
1690: 20 6d 61 74 63 68 6c 65 6e 20 46 52 4f 4d 20 74   matchlen FROM t
16a0: 31 20 57 48 45 52 45 20 77 6f 72 64 20 4d 41 54  1 WHERE word MAT
16b0: 43 48 20 27 6d 65 6c 6f 74 74 69 27 0a 20 20 20  CH 'melotti'.   
16c0: 4f 52 44 45 52 20 42 59 20 73 63 6f 72 65 20 4c  ORDER BY score L
16d0: 49 4d 49 54 20 33 3b 0a 7d 20 7b 33 30 30 30 20  IMIT 3;.} {3000 
16e0: 6d 65 6c 6f 64 79 20 36 7d 0a 64 6f 5f 74 65 73  melody 6}.do_tes
16f0: 74 20 31 2e 33 33 20 7b 0a 20 20 63 61 74 63 68  t 1.33 {.  catch
1700: 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f  sql {INSERT INTO
1710: 20 74 31 28 72 6f 77 69 64 2c 20 77 6f 72 64 29   t1(rowid, word)
1720: 20 56 41 4c 55 45 53 28 33 30 30 30 2c 27 67 61   VALUES(3000,'ga
1730: 72 64 65 6e 27 29 3b 7d 0a 7d 20 7b 31 20 7b 63  rden');}.} {1 {c
1740: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
1750: 7d 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  }}..do_execsql_t
1760: 65 73 74 20 32 2e 31 20 7b 0a 20 20 43 52 45 41  est 2.1 {.  CREA
1770: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
1780: 20 74 32 20 55 53 49 4e 47 20 73 70 65 6c 6c 66   t2 USING spellf
1790: 69 78 31 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  ix1;.  INSERT IN
17a0: 54 4f 20 74 32 20 28 77 6f 72 64 2c 20 73 6f 75  TO t2 (word, sou
17b0: 6e 64 73 6c 69 6b 65 29 20 56 41 4c 55 45 53 28  ndslike) VALUES(
17c0: 27 73 63 68 6f 6f 6c 27 2c 20 27 73 6b 75 75 6c  'school', 'skuul
17d0: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
17e0: 4f 20 74 32 20 28 77 6f 72 64 2c 20 73 6f 75 6e  O t2 (word, soun
17f0: 64 73 6c 69 6b 65 29 20 56 41 4c 55 45 53 28 27  dslike) VALUES('
1800: 70 73 61 6c 6d 27 2c 20 27 73 61 72 6d 27 29 3b  psalm', 'sarm');
1810: 0a 20 20 53 45 4c 45 43 54 20 77 6f 72 64 2c 20  .  SELECT word, 
1820: 6d 61 74 63 68 6c 65 6e 20 46 52 4f 4d 20 74 32  matchlen FROM t2
1830: 20 57 48 45 52 45 20 77 6f 72 64 20 4d 41 54 43   WHERE word MATC
1840: 48 20 27 73 61 72 2a 27 20 4c 49 4d 49 54 20 35  H 'sar*' LIMIT 5
1850: 3b 0a 7d 20 7b 70 73 61 6c 6d 20 34 7d 0a 0a 64  ;.} {psalm 4}..d
1860: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32  o_execsql_test 2
1870: 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 77 6f  .2 {.  SELECT wo
1880: 72 64 2c 20 6d 61 74 63 68 6c 65 6e 20 46 52 4f  rd, matchlen FRO
1890: 4d 20 74 32 20 57 48 45 52 45 20 77 6f 72 64 20  M t2 WHERE word 
18a0: 4d 41 54 43 48 20 27 73 6b 6f 6c 2a 27 20 4c 49  MATCH 'skol*' LI
18b0: 4d 49 54 20 35 3b 0a 7d 20 7b 73 63 68 6f 6f 6c  MIT 5;.} {school
18c0: 20 36 7d 0a 0a 73 65 74 20 76 6f 63 61 62 20 7b   6}..set vocab {
18d0: 0a 6b 61 6e 67 61 72 6f 6f 20 6b 61 6e 6a 69 20  .kangaroo kanji 
18e0: 6b 61 70 70 61 20 6b 61 72 61 74 65 20 6b 65 65  kappa karate kee
18f0: 6c 20 6b 65 65 6c 65 64 20 6b 65 65 6c 69 6e 67  l keeled keeling
1900: 20 6b 65 65 6c 73 20 6b 65 65 6e 20 6b 65 65 6e   keels keen keen
1910: 65 72 20 6b 65 65 6e 65 73 74 0a 6b 65 65 6e 6c  er keenest.keenl
1920: 79 20 6b 65 65 6e 6e 65 73 73 20 6b 65 65 70 20  y keenness keep 
1930: 6b 65 65 70 65 72 20 6b 65 65 70 65 72 73 20 6b  keeper keepers k
1940: 65 65 70 69 6e 67 20 6b 65 65 70 73 20 6b 65 6e  eeping keeps ken
1950: 20 6b 65 6e 6e 65 6c 20 6b 65 6e 6e 65 6c 73 20   kennel kennels 
1960: 6b 65 70 74 0a 6b 65 72 63 68 69 65 66 20 6b 65  kept.kerchief ke
1970: 72 63 68 69 65 66 73 20 6b 65 72 6e 20 6b 65 72  rchiefs kern ker
1980: 6e 65 6c 20 6b 65 72 6e 65 6c 73 20 6b 65 72 6f  nel kernels kero
1990: 73 65 6e 65 20 6b 65 74 63 68 75 70 20 6b 65 74  sene ketchup ket
19a0: 74 6c 65 0a 6b 65 74 74 6c 65 73 20 6b 65 79 20  tle.kettles key 
19b0: 6b 65 79 62 6f 61 72 64 20 6b 65 79 62 6f 61 72  keyboard keyboar
19c0: 64 73 20 6b 65 79 65 64 20 6b 65 79 68 6f 6c 65  ds keyed keyhole
19d0: 20 6b 65 79 69 6e 67 20 6b 65 79 6e 6f 74 65 20   keying keynote 
19e0: 6b 65 79 70 61 64 20 6b 65 79 70 61 64 73 20 6b  keypad keypads k
19f0: 65 79 73 0a 6b 65 79 73 74 72 6f 6b 65 20 6b 65  eys.keystroke ke
1a00: 79 73 74 72 6f 6b 65 73 20 6b 65 79 77 6f 72 64  ystrokes keyword
1a10: 20 6b 65 79 77 6f 72 64 73 20 6b 69 63 6b 20 6b   keywords kick k
1a20: 69 63 6b 65 64 20 6b 69 63 6b 65 72 20 6b 69 63  icked kicker kic
1a30: 6b 65 72 73 20 6b 69 63 6b 69 6e 67 0a 6b 69 63  kers kicking.kic
1a40: 6b 6f 66 66 20 6b 69 63 6b 73 20 6b 69 64 20 6b  koff kicks kid k
1a50: 69 64 64 65 64 20 6b 69 64 64 69 65 20 6b 69 64  idded kiddie kid
1a60: 64 69 6e 67 20 6b 69 64 6e 61 70 20 6b 69 64 6e  ding kidnap kidn
1a70: 61 70 70 65 72 20 6b 69 64 6e 61 70 70 65 72 73  apper kidnappers
1a80: 20 6b 69 64 6e 61 70 70 69 6e 67 0a 6b 69 64 6e   kidnapping.kidn
1a90: 61 70 70 69 6e 67 73 20 6b 69 64 6e 61 70 73 20  appings kidnaps 
1aa0: 6b 69 64 6e 65 79 20 6b 69 64 6e 65 79 73 20 6b  kidney kidneys k
1ab0: 69 64 73 20 6b 69 6c 6c 20 6b 69 6c 6c 65 64 20  ids kill killed 
1ac0: 6b 69 6c 6c 65 72 20 6b 69 6c 6c 65 72 73 20 6b  killer killers k
1ad0: 69 6c 6c 69 6e 67 0a 6b 69 6c 6c 69 6e 67 6c 79  illing.killingly
1ae0: 20 6b 69 6c 6c 69 6e 67 73 20 6b 69 6c 6c 6a 6f   killings killjo
1af0: 79 20 6b 69 6c 6c 73 20 6b 69 6c 6f 62 69 74 20  y kills kilobit 
1b00: 6b 69 6c 6f 62 69 74 73 20 6b 69 6c 6f 62 6c 6f  kilobits kiloblo
1b10: 63 6b 20 6b 69 6c 6f 62 79 74 65 20 6b 69 6c 6f  ck kilobyte kilo
1b20: 62 79 74 65 73 0a 6b 69 6c 6f 67 72 61 6d 20 6b  bytes.kilogram k
1b30: 69 6c 6f 67 72 61 6d 73 20 6b 69 6c 6f 68 65 72  ilograms kiloher
1b40: 74 7a 20 6b 69 6c 6f 68 6d 20 6b 69 6c 6f 6a 6f  tz kilohm kilojo
1b50: 75 6c 65 20 6b 69 6c 6f 6d 65 74 65 72 20 6b 69  ule kilometer ki
1b60: 6c 6f 6d 65 74 65 72 73 20 6b 69 6c 6f 74 6f 6e  lometers kiloton
1b70: 0a 6b 69 6c 6f 76 6f 6c 74 20 6b 69 6c 6f 77 61  .kilovolt kilowa
1b80: 74 74 20 6b 69 6c 6f 77 6f 72 64 20 6b 69 6d 6f  tt kiloword kimo
1b90: 6e 6f 20 6b 69 6e 20 6b 69 6e 64 20 6b 69 6e 64  no kin kind kind
1ba0: 65 72 20 6b 69 6e 64 65 72 67 61 72 74 65 6e 20  er kindergarten 
1bb0: 6b 69 6e 64 65 73 74 0a 6b 69 6e 64 68 65 61 72  kindest.kindhear
1bc0: 74 65 64 20 6b 69 6e 64 6c 65 20 6b 69 6e 64 6c  ted kindle kindl
1bd0: 65 64 20 6b 69 6e 64 6c 65 73 20 6b 69 6e 64 6c  ed kindles kindl
1be0: 69 6e 67 20 6b 69 6e 64 6c 79 20 6b 69 6e 64 6e  ing kindly kindn
1bf0: 65 73 73 20 6b 69 6e 64 72 65 64 20 6b 69 6e 64  ess kindred kind
1c00: 73 0a 6b 69 6e 65 74 69 63 20 6b 69 6e 67 20 6b  s.kinetic king k
1c10: 69 6e 67 64 6f 6d 20 6b 69 6e 67 64 6f 6d 73 20  ingdom kingdoms 
1c20: 6b 69 6e 67 6c 79 20 6b 69 6e 67 70 69 6e 20 6b  kingly kingpin k
1c30: 69 6e 67 73 20 6b 69 6e 6b 20 6b 69 6e 6b 79 20  ings kink kinky 
1c40: 6b 69 6e 73 68 69 70 20 6b 69 6e 73 6d 61 6e 0a  kinship kinsman.
1c50: 6b 69 6f 73 6b 20 6b 69 73 73 20 6b 69 73 73 65  kiosk kiss kisse
1c60: 64 20 6b 69 73 73 65 72 20 6b 69 73 73 65 72 73  d kisser kissers
1c70: 20 6b 69 73 73 65 73 20 6b 69 73 73 69 6e 67 20   kisses kissing 
1c80: 6b 69 74 20 6b 69 74 63 68 65 6e 20 6b 69 74 63  kit kitchen kitc
1c90: 68 65 6e 65 74 74 65 0a 6b 69 74 63 68 65 6e 73  henette.kitchens
1ca0: 20 6b 69 74 65 20 6b 69 74 65 64 20 6b 69 74 65   kite kited kite
1cb0: 73 20 6b 69 74 69 6e 67 20 6b 69 74 73 20 6b 69  s kiting kits ki
1cc0: 74 74 65 6e 20 6b 69 74 74 65 6e 69 73 68 20 6b  tten kittenish k
1cd0: 69 74 74 65 6e 73 20 6b 69 74 74 79 20 6b 6c 61  ittens kitty kla
1ce0: 78 6f 6e 0a 6b 6c 75 64 67 65 20 6b 6c 75 64 67  xon.kludge kludg
1cf0: 65 73 20 6b 6c 79 73 74 72 6f 6e 20 6b 6e 61 63  es klystron knac
1d00: 6b 20 6b 6e 61 70 73 61 63 6b 20 6b 6e 61 70 73  k knapsack knaps
1d10: 61 63 6b 73 20 6b 6e 61 76 65 20 6b 6e 61 76 65  acks knave knave
1d20: 73 20 6b 6e 65 61 64 20 6b 6e 65 61 64 73 20 6b  s knead kneads k
1d30: 6e 65 65 0a 6b 6e 65 65 63 61 70 20 6b 6e 65 65  nee.kneecap knee
1d40: 64 20 6b 6e 65 65 69 6e 67 20 6b 6e 65 65 6c 20  d kneeing kneel 
1d50: 6b 6e 65 65 6c 65 64 20 6b 6e 65 65 6c 69 6e 67  kneeled kneeling
1d60: 20 6b 6e 65 65 6c 73 20 6b 6e 65 65 73 20 6b 6e   kneels knees kn
1d70: 65 6c 6c 20 6b 6e 65 6c 6c 73 20 6b 6e 65 6c 74  ell knells knelt
1d80: 0a 6b 6e 65 77 20 6b 6e 69 66 65 20 6b 6e 69 66  .knew knife knif
1d90: 65 64 20 6b 6e 69 66 65 73 20 6b 6e 69 66 69 6e  ed knifes knifin
1da0: 67 20 6b 6e 69 67 68 74 20 6b 6e 69 67 68 74 65  g knight knighte
1db0: 64 20 6b 6e 69 67 68 74 68 6f 6f 64 20 6b 6e 69  d knighthood kni
1dc0: 67 68 74 69 6e 67 20 6b 6e 69 67 68 74 6c 79 0a  ghting knightly.
1dd0: 6b 6e 69 67 68 74 73 20 6b 6e 69 74 20 6b 6e 69  knights knit kni
1de0: 74 73 20 6b 6e 69 76 65 73 20 6b 6e 6f 62 20 6b  ts knives knob k
1df0: 6e 6f 62 73 20 6b 6e 6f 63 6b 20 6b 6e 6f 63 6b  nobs knock knock
1e00: 64 6f 77 6e 20 6b 6e 6f 63 6b 65 64 20 6b 6e 6f  down knocked kno
1e10: 63 6b 65 72 20 6b 6e 6f 63 6b 65 72 73 0a 6b 6e  cker knockers.kn
1e20: 6f 63 6b 69 6e 67 20 6b 6e 6f 63 6b 6f 75 74 20  ocking knockout 
1e30: 6b 6e 6f 63 6b 73 20 6b 6e 6f 6c 6c 20 6b 6e 6f  knocks knoll kno
1e40: 6c 6c 73 20 6b 6e 6f 74 20 6b 6e 6f 74 73 20 6b  lls knot knots k
1e50: 6e 6f 74 74 65 64 20 6b 6e 6f 74 74 69 6e 67 20  notted knotting 
1e60: 6b 6e 6f 77 20 6b 6e 6f 77 61 62 6c 65 0a 6b 6e  know knowable.kn
1e70: 6f 77 65 72 20 6b 6e 6f 77 68 6f 77 20 6b 6e 6f  ower knowhow kno
1e80: 77 69 6e 67 20 6b 6e 6f 77 69 6e 67 6c 79 20 6b  wing knowingly k
1e90: 6e 6f 77 6c 65 64 67 65 20 6b 6e 6f 77 6c 65 64  nowledge knowled
1ea0: 67 65 61 62 6c 65 20 6b 6e 6f 77 6e 20 6b 6e 6f  geable known kno
1eb0: 77 73 20 6b 6e 75 63 6b 6c 65 0a 6b 6e 75 63 6b  ws knuckle.knuck
1ec0: 6c 65 64 20 6b 6e 75 63 6b 6c 65 73 20 6b 6f 61  led knuckles koa
1ed0: 6c 61 20 6b 6f 73 68 65 72 20 6b 75 64 6f 0a 7d  la kosher kudo.}
1ee0: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
1ef0: 74 20 33 2e 31 20 7b 0a 20 20 43 52 45 41 54 45  t 3.1 {.  CREATE
1f00: 20 54 41 42 4c 45 20 63 6f 73 74 73 28 69 4c 61   TABLE costs(iLa
1f10: 6e 67 2c 20 63 46 72 6f 6d 2c 20 63 54 6f 2c 20  ng, cFrom, cTo, 
1f20: 69 43 6f 73 74 29 3b 0a 20 20 49 4e 53 45 52 54  iCost);.  INSERT
1f30: 20 49 4e 54 4f 20 63 6f 73 74 73 20 56 41 4c 55   INTO costs VALU
1f40: 45 53 28 30 2c 20 27 61 27 2c 20 27 65 27 2c 20  ES(0, 'a', 'e', 
1f50: 31 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  1);.  INSERT INT
1f60: 4f 20 63 6f 73 74 73 20 56 41 4c 55 45 53 28 30  O costs VALUES(0
1f70: 2c 20 27 65 27 2c 20 27 69 27 2c 20 31 29 3b 0a  , 'e', 'i', 1);.
1f80: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f    INSERT INTO co
1f90: 73 74 73 20 56 41 4c 55 45 53 28 30 2c 20 27 69  sts VALUES(0, 'i
1fa0: 27 2c 20 27 6f 27 2c 20 31 29 3b 0a 20 20 49 4e  ', 'o', 1);.  IN
1fb0: 53 45 52 54 20 49 4e 54 4f 20 63 6f 73 74 73 20  SERT INTO costs 
1fc0: 56 41 4c 55 45 53 28 30 2c 20 27 6f 27 2c 20 27  VALUES(0, 'o', '
1fd0: 75 27 2c 20 31 29 3b 0a 20 20 49 4e 53 45 52 54  u', 1);.  INSERT
1fe0: 20 49 4e 54 4f 20 63 6f 73 74 73 20 56 41 4c 55   INTO costs VALU
1ff0: 45 53 28 30 2c 20 27 75 27 2c 20 27 61 27 2c 20  ES(0, 'u', 'a', 
2000: 31 29 3b 0a 20 20 43 52 45 41 54 45 20 56 49 52  1);.  CREATE VIR
2010: 54 55 41 4c 20 54 41 42 4c 45 20 74 33 20 55 53  TUAL TABLE t3 US
2020: 49 4e 47 20 73 70 65 6c 6c 66 69 78 31 28 65 64  ING spellfix1(ed
2030: 69 74 5f 63 6f 73 74 5f 74 61 62 6c 65 3d 63 6f  it_cost_table=co
2040: 73 74 73 29 3b 0a 7d 0a 0a 64 6f 5f 74 65 73 74  sts);.}..do_test
2050: 20 33 2e 32 20 7b 0a 20 20 66 6f 72 65 61 63 68   3.2 {.  foreach
2060: 20 77 20 24 76 6f 63 61 62 20 7b 0a 20 20 20 20   w $vocab {.    
2070: 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54  execsql { INSERT
2080: 20 49 4e 54 4f 20 74 33 28 77 6f 72 64 29 20 56   INTO t3(word) V
2090: 41 4c 55 45 53 28 24 77 29 20 7d 0a 20 20 7d 0a  ALUES($w) }.  }.
20a0: 7d 20 7b 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 74  } {}..foreach {t
20b0: 6e 20 77 6f 72 64 20 72 65 73 7d 20 7b 0a 20 20  n word res} {.  
20c0: 31 20 20 20 6b 6f 73 2a 20 20 20 20 20 7b 6b 6f  1   kos*     {ko
20d0: 73 68 65 72 20 33 20 6b 69 6f 73 6b 20 34 20 6b  sher 3 kiosk 4 k
20e0: 75 64 6f 20 32 20 6b 69 73 73 20 33 20 6b 69 73  udo 2 kiss 3 kis
20f0: 73 65 64 20 33 7d 0a 20 20 32 20 20 20 6b 65 6c  sed 3}.  2   kel
2100: 6c 6a 2a 20 20 20 7b 6b 69 6c 6c 6a 6f 79 20 35  lj*   {killjoy 5
2110: 20 6b 69 6c 6c 20 34 20 6b 69 6c 6c 65 64 20 34   kill 4 killed 4
2120: 20 6b 69 6c 6c 65 72 20 34 20 6b 69 6c 6c 65 72   killer 4 killer
2130: 73 20 34 7d 0a 20 20 33 20 20 20 6b 65 6c 6c 6a  s 4}.  3   kellj
2140: 20 20 20 20 7b 6b 69 6c 6c 20 34 20 6b 69 6c 6c      {kill 4 kill
2150: 73 20 35 20 6b 69 6c 6c 6a 6f 79 20 37 20 6b 65  s 5 killjoy 7 ke
2160: 65 6c 20 34 20 6b 69 6c 6c 65 64 20 36 7d 0a 7d  el 4 killed 6}.}
2170: 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f   {.  do_execsql_
2180: 74 65 73 74 20 33 2e 32 2e 24 74 6e 20 7b 0a 20  test 3.2.$tn {. 
2190: 20 20 20 53 45 4c 45 43 54 20 77 6f 72 64 2c 20     SELECT word, 
21a0: 6d 61 74 63 68 6c 65 6e 20 46 52 4f 4d 20 74 33  matchlen FROM t3
21b0: 20 57 48 45 52 45 20 77 6f 72 64 20 4d 41 54 43   WHERE word MATC
21c0: 48 20 24 77 6f 72 64 0a 20 20 20 20 20 4f 52 44  H $word.     ORD
21d0: 45 52 20 42 59 20 73 63 6f 72 65 2c 20 77 6f 72  ER BY score, wor
21e0: 64 20 4c 49 4d 49 54 20 35 0a 20 20 7d 20 24 72  d LIMIT 5.  } $r
21f0: 65 73 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c  es.}..do_execsql
2200: 5f 74 65 73 74 20 34 2e 30 20 7b 0a 20 20 49 4e  _test 4.0 {.  IN
2210: 53 45 52 54 20 49 4e 54 4f 20 74 33 28 63 6f 6d  SERT INTO t3(com
2220: 6d 61 6e 64 29 20 56 41 4c 55 45 53 28 27 65 64  mand) VALUES('ed
2230: 69 74 5f 63 6f 73 74 5f 74 61 62 6c 65 3d 4e 55  it_cost_table=NU
2240: 4c 4c 27 29 3b 0a 7d 0a 66 6f 72 65 61 63 68 20  LL');.}.foreach 
2250: 7b 74 6e 20 77 6f 72 64 20 72 65 73 7d 20 7b 0a  {tn word res} {.
2260: 20 20 31 20 20 20 6b 6f 73 68 65 72 20 20 20 20    1   kosher    
2270: 20 7b 6b 6f 73 68 65 72 20 30 20 6b 69 73 73 65   {kosher 0 kisse
2280: 72 20 35 31 20 6b 69 73 73 65 72 73 20 37 36 20  r 51 kissers 76 
2290: 6b 69 73 73 65 64 20 31 32 36 20 6b 69 73 73 65  kissed 126 kisse
22a0: 73 20 31 32 36 7d 0a 20 20 32 20 20 20 6b 65 6c  s 126}.  2   kel
22b0: 6c 6a 20 20 20 20 20 20 7b 6b 65 65 6c 73 20 36  lj      {keels 6
22c0: 30 20 6b 69 6c 6c 6a 6f 79 20 36 38 20 6b 69 6c  0 killjoy 68 kil
22d0: 6c 73 20 38 30 20 6b 65 65 6c 20 31 32 30 20 6b  ls 80 keel 120 k
22e0: 69 6c 6c 20 31 32 35 7d 0a 20 20 33 20 20 20 6b  ill 125}.  3   k
22f0: 61 73 68 61 72 20 20 20 20 20 7b 6b 6f 73 68 65  ashar     {koshe
2300: 72 20 38 30 20 6b 69 73 73 65 72 20 39 31 20 6b  r 80 kisser 91 k
2310: 69 73 73 65 72 73 20 31 31 36 20 6b 69 73 73 65  issers 116 kisse
2320: 64 20 31 36 36 20 6b 69 73 73 65 73 20 31 36 36  d 166 kisses 166
2330: 7d 0a 7d 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73  }.} {.  do_execs
2340: 71 6c 5f 74 65 73 74 20 34 2e 31 2e 24 74 6e 20  ql_test 4.1.$tn 
2350: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 6f 72  {.    SELECT wor
2360: 64 2c 20 64 69 73 74 61 6e 63 65 20 46 52 4f 4d  d, distance FROM
2370: 20 74 33 20 57 48 45 52 45 20 77 6f 72 64 20 4d   t3 WHERE word M
2380: 41 54 43 48 20 24 77 6f 72 64 0a 20 20 20 20 20  ATCH $word.     
2390: 4f 52 44 45 52 20 42 59 20 73 63 6f 72 65 2c 20  ORDER BY score, 
23a0: 77 6f 72 64 20 4c 49 4d 49 54 20 35 0a 20 20 7d  word LIMIT 5.  }
23b0: 20 24 72 65 73 0a 7d 0a 64 6f 5f 65 78 65 63 73   $res.}.do_execs
23c0: 71 6c 5f 74 65 73 74 20 35 2e 30 20 7b 0a 20 20  ql_test 5.0 {.  
23d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 73  CREATE TABLE cos
23e0: 74 73 32 28 69 4c 61 6e 67 2c 20 63 46 72 6f 6d  ts2(iLang, cFrom
23f0: 2c 20 63 54 6f 2c 20 69 43 6f 73 74 29 3b 0a 20  , cTo, iCost);. 
2400: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 73   INSERT INTO cos
2410: 74 73 32 20 56 41 4c 55 45 53 28 30 2c 20 27 61  ts2 VALUES(0, 'a
2420: 27 2c 20 27 6f 27 2c 20 31 29 3b 0a 20 20 49 4e  ', 'o', 1);.  IN
2430: 53 45 52 54 20 49 4e 54 4f 20 63 6f 73 74 73 32  SERT INTO costs2
2440: 20 56 41 4c 55 45 53 28 30 2c 20 27 65 27 2c 20   VALUES(0, 'e', 
2450: 27 6f 27 2c 20 34 29 3b 0a 20 20 49 4e 53 45 52  'o', 4);.  INSER
2460: 54 20 49 4e 54 4f 20 63 6f 73 74 73 32 20 56 41  T INTO costs2 VA
2470: 4c 55 45 53 28 30 2c 20 27 69 27 2c 20 27 6f 27  LUES(0, 'i', 'o'
2480: 2c 20 38 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , 8);.  INSERT I
2490: 4e 54 4f 20 63 6f 73 74 73 32 20 56 41 4c 55 45  NTO costs2 VALUE
24a0: 53 28 30 2c 20 27 75 27 2c 20 27 6f 27 2c 20 31  S(0, 'u', 'o', 1
24b0: 36 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  6);.  INSERT INT
24c0: 4f 20 74 33 28 63 6f 6d 6d 61 6e 64 29 20 56 41  O t3(command) VA
24d0: 4c 55 45 53 28 27 65 64 69 74 5f 63 6f 73 74 5f  LUES('edit_cost_
24e0: 74 61 62 6c 65 3d 22 63 6f 73 74 73 32 22 27 29  table="costs2"')
24f0: 3b 0a 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 74 6e  ;.}..foreach {tn
2500: 20 77 6f 72 64 20 72 65 73 7d 20 7b 0a 20 20 31   word res} {.  1
2510: 20 20 20 6b 61 73 68 65 72 20 20 20 20 20 7b 6b     kasher     {k
2520: 6f 73 68 65 72 20 31 7d 0a 20 20 32 20 20 20 6b  osher 1}.  2   k
2530: 65 73 68 65 72 20 20 20 20 20 7b 6b 6f 73 68 65  esher     {koshe
2540: 72 20 34 7d 0a 20 20 33 20 20 20 6b 69 73 68 65  r 4}.  3   kishe
2550: 72 20 20 20 20 20 7b 6b 6f 73 68 65 72 20 38 7d  r     {kosher 8}
2560: 0a 20 20 34 20 20 20 6b 6f 73 68 65 72 20 20 20  .  4   kosher   
2570: 20 20 7b 6b 6f 73 68 65 72 20 30 7d 0a 20 20 35    {kosher 0}.  5
2580: 20 20 20 6b 75 73 68 65 72 20 20 20 20 20 7b 6b     kusher     {k
2590: 6f 73 68 65 72 20 31 36 7d 0a 7d 20 7b 0a 20 20  osher 16}.} {.  
25a0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
25b0: 35 2e 31 2e 24 74 6e 20 7b 0a 20 20 20 20 53 45  5.1.$tn {.    SE
25c0: 4c 45 43 54 20 77 6f 72 64 2c 20 64 69 73 74 61  LECT word, dista
25d0: 6e 63 65 20 46 52 4f 4d 20 74 33 20 57 48 45 52  nce FROM t3 WHER
25e0: 45 20 77 6f 72 64 20 4d 41 54 43 48 20 24 77 6f  E word MATCH $wo
25f0: 72 64 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59  rd.     ORDER BY
2600: 20 73 63 6f 72 65 2c 20 77 6f 72 64 20 4c 49 4d   score, word LIM
2610: 49 54 20 31 0a 20 20 7d 20 24 72 65 73 0a 7d 0a  IT 1.  } $res.}.
2620: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
2630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 72  -----------.# Tr
2670: 79 20 73 6f 6d 65 20 71 75 65 72 69 65 73 20 62  y some queries b
2680: 79 20 72 6f 77 69 64 2e 0a 23 0a 64 6f 5f 65 78  y rowid..#.do_ex
2690: 65 63 73 71 6c 5f 74 65 73 74 20 36 2e 31 2e 31  ecsql_test 6.1.1
26a0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 77 6f 72 64   {.  SELECT word
26b0: 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 72   FROM t3 WHERE r
26c0: 6f 77 69 64 20 3d 20 31 30 3b 0a 7d 20 7b 6b 65  owid = 10;.} {ke
26d0: 65 6e 65 72 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  ener}.do_execsql
26e0: 5f 74 65 73 74 20 36 2e 31 2e 32 20 7b 0a 20 20  _test 6.1.2 {.  
26f0: 53 45 4c 45 43 54 20 77 6f 72 64 2c 20 64 69 73  SELECT word, dis
2700: 74 61 6e 63 65 20 46 52 4f 4d 20 74 33 20 57 48  tance FROM t3 WH
2710: 45 52 45 20 72 6f 77 69 64 20 3d 20 31 30 3b 0a  ERE rowid = 10;.
2720: 7d 20 7b 6b 65 65 6e 65 72 20 7b 7d 7d 0a 64 6f  } {keener {}}.do
2730: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 36 2e  _execsql_test 6.
2740: 31 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 77  1.3 {.  SELECT w
2750: 6f 72 64 2c 20 64 69 73 74 61 6e 63 65 20 46 52  ord, distance FR
2760: 4f 4d 20 74 33 20 57 48 45 52 45 20 72 6f 77 69  OM t3 WHERE rowi
2770: 64 20 3d 20 31 30 20 41 4e 44 20 77 6f 72 64 20  d = 10 AND word 
2780: 4d 41 54 43 48 20 27 6b 69 69 6e 65 72 27 3b 0a  MATCH 'kiiner';.
2790: 7d 20 7b 6b 65 65 6e 65 72 20 33 30 30 7d 0a 0a  } {keener 300}..
27a0: 69 66 63 61 70 61 62 6c 65 20 74 72 61 63 65 20  ifcapable trace 
27b0: 7b 0a 20 20 70 72 6f 63 20 74 72 61 63 65 5f 63  {.  proc trace_c
27c0: 61 6c 6c 62 61 63 6b 20 7b 73 71 6c 7d 20 7b 0a  allback {sql} {.
27d0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string 
27e0: 72 61 6e 67 65 20 24 73 71 6c 20 30 20 32 5d 20  range $sql 0 2] 
27f0: 3d 3d 20 22 2d 2d 20 22 7d 20 7b 0a 20 20 20 20  == "-- "} {.    
2800: 20 20 6c 61 70 70 65 6e 64 20 3a 3a 74 72 61 63    lappend ::trac
2810: 65 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20  e [string range 
2820: 24 73 71 6c 20 33 20 65 6e 64 5d 0a 20 20 20 20  $sql 3 end].    
2830: 7d 0a 20 20 7d 0a 20 20 0a 20 20 70 72 6f 63 20  }.  }.  .  proc 
2840: 64 6f 5f 74 72 61 63 65 73 71 6c 5f 74 65 73 74  do_tracesql_test
2850: 20 7b 74 6e 20 73 71 6c 20 7b 72 65 73 20 7b 7d   {tn sql {res {}
2860: 7d 7d 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 74  }} {.    set ::t
2870: 72 61 63 65 20 5b 6c 69 73 74 5d 0a 20 20 20 20  race [list].    
2880: 75 70 6c 65 76 65 6c 20 5b 6c 69 73 74 20 64 6f  uplevel [list do
2890: 5f 74 65 73 74 20 24 74 6e 20 5b 73 75 62 73 74  _test $tn [subst
28a0: 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 7b 0a 20   -nocommands {. 
28b0: 20 20 20 20 20 73 65 74 20 76 61 6c 73 20 5b 65       set vals [e
28c0: 78 65 63 73 71 6c 20 7b 24 73 71 6c 7d 5d 0a 20  xecsql {$sql}]. 
28d0: 20 20 20 20 20 63 6f 6e 63 61 74 20 5b 73 65 74       concat [set
28e0: 20 76 61 6c 73 5d 20 5b 73 65 74 20 3a 3a 74 72   vals] [set ::tr
28f0: 61 63 65 5d 0a 20 20 20 20 7d 5d 20 5b 6c 69 73  ace].    }] [lis
2900: 74 20 7b 2a 7d 24 72 65 73 5d 5d 0a 20 20 7d 0a  t {*}$res]].  }.
2910: 20 20 0a 20 20 64 62 20 74 72 61 63 65 20 74 72    .  db trace tr
2920: 61 63 65 5f 63 61 6c 6c 62 61 63 6b 0a 20 20 64  ace_callback.  d
2930: 6f 5f 74 72 61 63 65 73 71 6c 5f 74 65 73 74 20  o_tracesql_test 
2940: 36 2e 32 2e 31 20 7b 0a 20 20 20 20 53 45 4c 45  6.2.1 {.    SELE
2950: 43 54 20 77 6f 72 64 20 46 52 4f 4d 20 74 33 20  CT word FROM t3 
2960: 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 31 30  WHERE rowid = 10
2970: 3b 0a 20 20 7d 20 7b 6b 65 65 6e 65 72 0a 20 20  ;.  } {keener.  
2980: 20 20 7b 53 45 4c 45 43 54 20 77 6f 72 64 2c 20    {SELECT word, 
2990: 72 61 6e 6b 2c 20 4e 55 4c 4c 2c 20 6c 61 6e 67  rank, NULL, lang
29a0: 69 64 2c 20 69 64 20 46 52 4f 4d 20 22 6d 61 69  id, id FROM "mai
29b0: 6e 22 2e 22 74 33 5f 76 6f 63 61 62 22 20 57 48  n"."t3_vocab" WH
29c0: 45 52 45 20 72 6f 77 69 64 3d 3f 7d 0a 20 20 7d  ERE rowid=?}.  }
29d0: 0a 20 20 64 6f 5f 74 72 61 63 65 73 71 6c 5f 74  .  do_tracesql_t
29e0: 65 73 74 20 36 2e 32 2e 32 20 7b 0a 20 20 20 20  est 6.2.2 {.    
29f0: 53 45 4c 45 43 54 20 77 6f 72 64 2c 20 64 69 73  SELECT word, dis
2a00: 74 61 6e 63 65 20 46 52 4f 4d 20 74 33 20 57 48  tance FROM t3 WH
2a10: 45 52 45 20 72 6f 77 69 64 20 3d 20 31 30 3b 0a  ERE rowid = 10;.
2a20: 20 20 7d 20 7b 6b 65 65 6e 65 72 20 7b 7d 0a 20    } {keener {}. 
2a30: 20 20 20 7b 53 45 4c 45 43 54 20 77 6f 72 64 2c     {SELECT word,
2a40: 20 72 61 6e 6b 2c 20 4e 55 4c 4c 2c 20 6c 61 6e   rank, NULL, lan
2a50: 67 69 64 2c 20 69 64 20 46 52 4f 4d 20 22 6d 61  gid, id FROM "ma
2a60: 69 6e 22 2e 22 74 33 5f 76 6f 63 61 62 22 20 57  in"."t3_vocab" W
2a70: 48 45 52 45 20 72 6f 77 69 64 3d 3f 7d 0a 20 20  HERE rowid=?}.  
2a80: 7d 0a 20 20 64 6f 5f 74 72 61 63 65 73 71 6c 5f  }.  do_tracesql_
2a90: 74 65 73 74 20 36 2e 32 2e 33 20 7b 0a 20 20 20  test 6.2.3 {.   
2aa0: 20 53 45 4c 45 43 54 20 77 6f 72 64 2c 20 64 69   SELECT word, di
2ab0: 73 74 61 6e 63 65 20 46 52 4f 4d 20 74 33 20 57  stance FROM t3 W
2ac0: 48 45 52 45 20 72 6f 77 69 64 20 3d 20 31 30 20  HERE rowid = 10 
2ad0: 41 4e 44 20 77 6f 72 64 20 4d 41 54 43 48 20 27  AND word MATCH '
2ae0: 6b 69 69 6e 65 72 27 3b 0a 20 20 7d 20 7b 6b 65  kiiner';.  } {ke
2af0: 65 6e 65 72 20 33 30 30 0a 20 20 20 20 7b 53 45  ener 300.    {SE
2b00: 4c 45 43 54 20 69 64 2c 20 77 6f 72 64 2c 20 72  LECT id, word, r
2b10: 61 6e 6b 2c 20 6b 31 20 20 46 52 4f 4d 20 22 6d  ank, k1  FROM "m
2b20: 61 69 6e 22 2e 22 74 33 5f 76 6f 63 61 62 22 20  ain"."t3_vocab" 
2b30: 57 48 45 52 45 20 6c 61 6e 67 69 64 3d 30 20 41  WHERE langid=0 A
2b40: 4e 44 20 6b 32 3e 3d 3f 31 20 41 4e 44 20 6b 32  ND k2>=?1 AND k2
2b50: 3c 3f 32 7d 0a 20 20 7d 0a 7d 0a 0a 0a 0a 0a 66  <?2}.  }.}.....f
2b60: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.