SQLite4
Hex Artifact Content
Not logged in

Artifact 2ea3fa028f8d9523f9c33dd8acc4555d567ea4ac:


0000: 23 20 32 30 31 30 20 4f 63 74 6f 62 65 72 20 31  # 2010 October 1
0010: 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  5.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an you give..#.#
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 0a 0a 73 65 74 20 74 65 73  *******..set tes
0170: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
0180: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
0190: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
01a0: 72 2e 74 63 6c 0a 73 6f 75 72 63 65 20 24 74 65  r.tcl.source $te
01b0: 73 74 64 69 72 2f 6d 61 6c 6c 6f 63 5f 63 6f 6d  stdir/malloc_com
01c0: 6d 6f 6e 2e 74 63 6c 0a 0a 69 66 63 61 70 61 62  mon.tcl..ifcapab
01d0: 6c 65 20 21 66 74 73 33 20 7b 0a 20 20 66 69 6e  le !fts3 {.  fin
01e0: 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72  ish_test.  retur
01f0: 6e 0a 7d 0a 0a 73 65 74 20 73 71 6c 69 74 65 5f  n.}..set sqlite_
0200: 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61 72 65  fts3_enable_pare
0210: 6e 74 68 65 73 65 73 20 31 0a 0a 73 65 74 20 66  ntheses 1..set f
0220: 74 73 33 5f 73 69 6d 70 6c 65 5f 64 65 66 65 72  ts3_simple_defer
0230: 72 65 64 5f 74 6f 6b 65 6e 73 5f 6f 6e 6c 79 20  red_tokens_only 
0240: 31 0a 0a 73 65 74 20 3a 3a 74 65 73 74 70 72 65  1..set ::testpre
0250: 66 69 78 20 66 74 73 33 64 65 66 65 72 0a 0a 23  fix fts3defer..#
0260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73  ----------.# Tes
02b0: 74 20 63 61 73 65 73 20 66 74 73 33 64 65 66 65  t cases fts3defe
02c0: 72 2d 31 2e 2a 20 61 72 65 20 74 68 65 20 22 77  r-1.* are the "w
02d0: 61 72 6d 20 62 6f 64 79 22 20 63 61 73 65 73 2e  arm body" cases.
02e0: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   The database co
02f0: 6e 74 61 69 6e 73 0a 23 20 6f 6e 65 20 72 6f 77  ntains.# one row
0300: 20 77 69 74 68 20 31 35 30 30 30 20 69 6e 73 74   with 15000 inst
0310: 61 6e 63 65 73 20 6f 66 20 74 68 65 20 74 6f 6b  ances of the tok
0320: 65 6e 20 22 61 22 2e 20 54 68 69 73 20 6d 61 6b  en "a". This mak
0330: 65 73 20 74 68 65 20 64 6f 63 6c 69 73 74 20 66  es the doclist f
0340: 6f 72 0a 23 20 22 61 22 20 73 6f 20 6c 61 72 67  or.# "a" so larg
0350: 65 20 74 68 61 74 20 46 54 53 33 20 77 69 6c 6c  e that FTS3 will
0360: 20 61 76 6f 69 64 20 6c 6f 61 64 69 6e 67 20 69   avoid loading i
0370: 74 20 69 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e  t in most cases.
0380: 0a 23 0a 23 20 54 6f 20 73 68 6f 77 20 74 68 69  .#.# To show thi
0390: 73 2c 20 74 65 73 74 20 63 61 73 65 73 20 66 74  s, test cases ft
03a0: 73 33 64 65 66 65 72 2d 31 2e 32 2e 2a 20 65 78  s3defer-1.2.* ex
03b0: 65 63 75 74 65 20 61 20 62 75 6e 63 68 20 6f 66  ecute a bunch of
03c0: 20 46 54 53 33 20 71 75 65 72 69 65 73 0a 23 20   FTS3 queries.# 
03d0: 69 6e 76 6f 6c 76 69 6e 67 20 74 6f 6b 65 6e 20  involving token 
03e0: 22 61 22 2e 20 54 68 65 6e 2c 20 66 74 73 33 64  "a". Then, fts3d
03f0: 65 66 65 72 2d 31 2e 33 2e 2a 20 72 65 70 6c 61  efer-1.3.* repla
0400: 63 65 73 20 74 68 65 20 64 6f 63 6c 69 73 74 20  ces the doclist 
0410: 66 6f 72 20 74 6f 6b 65 6e 0a 23 20 22 61 22 20  for token.# "a" 
0420: 77 69 74 68 20 61 6c 6c 20 7a 65 72 6f 65 73 20  with all zeroes 
0430: 61 6e 64 20 66 74 73 33 64 65 66 65 72 2d 31 2e  and fts3defer-1.
0440: 34 2e 2a 20 72 65 70 65 61 74 73 20 74 68 65 20  4.* repeats the 
0450: 74 65 73 74 73 20 66 72 6f 6d 20 31 2e 32 2e 20  tests from 1.2. 
0460: 49 66 0a 23 20 74 68 65 20 74 65 73 74 73 20 73  If.# the tests s
0470: 74 69 6c 6c 20 77 6f 72 6b 2c 20 77 65 20 63 61  till work, we ca
0480: 6e 20 63 6f 6e 63 6c 75 64 65 20 74 68 61 74 20  n conclude that 
0490: 74 68 65 20 64 6f 63 6c 69 73 74 20 66 6f 72 20  the doclist for 
04a0: 22 61 22 20 77 61 73 20 6e 6f 74 0a 23 20 75 73  "a" was not.# us
04b0: 65 64 2e 0a 23 20 0a 0a 73 65 74 20 61 61 61 20  ed..# ..set aaa 
04c0: 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 22  [string repeat "
04d0: 61 20 22 20 31 35 30 30 30 5d 0a 0a 64 6f 5f 65  a " 15000]..do_e
04e0: 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 20  xecsql_test 1.1 
04f0: 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55  {.  CREATE VIRTU
0500: 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e  AL TABLE t1 USIN
0510: 47 20 66 74 73 34 3b 0a 20 20 42 45 47 49 4e 3b  G fts4;.  BEGIN;
0520: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0530: 20 74 31 20 56 41 4c 55 45 53 28 27 74 68 69 73   t1 VALUES('this
0540: 20 69 73 20 61 20 64 6f 67 27 29 3b 0a 20 20 20   is a dog');.   
0550: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0560: 56 41 4c 55 45 53 28 27 61 6e 20 69 6e 73 74 61  VALUES('an insta
0570: 6e 63 65 20 6f 66 20 61 20 70 68 72 61 73 65 27  nce of a phrase'
0580: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0590: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 61 6e  TO t1 VALUES('an
05a0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 61 20 6c   instance of a l
05b0: 6f 6e 67 65 72 20 70 68 72 61 73 65 27 29 3b 0a  onger phrase');.
05c0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
05d0: 74 31 20 56 41 4c 55 45 53 28 24 61 61 61 29 3b  t1 VALUES($aaa);
05e0: 0a 20 20 43 4f 4d 4d 49 54 3b 0a 7d 20 7b 7d 0a  .  COMMIT;.} {}.
05f0: 0a 73 65 74 20 74 65 73 74 73 20 7b 0a 20 20 31  .set tests {.  1
0600: 20 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 20    {SELECT rowid 
0610: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31  FROM t1 WHERE t1
0620: 20 4d 41 54 43 48 20 27 22 61 20 64 6f 67 22 27   MATCH '"a dog"'
0630: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
0640: 20 20 7b 31 7d 0a 20 20 32 20 20 7b 53 45 4c 45    {1}.  2  {SELE
0650: 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31  CT rowid FROM t1
0660: 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20   WHERE t1 MATCH 
0670: 27 22 69 73 20 61 20 64 6f 67 22 27 7d 20 20 20  '"is a dog"'}   
0680: 20 20 20 20 20 20 20 20 20 20 20 7b 31 7d 0a 20             {1}. 
0690: 20 33 20 20 7b 53 45 4c 45 43 54 20 72 6f 77 69   3  {SELECT rowi
06a0: 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  d FROM t1 WHERE 
06b0: 74 31 20 4d 41 54 43 48 20 27 22 61 20 6c 6f 6e  t1 MATCH '"a lon
06c0: 67 65 72 20 70 68 72 61 73 65 22 27 7d 20 20 20  ger phrase"'}   
06d0: 20 20 20 20 7b 33 7d 0a 20 20 34 20 20 7b 53 45      {3}.  4  {SE
06e0: 4c 45 43 54 20 73 6e 69 70 70 65 74 28 74 31 29  LECT snippet(t1)
06f0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74   FROM t1 WHERE t
0700: 31 20 4d 41 54 43 48 20 27 22 61 20 6c 6f 6e 67  1 MATCH '"a long
0710: 65 72 20 70 68 72 61 73 65 22 27 7d 20 20 0a 20  er phrase"'}  . 
0720: 20 20 20 20 7b 22 61 6e 20 69 6e 73 74 61 6e 63      {"an instanc
0730: 65 20 6f 66 20 3c 62 3e 61 3c 2f 62 3e 20 3c 62  e of <b>a</b> <b
0740: 3e 6c 6f 6e 67 65 72 3c 2f 62 3e 20 3c 62 3e 70  >longer</b> <b>p
0750: 68 72 61 73 65 3c 2f 62 3e 22 7d 0a 20 20 35 20  hrase</b>"}.  5 
0760: 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46   {SELECT rowid F
0770: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20  ROM t1 WHERE t1 
0780: 4d 41 54 43 48 20 27 61 20 64 6f 67 27 7d 20 20  MATCH 'a dog'}  
0790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07a0: 20 7b 31 7d 0a 7d 0a 0a 64 6f 5f 73 65 6c 65 63   {1}.}..do_selec
07b0: 74 5f 74 65 73 74 73 20 31 2e 32 20 24 74 65 73  t_tests 1.2 $tes
07c0: 74 73 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ts..do_execsql_t
07d0: 65 73 74 20 31 2e 33 20 7b 0a 20 20 53 45 4c 45  est 1.3 {.  SELE
07e0: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
07f0: 20 74 31 5f 73 65 67 6d 65 6e 74 73 20 57 48 45   t1_segments WHE
0800: 52 45 20 6c 65 6e 67 74 68 28 62 6c 6f 63 6b 29  RE length(block)
0810: 3e 31 30 30 30 30 3b 0a 20 20 55 50 44 41 54 45  >10000;.  UPDATE
0820: 20 74 31 5f 73 65 67 6d 65 6e 74 73 20 0a 20 20   t1_segments .  
0830: 20 20 53 45 54 20 62 6c 6f 63 6b 20 3d 20 7a 65    SET block = ze
0840: 72 6f 62 6c 6f 62 28 6c 65 6e 67 74 68 28 62 6c  roblob(length(bl
0850: 6f 63 6b 29 29 20 0a 20 20 20 20 57 48 45 52 45  ock)) .    WHERE
0860: 20 6c 65 6e 67 74 68 28 62 6c 6f 63 6b 29 3e 31   length(block)>1
0870: 30 30 30 30 3b 0a 7d 20 7b 31 7d 0a 0a 64 6f 5f  0000;.} {1}..do_
0880: 73 65 6c 65 63 74 5f 74 65 73 74 73 20 31 2e 34  select_tests 1.4
0890: 20 24 74 65 73 74 73 0a 0a 23 20 44 72 6f 70 20   $tests..# Drop 
08a0: 74 68 65 20 74 61 62 6c 65 2e 20 49 74 20 69 73  the table. It is
08b0: 20 63 6f 72 72 75 70 74 20 6e 6f 77 20 61 6e 79   corrupt now any
08c0: 68 6f 77 2c 20 73 6f 20 6e 6f 74 20 75 73 65 66  how, so not usef
08d0: 75 6c 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e  ul for subsequen
08e0: 74 20 74 65 73 74 73 2e 0a 23 0a 64 6f 5f 65 78  t tests..#.do_ex
08f0: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 35 20 7b  ecsql_test 1.5 {
0900: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 20 7d   DROP TABLE t1 }
0910: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
0920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
0960: 54 68 65 73 65 20 74 65 73 74 73 20 2d 20 66 74  These tests - ft
0970: 73 33 64 65 66 65 72 2d 32 2e 2a 20 2d 20 61 72  s3defer-2.* - ar
0980: 65 20 6d 6f 72 65 20 72 69 67 6f 72 6f 75 73 2e  e more rigorous.
0990: 20 54 68 65 79 20 74 65 73 74 20 74 68 61 74 20   They test that 
09a0: 66 6f 72 20 61 0a 23 20 76 61 72 69 65 74 79 20  for a.# variety 
09b0: 6f 66 20 71 75 65 72 69 65 73 2c 20 46 54 53 33  of queries, FTS3
09c0: 20 61 6e 64 20 46 54 53 34 20 72 65 74 75 72 6e   and FTS4 return
09d0: 20 74 68 65 20 73 61 6d 65 20 72 65 73 75 6c 74   the same result
09e0: 73 2e 20 41 6e 64 20 74 68 61 74 20 0a 23 20 7a  s. And that .# z
09f0: 65 72 6f 69 6e 67 20 74 68 65 20 76 65 72 79 20  eroing the very 
0a00: 6c 61 72 67 65 20 64 6f 63 6c 69 73 74 73 20 74  large doclists t
0a10: 68 61 74 20 46 54 53 34 20 64 6f 65 73 20 6e 6f  hat FTS4 does no
0a20: 74 20 6c 6f 61 64 20 64 6f 65 73 20 6e 6f 74 20  t load does not 
0a30: 63 68 61 6e 67 65 0a 23 20 74 68 65 20 72 65 73  change.# the res
0a40: 75 6c 74 73 2e 0a 23 0a 23 20 54 68 65 79 20 75  ults..#.# They u
0a50: 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  se the following
0a60: 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 6c 79   pseudo-randomly
0a70: 20 67 65 6e 65 72 61 74 65 64 20 64 6f 63 75 6d   generated docum
0a80: 65 6e 74 20 64 61 74 61 2e 20 54 68 65 0a 23 20  ent data. The.# 
0a90: 74 6f 6b 65 6e 73 20 22 7a 6d 22 20 61 6e 64 20  tokens "zm" and 
0aa0: 22 6a 6b 22 20 61 72 65 20 65 73 70 65 63 69 61  "jk" are especia
0ab0: 6c 6c 79 20 63 6f 6d 6d 6f 6e 20 69 6e 20 74 68  lly common in th
0ac0: 69 73 20 64 61 74 61 73 65 74 2e 20 41 64 64 69  is dataset. Addi
0ad0: 74 69 6f 6e 61 6c 6c 79 2c 0a 23 20 74 77 6f 20  tionally,.# two 
0ae0: 64 6f 63 75 6d 65 6e 74 73 20 61 72 65 20 61 64  documents are ad
0af0: 64 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  ded to the pseud
0b00: 6f 2d 72 61 6e 64 6f 6d 20 64 61 74 61 20 62 65  o-random data be
0b10: 66 6f 72 65 20 69 74 20 69 73 20 6c 6f 61 64 65  fore it is loade
0b20: 64 0a 23 20 69 6e 74 6f 20 46 54 53 34 20 63 6f  d.# into FTS4 co
0b30: 6e 74 61 69 6e 69 6e 67 20 31 30 30 2c 30 30 30  ntaining 100,000
0b40: 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 74 68   instances of th
0b50: 65 20 22 7a 6d 22 20 61 6e 64 20 22 6a 6b 22 20  e "zm" and "jk" 
0b60: 74 6f 6b 65 6e 73 2e 20 54 68 69 73 0a 23 20 6d  tokens. This.# m
0b70: 61 6b 65 73 20 74 68 65 20 64 6f 63 6c 69 73 74  akes the doclist
0b80: 73 20 66 6f 72 20 74 68 6f 73 65 20 74 6f 6b 65  s for those toke
0b90: 6e 73 20 73 6f 20 6c 61 72 67 65 20 74 68 61 74  ns so large that
0ba0: 20 46 54 53 34 20 61 76 6f 69 64 73 20 6c 6f 61   FTS4 avoids loa
0bb0: 64 69 6e 67 20 74 68 65 6d 0a 23 20 69 6e 74 6f  ding them.# into
0bc0: 20 6d 65 6d 6f 72 79 20 69 66 20 70 6f 73 73 69   memory if possi
0bd0: 62 6c 65 2e 0a 23 0a 73 65 74 20 64 61 74 61 20  ble..#.set data 
0be0: 5b 6c 69 73 74 5d 0a 6c 61 70 70 65 6e 64 20 64  [list].lappend d
0bf0: 61 74 61 20 5b 73 74 72 69 6e 67 20 72 65 70 65  ata [string repe
0c00: 61 74 20 22 7a 6d 20 22 20 31 30 30 30 30 30 5d  at "zm " 100000]
0c10: 0a 6c 61 70 70 65 6e 64 20 64 61 74 61 20 5b 73  .lappend data [s
0c20: 74 72 69 6e 67 20 72 65 70 65 61 74 20 22 6a 6b  tring repeat "jk
0c30: 20 22 20 31 30 30 30 30 30 5d 0a 6c 61 70 70 65   " 100000].lappe
0c40: 6e 64 20 64 61 74 61 20 7b 2a 7d 7b 0a 20 20 22  nd data {*}{.  "
0c50: 7a 6d 20 7a 6d 20 61 67 6d 63 6b 75 69 75 20 75  zm zm agmckuiu u
0c60: 68 7a 71 20 6e 73 61 62 20 6a 6b 20 72 72 6b 78  hzq nsab jk rrkx
0c70: 20 64 75 73 7a 65 6d 6d 7a 6c 20 68 79 71 20 6a   duszemmzl hyq j
0c80: 6b 22 0a 20 20 22 6a 6b 20 75 68 7a 71 20 7a 6d  k".  "jk uhzq zm
0c90: 20 7a 6d 20 72 67 70 7a 6d 6c 6e 6d 64 20 7a 6d   zm rgpzmlnmd zm
0ca0: 20 7a 6b 20 6a 6b 20 6a 6b 20 7a 6d 22 0a 20 20   zk jk jk zm".  
0cb0: 22 64 75 73 7a 65 6d 6d 7a 6c 20 7a 6d 20 6a 6b  "duszemmzl zm jk
0cc0: 20 78 6c 64 6c 70 79 20 7a 6d 20 6a 6b 20 73 62   xldlpy zm jk sb
0cd0: 70 74 6f 61 20 78 68 20 6a 6b 20 78 6c 64 6c 70  ptoa xh jk xldlp
0ce0: 79 22 0a 20 20 22 7a 6d 20 78 68 20 7a 6d 20 78  y".  "zm xh zm x
0cf0: 71 66 20 61 7a 61 76 77 6d 20 6a 6b 20 6a 6b 20  qf azavwm jk jk 
0d00: 74 72 71 64 20 72 67 70 7a 6d 6c 6e 6d 64 20 6a  trqd rgpzmlnmd j
0d10: 6b 22 0a 20 20 22 7a 6d 20 76 77 71 20 75 72 76  k".  "zm vwq urv
0d20: 79 73 62 6e 79 6b 6b 20 75 62 77 72 66 71 6e 62  ysbnykk ubwrfqnb
0d30: 6a 66 20 7a 6b 20 6c 73 7a 20 6a 6b 20 64 6f 69  jf zk lsz jk doi
0d40: 77 61 76 68 77 77 6f 20 6a 6b 20 6a 6b 22 0a 20  wavhwwo jk jk". 
0d50: 20 22 6a 6b 20 78 64 75 76 66 68 6b 20 6f 72 70   "jk xduvfhk orp
0d60: 66 61 77 70 78 20 7a 6b 68 64 76 6b 77 20 6a 6b  fawpx zkhdvkw jk
0d70: 20 6d 6a 70 61 76 6a 75 68 77 20 7a 6d 20 6a 6b   mjpavjuhw zm jk
0d80: 20 64 75 73 7a 65 6d 6d 7a 6c 20 7a 6d 22 0a 20   duszemmzl zm". 
0d90: 20 22 6a 6b 20 69 67 6a 75 20 6a 6b 20 6a 6b 20   "jk igju jk jk 
0da0: 7a 6d 20 68 6d 6a 66 20 78 68 20 7a 6d 20 67 77  zm hmjf xh zm gw
0db0: 64 66 68 77 75 72 78 20 7a 6b 22 0a 20 20 22 76  dfhwurx zk".  "v
0dc0: 67 73 6c 64 20 6a 6b 20 6a 6b 20 7a 6d 20 68 72  gsld jk jk zm hr
0dd0: 6c 69 70 64 6d 20 6a 6e 20 7a 6d 20 7a 73 6d 68  lipdm jn zm zsmh
0de0: 6e 66 20 76 67 73 6c 64 20 64 75 73 7a 65 6d 6d  nf vgsld duszemm
0df0: 7a 6c 22 0a 20 20 22 67 74 75 69 65 78 7a 73 75  zl".  "gtuiexzsu
0e00: 20 61 61 79 78 70 6d 76 65 20 7a 6d 20 7a 6d 20   aayxpmve zm zm 
0e10: 7a 6d 20 64 72 69 72 20 73 63 70 67 6e 61 20 78  zm drir scpgna x
0e20: 68 20 61 7a 61 76 77 6d 20 75 68 7a 71 22 0a 20  h azavwm uhzq". 
0e30: 20 22 66 61 72 6c 65 68 64 68 71 20 68 6b 66 6f   "farlehdhq hkfo
0e40: 75 64 7a 66 74 71 20 69 67 6a 75 20 64 75 73 7a  udzftq igju dusz
0e50: 65 6d 6d 7a 6c 20 78 6e 78 68 66 20 65 77 6c 65  emmzl xnxhf ewle
0e60: 20 7a 6d 20 68 72 6c 69 70 64 6d 20 75 72 76 79   zm hrlipdm urvy
0e70: 73 62 6e 79 6b 6b 20 6b 6e 22 0a 20 20 22 78 6e  sbnykk kn".  "xn
0e80: 78 68 66 20 6a 6b 20 6a 6b 20 61 67 6d 63 6b 75  xhf jk jk agmcku
0e90: 69 75 20 64 75 73 7a 65 6d 6d 7a 6c 20 6a 6b 20  iu duszemmzl jk 
0ea0: 7a 6d 20 7a 6d 20 6a 6b 20 76 67 73 6c 64 22 0a  zm zm jk vgsld".
0eb0: 20 20 22 7a 6d 20 7a 6d 20 7a 6d 20 6a 6b 20 6a    "zm zm zm jk j
0ec0: 6b 20 75 72 76 79 73 62 6e 79 6b 6b 20 6f 67 74  k urvysbnykk ogt
0ed0: 74 62 79 6b 76 74 20 7a 6d 20 7a 6d 20 6a 6b 22  tbykvt zm zm jk"
0ee0: 0a 20 20 22 69 61 73 72 71 67 71 76 20 7a 6d 20  .  "iasrqgqv zm 
0ef0: 61 7a 61 76 77 6d 20 7a 69 64 68 78 68 62 74 76  azavwm zidhxhbtv
0f00: 20 6a 6b 20 6a 6b 20 6d 6a 70 61 76 6a 75 68 77   jk jk mjpavjuhw
0f10: 20 7a 6d 20 7a 6d 20 61 6a 6d 76 63 79 64 79 22   zm zm ajmvcydy"
0f20: 0a 20 20 22 72 67 70 7a 6d 6c 6e 6d 64 20 74 6d  .  "rgpzmlnmd tm
0f30: 74 20 6d 6a 70 61 76 6a 75 68 77 20 78 68 20 69  t mjpavjuhw xh i
0f40: 67 6a 75 20 6a 6b 20 61 7a 61 76 77 6d 20 66 69  gju jk azavwm fi
0f50: 62 6f 6b 64 72 79 20 76 67 73 6c 64 20 6f 66 6d  bokdry vgsld ofm
0f60: 22 0a 20 20 22 7a 6d 20 6a 6b 20 76 67 73 6c 64  ".  "zm jk vgsld
0f70: 20 6a 6b 20 78 68 20 6a 6b 20 63 73 6a 71 78 68   jk xh jk csjqxh
0f80: 67 6a 20 64 72 69 72 20 6a 6b 20 70 6d 72 62 22  gj drir jk pmrb"
0f90: 0a 20 20 22 78 68 20 6a 6b 20 6a 6b 20 7a 6d 20  .  "xh jk jk zm 
0fa0: 72 72 6b 78 20 64 75 73 7a 65 6d 6d 7a 6c 20 6d  rrkx duszemmzl m
0fb0: 6a 70 61 76 6a 75 68 77 20 78 6c 64 6c 70 79 20  jpavjuhw xldlpy 
0fc0: 69 67 6a 75 20 7a 6d 22 0a 20 20 22 6a 6b 20 68  igju zm".  "jk h
0fd0: 6b 66 6f 75 64 7a 66 74 71 20 7a 66 20 72 72 6b  kfoudzftq zf rrk
0fe0: 78 20 77 64 6d 79 20 6a 75 70 6b 20 6a 6b 20 7a  x wdmy jupk jk z
0ff0: 6d 20 75 72 76 79 73 62 6e 79 6b 6b 20 6e 70 79  m urvysbnykk npy
1000: 77 67 64 76 67 7a 22 0a 20 20 22 7a 6d 20 6a 6b  wgdvgz".  "zm jk
1010: 20 7a 6d 20 7a 6d 20 7a 68 62 72 7a 61 64 62 20   zm zm zhbrzadb 
1020: 75 65 6e 76 62 6d 20 61 61 79 78 70 6d 76 65 20  uenvbm aayxpmve 
1030: 75 72 76 79 73 62 6e 79 6b 6b 20 64 75 73 7a 65  urvysbnykk dusze
1040: 6d 6d 7a 6c 20 6a 6b 22 0a 20 20 22 75 65 6e 76  mmzl jk".  "uenv
1050: 62 6d 20 6a 6b 20 7a 6d 20 66 78 77 20 78 68 20  bm jk zm fxw xh 
1060: 62 64 69 6c 77 6d 6a 77 20 6d 6a 70 61 76 6a 75  bdilwmjw mjpavju
1070: 68 77 20 75 76 20 6a 6b 20 7a 6d 22 0a 20 20 22  hw uv jk zm".  "
1080: 6e 6b 20 6a 6b 20 62 6e 68 63 20 70 61 68 6c 64  nk jk bnhc pahld
1090: 73 20 6a 6b 20 69 67 6a 75 20 64 7a 61 64 6e 71  s jk igju dzadnq
10a0: 7a 70 72 72 20 6a 6b 20 6a 6b 20 6a 6b 22 0a 20  zprr jk jk jk". 
10b0: 20 22 75 68 7a 71 20 75 76 20 7a 6d 20 64 75 73   "uhzq uv zm dus
10c0: 7a 65 6d 6d 7a 6c 20 74 6c 71 69 78 20 6a 6b 20  zemmzl tlqix jk 
10d0: 6a 6b 20 78 68 20 6a 6b 20 7a 6d 22 0a 20 20 22  jk xh jk zm".  "
10e0: 6a 6b 20 7a 6d 20 61 67 6d 63 6b 75 69 75 20 75  jk zm agmckuiu u
10f0: 72 76 79 73 62 6e 79 6b 6b 20 6a 6b 20 6a 6b 20  rvysbnykk jk jk 
1100: 7a 6d 20 7a 6d 20 6a 6b 20 6a 6b 22 0a 20 20 22  zm zm jk jk".  "
1110: 61 7a 61 76 77 6d 20 6d 6a 70 61 76 6a 75 68 77  azavwm mjpavjuhw
1120: 20 6c 73 67 73 68 6e 20 74 72 71 64 20 78 6c 64   lsgshn trqd xld
1130: 6c 70 79 20 6f 67 79 61 76 6a 76 76 20 61 67 6d  lpy ogyavjvv agm
1140: 63 6b 75 69 75 20 72 79 76 77 77 68 6c 62 63 20  ckuiu ryvwwhlbc 
1150: 6a 6b 20 6a 6b 22 0a 20 20 22 74 6d 74 20 6a 6b  jk jk".  "tmt jk
1160: 20 7a 6b 20 7a 6d 20 61 7a 61 76 77 6d 20 6f 66   zk zm azavwm of
1170: 6d 20 61 63 70 67 69 6d 20 62 76 67 69 6d 6a 69  m acpgim bvgimji
1180: 6b 20 69 61 73 72 71 67 71 76 20 77 75 76 61 6a  k iasrqgqv wuvaj
1190: 68 77 71 7a 22 0a 20 20 22 69 67 6a 75 20 6f 67  hwqz".  "igju og
11a0: 79 61 76 6a 76 76 20 78 72 62 64 61 6b 20 72 72  yavjvv xrbdak rr
11b0: 6b 78 20 66 69 62 6f 6b 64 72 79 20 7a 66 20 75  kx fibokdry zf u
11c0: 6a 66 68 6d 72 6c 6c 71 20 6a 6b 20 7a 6d 20 68  jfhmrllq jk zm h
11d0: 78 67 77 76 69 62 22 0a 20 20 22 7a 6d 20 70 61  xgwvib".  "zm pa
11e0: 68 6c 64 73 20 6a 6b 20 75 65 6e 76 62 6d 20 61  hlds jk uenvbm a
11f0: 61 79 78 70 6d 76 65 20 69 61 66 20 68 6d 6a 66  ayxpmve iaf hmjf
1200: 20 78 70 68 20 76 6e 6c 79 76 74 6b 67 78 20 7a   xph vnlyvtkgx z
1210: 6d 22 0a 20 20 22 6a 6b 20 78 6e 78 68 66 20 69  m".  "jk xnxhf i
1220: 67 6a 75 20 6a 6b 20 78 68 20 6a 6b 20 6e 76 66  gju jk xh jk nvf
1230: 61 73 66 68 20 7a 6d 20 6a 73 20 6a 6b 22 0a 20  asfh zm js jk". 
1240: 20 22 7a 6d 20 7a 6d 20 72 77 61 6a 20 69 67 6a   "zm zm rwaj igj
1250: 75 20 78 72 20 72 72 6b 78 20 78 6e 78 68 66 20  u xr rrkx xnxhf 
1260: 6e 76 66 61 73 66 68 20 73 6b 78 62 73 71 7a 76  nvfasfh skxbsqzv
1270: 6d 74 20 78 61 74 62 78 65 71 71 22 0a 20 20 22  mt xatbxeqq".  "
1280: 76 67 73 6c 64 20 7a 6d 20 75 6a 66 68 6d 72 6c  vgsld zm ujfhmrl
1290: 6c 71 20 75 68 7a 71 20 6f 67 79 61 76 6a 76 76  lq uhzq ogyavjvv
12a0: 20 6e 73 61 62 20 61 7a 61 76 77 6d 20 7a 6d 20   nsab azavwm zm 
12b0: 76 67 73 6c 64 20 6a 6d 66 69 71 68 77 6e 6a 67  vgsld jmfiqhwnjg
12c0: 22 0a 20 20 22 79 6d 6a 6f 79 6d 20 64 75 73 7a  ".  "ymjoym dusz
12d0: 65 6d 6d 7a 6c 20 75 72 76 79 73 62 6e 79 6b 6b  emmzl urvysbnykk
12e0: 20 61 7a 61 76 77 6d 20 6a 6b 20 6a 6d 66 69 71   azavwm jk jmfiq
12f0: 68 77 6e 6a 67 20 62 75 20 71 63 64 7a 69 71 6f  hwnjg bu qcdziqo
1300: 6d 71 6b 20 76 6e 6c 79 76 74 6b 67 78 22 0a 20  mqk vnlyvtkgx". 
1310: 20 22 7a 6d 20 6e 62 69 6c 71 63 6e 7a 20 64 7a   "zm nbilqcnz dz
1320: 61 64 6e 71 7a 70 72 72 20 78 68 20 62 6b 66 67  adnqzprr xh bkfg
1330: 7a 73 78 6e 20 75 72 76 79 73 62 6e 79 6b 6b 20  zsxn urvysbnykk 
1340: 78 72 75 6a 66 7a 78 71 66 20 7a 6d 20 7a 66 20  xrujfzxqf zm zf 
1350: 61 67 6d 63 6b 75 69 75 22 0a 20 20 22 6a 6b 20  agmckuiu".  "jk 
1360: 75 72 76 79 73 62 6e 79 6b 6b 20 6e 76 66 61 73  urvysbnykk nvfas
1370: 66 68 20 7a 66 20 78 68 20 7a 6d 20 7a 6d 20 71  fh zf xh zm zm q
1380: 63 64 7a 69 71 6f 6d 71 6b 20 71 76 78 74 63 6c  cdziqomqk qvxtcl
1390: 67 20 77 64 6d 79 22 0a 20 20 22 66 69 62 6f 6b  g wdmy".  "fibok
13a0: 64 72 79 20 6a 6b 20 75 72 76 79 73 62 6e 79 6b  dry jk urvysbnyk
13b0: 6b 20 6a 6b 20 78 72 20 6f 73 66 66 20 7a 6d 20  k jk xr osff zm 
13c0: 63 76 6e 6e 73 6c 20 7a 6d 20 76 67 73 6c 64 22  cvnnsl zm vgsld"
13d0: 0a 20 20 22 6a 6b 20 6d 6a 70 61 76 6a 75 68 77  .  "jk mjpavjuhw
13e0: 20 68 6b 66 6f 75 64 7a 66 74 71 20 6a 6b 20 7a   hkfoudzftq jk z
13f0: 6d 20 78 68 20 78 71 66 20 75 72 76 79 73 62 6e  m xh xqf urvysbn
1400: 79 6b 6b 20 6a 6b 20 69 61 73 72 71 67 71 76 22  ykk jk iasrqgqv"
1410: 0a 20 20 22 6a 6b 20 63 73 6a 71 78 68 67 6a 20  .  "jk csjqxhgj 
1420: 64 75 73 7a 65 6d 6d 7a 6c 20 69 61 73 72 71 67  duszemmzl iasrqg
1430: 71 76 20 61 61 79 78 70 6d 76 65 20 7a 6d 20 62  qv aayxpmve zm b
1440: 72 73 75 6f 71 77 77 20 6a 6b 20 71 70 6d 68 74  rsuoqww jk qpmht
1450: 76 6c 20 77 6c 75 76 67 73 77 22 0a 20 20 22 6a  vl wluvgsw".  "j
1460: 6b 20 6d 6a 20 61 7a 61 76 77 6d 20 6a 6b 20 7a  k mj azavwm jk z
1470: 6d 20 6a 6e 20 64 7a 61 64 6e 71 7a 70 72 72 20  m jn dzadnqzprr 
1480: 7a 6d 20 6a 6b 20 75 68 7a 71 22 0a 20 20 22 7a  zm jk uhzq".  "z
1490: 6b 20 78 71 66 20 6a 75 70 6b 20 66 78 77 20 6e  k xqf jupk fxw n
14a0: 62 69 6c 71 63 6e 7a 20 7a 6d 20 6a 6b 20 6a 63  bilqcnz zm jk jc
14b0: 70 69 77 6a 20 74 7a 6e 6c 76 62 66 63 76 20 6e  piwj tznlvbfcv n
14c0: 76 66 61 73 66 68 22 0a 20 20 22 6a 6b 20 6a 63  vfasfh".  "jk jc
14d0: 70 69 77 6a 20 7a 6d 20 78 6e 78 68 66 20 7a 6d  piwj zm xnxhf zm
14e0: 20 6d 6a 70 61 76 6a 75 68 77 20 6d 6a 20 64 72   mjpavjuhw mj dr
14f0: 69 72 20 70 61 20 70 76 6a 72 6a 6c 61 73 22 0a  ir pa pvjrjlas".
1500: 20 20 22 64 75 73 7a 65 6d 6d 7a 6c 20 64 7a 61    "duszemmzl dza
1510: 64 6e 71 7a 70 72 72 20 6a 6b 20 73 77 63 20 64  dnqzprr jk swc d
1520: 75 73 7a 65 6d 6d 7a 6c 20 74 6d 74 20 6a 6b 20  uszemmzl tmt jk 
1530: 6a 6b 20 70 61 68 6c 64 73 20 6a 6b 22 0a 20 20  jk pahlds jk".  
1540: 22 7a 6b 20 7a 6d 20 6a 6b 20 7a 6d 20 7a 6d 20  "zk zm jk zm zm 
1550: 65 63 7a 6b 6a 62 6c 75 20 7a 6d 20 68 69 20 70  eczkjblu zm hi p
1560: 6d 72 62 20 6a 6b 22 0a 20 20 22 61 7a 61 76 77  mrb jk".  "azavw
1570: 6d 20 7a 6d 20 69 7a 20 61 67 6d 63 6b 75 69 75  m zm iz agmckuiu
1580: 20 6a 6b 20 73 6e 74 6b 20 6a 6b 20 64 75 73 7a   jk sntk jk dusz
1590: 65 6d 6d 7a 6c 20 64 75 73 7a 65 6d 6d 7a 6c 20  emmzl duszemmzl 
15a0: 7a 6d 22 0a 20 20 22 6a 6b 20 7a 6d 20 6a 6b 20  zm".  "jk zm jk 
15b0: 65 63 7a 6b 6a 62 6c 75 20 75 72 76 79 73 62 6e  eczkjblu urvysbn
15c0: 79 6b 6b 20 73 6b 20 67 6e 6c 20 6a 6b 20 74 74  ykk sk gnl jk tt
15d0: 76 67 66 20 68 6d 6a 66 22 0a 20 20 22 6a 6b 20  vgf hmjf".  "jk 
15e0: 62 6e 68 63 20 6a 6a 72 78 70 6a 6b 62 20 6d 6a  bnhc jjrxpjkb mj
15f0: 70 61 76 6a 75 68 77 20 66 69 62 6f 6b 64 72 79  pavjuhw fibokdry
1600: 20 69 67 6a 75 20 6a 6b 20 7a 6d 20 7a 6d 20 78   igju jk zm zm x
1610: 68 22 0a 20 20 22 77 78 65 20 6f 67 74 74 62 79  h".  "wxe ogttby
1620: 6b 76 74 20 75 68 7a 71 20 78 72 20 69 61 66 20  kvt uhzq xr iaf 
1630: 7a 66 20 75 72 76 79 73 62 6e 79 6b 6b 20 61 61  zf urvysbnykk aa
1640: 79 78 70 6d 76 65 20 6f 61 63 61 78 67 6a 6f 6f  yxpmve oacaxgjoo
1650: 20 6d 6a 70 61 76 6a 75 68 77 22 0a 20 20 22 67   mjpavjuhw".  "g
1660: 61 7a 72 74 20 6a 6b 20 65 70 68 6b 6e 6f 6e 71  azrt jk ephknonq
1670: 20 6d 79 6a 70 20 75 65 6e 76 62 6d 20 77 75 76   myjp uenvbm wuv
1680: 61 6a 68 77 71 7a 20 6a 6b 20 7a 6d 20 78 6e 78  ajhwqz jk zm xnx
1690: 68 66 20 6e 76 66 61 73 66 68 22 0a 20 20 22 7a  hf nvfasfh".  "z
16a0: 6d 20 61 61 79 78 70 6d 76 65 20 63 73 6a 71 78  m aayxpmve csjqx
16b0: 68 67 6a 20 78 6e 78 68 66 20 78 72 20 6a 6b 20  hgj xnxhf xr jk 
16c0: 61 61 79 78 70 6d 76 65 20 78 6e 78 68 66 20 7a  aayxpmve xnxhf z
16d0: 6d 20 7a 6d 22 0a 20 20 22 73 6f 6b 63 79 66 20  m zm".  "sokcyf 
16e0: 7a 6d 20 6f 67 79 61 76 6a 76 76 20 6a 6b 20 7a  zm ogyavjvv jk z
16f0: 6d 20 66 69 62 6f 6b 64 72 79 20 7a 6d 20 6a 6b  m fibokdry zm jk
1700: 20 69 67 6a 75 20 69 67 6a 75 22 0a 20 20 22 76   igju igju".  "v
1710: 67 73 6c 64 20 62 76 67 69 6d 6a 69 6b 20 78 75  gsld bvgimjik xu
1720: 70 72 74 6c 79 6c 65 20 6a 6b 20 61 6b 6d 69 6b  prtlyle jk akmik
1730: 72 71 79 74 20 6a 6b 20 61 61 79 78 70 6d 76 65  rqyt jk aayxpmve
1740: 20 68 6b 66 6f 75 64 7a 66 74 71 20 64 64 6a 6a   hkfoudzftq ddjj
1750: 20 69 74 68 74 69 72 22 0a 20 20 22 7a 6d 20 75   ithtir".  "zm u
1760: 68 7a 71 20 6f 76 6b 79 65 76 6c 67 76 20 7a 6b  hzq ovkyevlgv zk
1770: 20 75 65 6e 76 62 6d 20 63 73 6a 71 78 68 67 6a   uenvbm csjqxhgj
1780: 20 6a 6b 20 76 67 73 6c 64 20 70 67 79 62 73 20   jk vgsld pgybs 
1790: 6a 6b 22 0a 20 20 22 7a 6d 20 61 67 6d 63 6b 75  jk".  "zm agmcku
17a0: 69 75 20 7a 65 78 68 20 66 69 62 6f 6b 64 72 79  iu zexh fibokdry
17b0: 20 6a 6b 20 75 68 7a 71 20 62 75 20 74 75 67 66   jk uhzq bu tugf
17c0: 6c 69 78 6f 65 78 20 78 6e 78 68 66 20 73 6b 22  lixoex xnxhf sk"
17d0: 0a 20 20 22 7a 6d 20 7a 66 20 75 65 6e 76 62 6d  .  "zm zf uenvbm
17e0: 20 6a 6b 20 61 7a 61 76 77 6d 20 7a 6d 20 7a 6d   jk azavwm zm zm
17f0: 20 61 67 6d 63 6b 75 69 75 20 7a 6d 20 6a 6b 22   agmckuiu zm jk"
1800: 0a 20 20 22 72 72 6b 78 20 6a 6b 20 7a 66 20 6a  .  "rrkx jk zf j
1810: 74 20 7a 6d 20 6f 61 63 61 78 67 6a 6f 6f 20 66  t zm oacaxgjoo f
1820: 69 62 6f 6b 64 72 79 20 77 64 6d 79 20 69 67 6a  ibokdry wdmy igj
1830: 75 20 63 73 6a 71 78 68 67 6a 22 0a 20 20 22 68  u csjqxhgj".  "h
1840: 69 20 69 67 6a 75 20 7a 6d 20 6a 6b 20 7a 69 64  i igju zm jk zid
1850: 68 78 68 62 74 76 20 64 7a 61 64 6e 71 7a 70 72  hxhbtv dzadnqzpr
1860: 72 20 6a 6b 20 6a 6b 20 74 72 71 64 20 64 75 73  r jk jk trqd dus
1870: 7a 65 6d 6d 7a 6c 22 0a 20 20 22 7a 6d 20 7a 6d  zemmzl".  "zm zm
1880: 20 6d 6a 70 61 76 6a 75 68 77 20 78 72 62 64 61   mjpavjuhw xrbda
1890: 6b 20 71 72 76 62 6a 72 75 63 20 6a 6b 20 71 7a  k qrvbjruc jk qz
18a0: 7a 71 64 78 71 20 67 75 77 71 20 63 76 6e 6e 73  zqdxq guwq cvnns
18b0: 6c 20 7a 6d 22 0a 20 20 22 69 74 68 74 69 72 20  l zm".  "ithtir 
18c0: 6a 6b 20 6a 6b 20 71 63 64 7a 69 71 6f 6d 71 6b  jk jk qcdziqomqk
18d0: 20 7a 6d 20 66 61 72 6c 65 68 64 68 71 20 7a 6d   zm farlehdhq zm
18e0: 20 7a 6d 20 78 72 62 64 61 6b 20 6a 6b 22 0a 20   zm xrbdak jk". 
18f0: 20 22 69 78 66 69 70 6b 20 63 73 6a 71 78 68 67   "ixfipk csjqxhg
1900: 6a 20 61 7a 61 76 77 6d 20 73 6f 6b 63 79 66 20  j azavwm sokcyf 
1910: 74 74 76 67 66 20 76 67 73 6c 64 20 6a 6b 20 73  ttvgf vgsld jk s
1920: 6b 20 78 68 20 7a 6b 22 0a 20 20 22 6e 76 66 61  k xh zk".  "nvfa
1930: 73 66 68 20 61 7a 61 76 77 6d 20 7a 6d 20 7a 6d  sfh azavwm zm zm
1940: 20 7a 6d 20 66 78 77 20 6e 76 66 61 73 66 68 20   zm fxw nvfasfh 
1950: 7a 6b 20 67 6e 6c 20 74 72 71 64 22 0a 20 20 22  zk gnl trqd".  "
1960: 7a 6d 20 66 69 62 6f 6b 64 72 79 20 63 73 6a 71  zm fibokdry csjq
1970: 78 68 67 6a 20 6f 66 6d 20 64 7a 61 64 6e 71 7a  xhgj ofm dzadnqz
1980: 70 72 72 20 6a 6b 20 61 6b 6d 69 6b 72 71 79 74  prr jk akmikrqyt
1990: 20 6f 72 70 66 61 77 70 78 20 64 75 73 7a 65 6d   orpfawpx duszem
19a0: 6d 7a 6c 20 76 77 71 22 0a 20 20 22 63 73 6a 71  mzl vwq".  "csjq
19b0: 78 68 67 6a 20 6a 6b 20 6a 6b 20 76 67 73 6c 64  xhgj jk jk vgsld
19c0: 20 75 72 76 79 73 62 6e 79 6b 6b 20 6a 6b 20 6e   urvysbnykk jk n
19d0: 78 75 6d 20 6a 6b 20 6a 6b 20 6e 78 75 6d 22 0a  xum jk jk nxum".
19e0: 20 20 22 7a 6d 20 68 6b 66 6f 75 64 7a 66 74 71    "zm hkfoudzftq
19f0: 20 6a 6b 20 72 79 76 77 77 68 6c 62 63 20 6d 6a   jk ryvwwhlbc mj
1a00: 70 61 76 6a 75 68 77 20 65 70 68 6b 6e 6f 6e 71  pavjuhw ephknonq
1a10: 20 6a 6b 20 7a 6d 20 6f 67 79 61 76 6a 76 76 20   jk zm ogyavjvv 
1a20: 7a 6d 22 0a 20 20 22 6c 77 61 20 68 69 20 78 6e  zm".  "lwa hi xn
1a30: 78 68 66 20 71 64 79 65 72 62 77 73 20 7a 6b 20  xhf qdyerbws zk 
1a40: 6e 6a 74 63 20 6a 6b 20 75 68 7a 71 20 7a 6d 20  njtc jk uhzq zm 
1a50: 6a 6b 22 0a 20 20 22 74 72 71 64 20 7a 6d 20 64  jk".  "trqd zm d
1a60: 7a 61 64 6e 71 7a 70 72 72 20 7a 6d 20 75 72 76  zadnqzprr zm urv
1a70: 79 73 62 6e 79 6b 6b 20 6a 6b 20 6c 73 7a 20 6a  ysbnykk jk lsz j
1a80: 6b 20 6d 6a 70 61 76 6a 75 68 77 20 63 6d 6e 6e  k mjpavjuhw cmnn
1a90: 6b 6e 61 22 0a 20 20 22 64 75 73 7a 65 6d 6d 7a  kna".  "duszemmz
1aa0: 6c 20 7a 6b 20 6a 6b 20 6a 6b 20 66 69 62 6f 6b  l zk jk jk fibok
1ab0: 64 72 79 20 6a 73 65 75 68 6a 6e 7a 6f 20 7a 6d  dry jseuhjnzo zm
1ac0: 20 61 61 79 78 70 6d 76 65 20 7a 6b 20 6a 6b 22   aayxpmve zk jk"
1ad0: 0a 20 20 22 66 69 62 6f 6b 64 72 79 20 6a 6b 20  .  "fibokdry jk 
1ae0: 73 76 69 71 20 71 76 78 74 63 6c 67 20 77 64 6d  sviq qvxtclg wdm
1af0: 79 20 6a 6b 20 64 6f 69 77 61 76 68 77 77 6f 20  y jk doiwavhwwo 
1b00: 7a 65 78 68 20 6a 6b 20 7a 6d 22 0a 20 20 22 6a  zexh jk zm".  "j
1b10: 75 70 6b 20 7a 6d 20 78 68 20 6a 6b 20 6d 6a 70  upk zm xh jk mjp
1b20: 61 76 6a 75 68 77 20 7a 6d 20 6a 6b 20 6e 73 61  avjuhw zm jk nsa
1b30: 62 20 6e 70 79 77 67 64 76 67 7a 20 64 75 73 7a  b npywgdvgz dusz
1b40: 65 6d 6d 7a 6c 22 0a 20 20 22 7a 6d 20 69 67 6a  emmzl".  "zm igj
1b50: 75 20 7a 6d 20 7a 6d 20 6e 76 66 61 73 66 68 20  u zm zm nvfasfh 
1b60: 65 68 20 68 6b 66 6f 75 64 7a 66 74 71 20 66 69  eh hkfoudzftq fi
1b70: 62 6f 6b 64 72 79 20 66 78 77 20 78 6b 62 6c 66  bokdry fxw xkblf
1b80: 22 0a 20 20 22 6a 6b 20 7a 6d 20 6a 6b 20 6a 6b  ".  "jk zm jk jk
1b90: 20 7a 6d 20 78 68 20 7a 6b 20 61 62 74 68 6e 7a   zm xh zk abthnz
1ba0: 63 76 20 7a 66 20 63 73 6a 71 78 68 67 6a 22 0a  cv zf csjqxhgj".
1bb0: 20 20 22 7a 6d 20 7a 6d 20 6a 6b 20 6e 6b 61 6f    "zm zm jk nkao
1bc0: 74 6d 20 75 72 76 79 73 62 6e 79 6b 6b 20 73 62  tm urvysbnykk sb
1bd0: 70 74 6f 61 20 62 71 20 6a 6b 20 6b 74 78 64 74  ptoa bq jk ktxdt
1be0: 79 20 75 62 77 72 66 71 6e 62 6a 66 22 0a 20 20  y ubwrfqnbjf".  
1bf0: 22 6e 76 66 61 73 66 68 20 61 61 79 78 70 6d 76  "nvfasfh aayxpmv
1c00: 65 20 78 64 63 75 7a 20 7a 6d 20 74 75 67 66 6c  e xdcuz zm tugfl
1c10: 69 78 6f 65 78 20 6a 63 70 69 77 6a 20 7a 6d 20  ixoex jcpiwj zm 
1c20: 6d 6a 70 61 76 6a 75 68 77 20 66 69 62 6f 6b 64  mjpavjuhw fibokd
1c30: 72 79 20 64 6f 69 77 61 76 68 77 77 6f 22 0a 20  ry doiwavhwwo". 
1c40: 20 22 69 61 66 20 6a 6b 20 6d 6a 70 61 76 6a 75   "iaf jk mjpavju
1c50: 68 77 20 7a 6d 20 64 75 73 7a 65 6d 6d 7a 6c 20  hw zm duszemmzl 
1c60: 6a 6b 20 6a 6b 20 75 68 7a 71 20 70 61 68 6c 64  jk jk uhzq pahld
1c70: 73 20 66 69 62 6f 6b 64 72 79 22 0a 20 20 22 64  s fibokdry".  "d
1c80: 64 6a 6a 20 7a 6b 20 61 7a 61 76 77 6d 20 6a 6b  djj zk azavwm jk
1c90: 20 73 77 63 20 7a 6d 20 67 6a 74 65 78 6b 76 20   swc zm gjtexkv 
1ca0: 6a 6b 20 78 68 20 6a 6b 22 0a 20 20 22 69 67 6a  jk xh jk".  "igj
1cb0: 75 20 6a 6b 20 63 73 6a 71 78 68 67 6a 20 7a 6d  u jk csjqxhgj zm
1cc0: 20 6a 6b 20 64 7a 61 64 6e 71 7a 70 72 72 20 64   jk dzadnqzprr d
1cd0: 75 73 7a 65 6d 6d 7a 6c 20 75 6c 76 63 62 76 20  uszemmzl ulvcbv 
1ce0: 6a 6b 20 6a 6b 22 0a 20 20 22 6a 6b 20 66 69 62  jk jk".  "jk fib
1cf0: 6f 6b 64 72 79 20 7a 6d 20 63 73 6a 71 78 68 67  okdry zm csjqxhg
1d00: 6a 20 6a 6e 20 7a 6d 20 7a 6d 20 7a 6d 20 7a 66  j jn zm zm zm zf
1d10: 20 75 68 7a 71 22 0a 20 20 22 64 75 73 7a 65 6d   uhzq".  "duszem
1d20: 6d 7a 6c 20 6a 6b 20 78 6b 62 6c 66 20 7a 6b 20  mzl jk xkblf zk 
1d30: 68 72 6c 69 70 64 6d 20 61 61 79 78 70 6d 76 65  hrlipdm aayxpmve
1d40: 20 75 65 6e 76 62 6d 20 75 68 7a 71 20 6a 6b 20   uenvbm uhzq jk 
1d50: 7a 66 22 0a 20 20 22 64 7a 61 64 6e 71 7a 70 72  zf".  "dzadnqzpr
1d60: 72 20 6a 6b 20 7a 6d 20 7a 64 75 20 6e 76 66 61  r jk zm zdu nvfa
1d70: 73 66 68 20 7a 6d 20 6a 6b 20 75 72 76 79 73 62  sfh zm jk urvysb
1d80: 6e 79 6b 6b 20 68 6d 6a 66 20 6a 6b 22 0a 20 20  nykk hmjf jk".  
1d90: 22 6a 6b 20 61 61 79 78 70 6d 76 65 20 61 73 65  "jk aayxpmve ase
1da0: 72 72 64 78 6d 20 61 63 70 67 69 6d 20 66 69 62  rrdxm acpgim fib
1db0: 6f 6b 64 72 79 20 6a 6b 20 64 72 69 72 20 77 78  okdry jk drir wx
1dc0: 65 20 62 72 73 75 6f 71 77 77 20 72 72 6b 78 22  e brsuoqww rrkx"
1dd0: 0a 20 20 22 75 68 7a 71 20 63 73 6a 71 78 68 67  .  "uhzq csjqxhg
1de0: 6a 20 6e 76 66 61 73 66 68 20 6a 6b 20 72 72 6b  j nvfasfh jk rrk
1df0: 78 20 71 62 61 6d 6f 6b 20 74 72 71 64 20 75 65  x qbamok trqd ue
1e00: 6e 76 62 6d 20 73 6e 74 6b 20 7a 6d 22 0a 20 20  nvbm sntk zm".  
1e10: 22 70 73 20 61 7a 61 76 77 6d 20 7a 6b 68 64 76  "ps azavwm zkhdv
1e20: 6b 77 20 6a 6b 20 7a 6d 20 6a 6b 20 6a 6b 20 7a  kw jk zm jk jk z
1e30: 6d 20 63 73 6a 71 78 68 67 6a 20 78 65 64 6c 72  m csjqxhgj xedlr
1e40: 63 66 6f 22 0a 20 20 22 6a 6b 20 6a 6b 20 6f 67  cfo".  "jk jk og
1e50: 79 61 76 6a 76 76 20 6a 6b 20 7a 6d 20 66 61 72  yavjvv jk zm far
1e60: 6c 65 68 64 68 71 20 64 75 73 7a 65 6d 6d 7a 6c  lehdhq duszemmzl
1e70: 20 6a 6b 20 61 67 69 74 67 78 61 6d 78 65 20 6a   jk agitgxamxe j
1e80: 6b 22 0a 20 20 22 71 7a 7a 71 64 78 71 20 72 77  k".  "qzzqdxq rw
1e90: 61 6a 20 6a 6b 20 6a 6b 20 7a 6d 20 78 71 66 20  aj jk jk zm xqf 
1ea0: 6a 6b 20 75 65 6e 76 62 6d 20 6a 6b 20 7a 6b 22  jk uenvbm jk zk"
1eb0: 0a 20 20 22 7a 6d 20 68 78 67 77 76 69 62 20 61  .  "zm hxgwvib a
1ec0: 6b 6d 69 6b 72 71 79 74 20 7a 66 20 61 67 6d 63  kmikrqyt zf agmc
1ed0: 6b 75 69 75 20 75 65 6e 76 62 6d 20 62 71 20 6e  kuiu uenvbm bq n
1ee0: 70 79 77 67 64 76 67 7a 20 61 7a 61 76 77 6d 20  pywgdvgz azavwm 
1ef0: 6a 6b 22 0a 20 20 22 7a 66 20 6a 6d 66 69 71 68  jk".  "zf jmfiqh
1f00: 77 6e 6a 67 20 6a 73 20 69 67 6a 75 20 7a 6d 20  wnjg js igju zm 
1f10: 61 61 79 78 70 6d 76 65 20 7a 6d 20 6d 62 78 6e  aayxpmve zm mbxn
1f20: 6c 6a 6f 6d 69 76 20 63 73 6a 71 78 68 67 6a 20  ljomiv csjqxhgj 
1f30: 6e 76 66 61 73 66 68 22 0a 20 20 22 7a 6d 20 6a  nvfasfh".  "zm j
1f40: 6b 20 6a 6b 20 67 61 7a 72 74 20 6a 6b 20 6a 6b  k jk gazrt jk jk
1f50: 20 6c 6b 63 20 6a 6b 20 6e 76 66 61 73 66 68 20   lkc jk nvfasfh 
1f60: 6a 6b 22 0a 20 20 22 78 6c 64 6c 70 79 20 6f 72  jk".  "xldlpy or
1f70: 70 66 61 77 70 78 20 7a 6b 68 64 76 6b 77 20 6a  pfawpx zkhdvkw j
1f80: 6b 20 7a 6d 20 69 67 6a 75 20 7a 6d 20 75 72 76  k zm igju zm urv
1f90: 79 73 62 6e 79 6b 6b 20 64 7a 61 64 6e 71 7a 70  ysbnykk dzadnqzp
1fa0: 72 72 20 6d 62 78 6e 6c 6a 6f 6d 69 76 22 0a 20  rr mbxnljomiv". 
1fb0: 20 22 75 72 76 79 73 62 6e 79 6b 6b 20 6a 6b 20   "urvysbnykk jk 
1fc0: 7a 6b 20 69 67 6a 75 20 7a 6d 20 75 65 6e 76 62  zk igju zm uenvb
1fd0: 6d 20 6a 6b 20 7a 6d 20 69 74 68 74 69 72 20 6a  m jk zm ithtir j
1fe0: 6b 22 0a 20 20 22 7a 6d 20 7a 6b 20 7a 6d 20 7a  k".  "zm zk zm z
1ff0: 66 20 6f 66 6d 20 7a 6d 20 78 64 63 75 7a 20 64  f ofm zm xdcuz d
2000: 7a 61 64 6e 71 7a 70 72 72 20 7a 6d 20 76 67 73  zadnqzprr zm vgs
2010: 6c 64 22 0a 20 20 22 73 62 70 74 6f 61 20 6a 6b  ld".  "sbptoa jk
2020: 20 74 75 67 66 6c 69 78 6f 65 78 20 6a 6b 20 7a   tugflixoex jk z
2030: 6d 20 7a 6d 20 76 67 73 6c 64 20 7a 6d 20 78 68  m zm vgsld zm xh
2040: 20 7a 6d 22 0a 20 20 22 75 68 7a 71 20 6a 6b 20   zm".  "uhzq jk 
2050: 7a 6b 20 65 76 76 69 76 6f 20 76 67 73 6c 64 20  zk evvivo vgsld 
2060: 76 6e 69 71 6e 75 79 6e 76 66 20 61 67 6d 63 6b  vniqnuynvf agmck
2070: 75 69 75 20 6a 6b 20 7a 6d 20 7a 6d 22 0a 20 20  uiu jk zm zm".  
2080: 22 7a 6d 20 6e 76 66 61 73 66 68 20 7a 6d 20 7a  "zm nvfasfh zm z
2090: 6d 20 7a 6d 20 61 62 74 68 6e 7a 63 76 20 75 65  m zm abthnzcv ue
20a0: 6e 76 62 6d 20 6a 6b 20 7a 6b 20 64 7a 61 64 6e  nvbm jk zk dzadn
20b0: 71 7a 70 72 72 22 0a 20 20 22 7a 6d 20 61 7a 61  qzprr".  "zm aza
20c0: 76 77 6d 20 69 67 6a 75 20 71 7a 7a 71 64 78 71  vwm igju qzzqdxq
20d0: 20 6a 6b 20 78 6e 78 68 66 20 61 62 74 68 6e 7a   jk xnxhf abthnz
20e0: 63 76 20 6a 6b 20 6e 76 66 61 73 66 68 20 7a 6d  cv jk nvfasfh zm
20f0: 22 0a 20 20 22 71 62 61 6d 6f 6b 20 66 78 77 20  ".  "qbamok fxw 
2100: 76 67 73 6c 64 20 69 67 6a 75 20 63 6d 6e 6e 6b  vgsld igju cmnnk
2110: 6e 61 20 78 6e 78 68 66 20 76 6e 69 71 6e 75 79  na xnxhf vniqnuy
2120: 6e 76 66 20 7a 6b 20 78 68 20 7a 6d 22 0a 20 20  nvf zk xh zm".  
2130: 22 6e 76 66 61 73 66 68 20 7a 6b 20 7a 6d 20 6d  "nvfasfh zk zm m
2140: 6a 70 61 76 6a 75 68 77 20 64 7a 61 64 6e 71 7a  jpavjuhw dzadnqz
2150: 70 72 72 20 6a 6b 20 6a 6b 20 64 75 73 7a 65 6d  prr jk jk duszem
2160: 6d 7a 6c 20 78 6c 64 6c 70 79 20 6e 76 66 61 73  mzl xldlpy nvfas
2170: 66 68 22 0a 20 20 22 78 6e 78 68 66 20 73 76 69  fh".  "xnxhf svi
2180: 71 20 6e 73 61 62 20 6e 70 79 77 67 64 76 67 7a  q nsab npywgdvgz
2190: 20 6f 73 66 66 20 76 67 73 6c 64 20 66 61 72 6c   osff vgsld farl
21a0: 65 68 64 68 71 20 66 69 62 6f 6b 64 72 79 20 77  ehdhq fibokdry w
21b0: 6a 62 6b 68 7a 73 61 20 68 68 61 63 22 0a 20 20  jbkhzsa hhac".  
21c0: 22 7a 6d 20 61 7a 61 76 77 6d 20 73 63 70 67 6e  "zm azavwm scpgn
21d0: 61 20 6a 6b 20 6a 6b 20 62 71 20 6a 6b 20 64 75  a jk jk bq jk du
21e0: 73 7a 65 6d 6d 7a 6c 20 66 69 62 6f 6b 64 72 79  szemmzl fibokdry
21f0: 20 6f 76 6b 79 65 76 6c 67 76 22 0a 20 20 22 63   ovkyevlgv".  "c
2200: 73 6a 71 78 68 67 6a 20 7a 6d 20 6a 6b 20 6a 6b  sjqxhgj zm jk jk
2210: 20 64 75 73 7a 65 6d 6d 7a 6c 20 7a 6b 20 78 68   duszemmzl zk xh
2220: 20 7a 6d 20 6a 6b 20 7a 66 22 0a 20 20 22 75 72   zm jk zf".  "ur
2230: 76 79 73 62 6e 79 6b 6b 20 64 7a 61 64 6e 71 7a  vysbnykk dzadnqz
2240: 70 72 72 20 63 73 6a 71 78 68 67 6a 20 6d 6a 70  prr csjqxhgj mjp
2250: 61 76 6a 75 68 77 20 75 62 77 72 66 71 6e 62 6a  avjuhw ubwrfqnbj
2260: 66 20 6e 6b 61 6f 74 6d 20 6a 6b 20 6a 6b 20 7a  f nkaotm jk jk z
2270: 6d 20 64 72 69 72 22 0a 20 20 22 6e 76 66 61 73  m drir".  "nvfas
2280: 66 68 20 78 68 20 69 67 6a 75 20 7a 6d 20 77 6c  fh xh igju zm wl
2290: 75 76 67 73 77 20 6a 6b 20 7a 6d 20 73 72 77 77  uvgsw jk zm srww
22a0: 6e 65 7a 71 6b 20 65 77 6c 65 20 6f 76 6e 71 22  nezqk ewle ovnq"
22b0: 0a 20 20 22 6a 6b 20 6e 76 66 61 73 66 68 20 65  .  "jk nvfasfh e
22c0: 68 20 6b 74 78 64 74 79 20 75 72 76 79 73 62 6e  h ktxdty urvysbn
22d0: 79 6b 6b 20 76 67 73 6c 64 20 7a 6d 20 6a 6b 20  ykk vgsld zm jk 
22e0: 65 68 20 75 65 6e 76 62 6d 22 0a 20 20 22 6f 72  eh uenvbm".  "or
22f0: 70 66 61 77 70 78 20 70 61 68 6c 64 73 20 6a 6b  pfawpx pahlds jk
2300: 20 75 68 7a 71 20 68 69 20 7a 6d 20 7a 6d 20 7a   uhzq hi zm zm z
2310: 66 20 6a 6b 20 64 7a 61 64 6e 71 7a 70 72 72 22  f jk dzadnqzprr"
2320: 0a 20 20 22 73 72 77 77 6e 65 7a 71 6b 20 63 73  .  "srwwnezqk cs
2330: 6a 71 78 68 67 6a 20 72 62 77 7a 75 66 20 6e 76  jqxhgj rbwzuf nv
2340: 66 61 73 66 68 20 6a 63 70 69 77 6a 20 78 6c 64  fasfh jcpiwj xld
2350: 6c 70 79 20 6e 76 66 61 73 66 68 20 6a 6b 20 76  lpy nvfasfh jk v
2360: 67 73 6c 64 20 77 6a 79 62 78 6d 69 65 6b 69 22  gsld wjybxmieki"
2370: 0a 7d 0a 0a 70 72 6f 63 20 61 64 64 5f 65 6d 70  .}..proc add_emp
2380: 74 79 5f 72 65 63 6f 72 64 73 20 7b 6e 7d 20 7b  ty_records {n} {
2390: 0a 20 20 65 78 65 63 73 71 6c 20 42 45 47 49 4e  .  execsql BEGIN
23a0: 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d  .  for {set i 0}
23b0: 20 7b 24 69 20 3c 20 24 6e 7d 20 7b 69 6e 63 72   {$i < $n} {incr
23c0: 20 69 7d 20 7b 0a 20 20 20 20 65 78 65 63 73 71   i} {.    execsq
23d0: 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  l { INSERT INTO 
23e0: 74 31 20 56 41 4c 55 45 53 28 27 27 29 20 7d 0a  t1 VALUES('') }.
23f0: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 43 4f    }.  execsql CO
2400: 4d 4d 49 54 0a 7d 0a 0a 0a 23 73 65 74 20 65 20  MMIT.}...#set e 
2410: 5b 6c 69 73 74 5d 0a 23 66 6f 72 65 61 63 68 20  [list].#foreach 
2420: 64 20 24 64 61 74 61 20 7b 73 65 74 20 65 20 5b  d $data {set e [
2430: 63 6f 6e 63 61 74 20 24 65 20 24 64 5d 7d 0a 23  concat $e $d]}.#
2440: 70 75 74 73 20 5b 6c 73 6f 72 74 20 2d 75 6e 69  puts [lsort -uni
2450: 71 75 65 20 24 65 5d 0a 23 65 78 69 74 0a 0a 73  que $e].#exit..s
2460: 65 74 20 7a 65 72 6f 5f 6c 6f 6e 67 5f 64 6f 63  et zero_long_doc
2470: 6c 69 73 74 73 20 7b 0a 20 20 55 50 44 41 54 45  lists {.  UPDATE
2480: 20 74 31 5f 73 65 67 6d 65 6e 74 73 20 53 45 54   t1_segments SET
2490: 20 62 6c 6f 63 6b 3d 7a 65 72 6f 62 6c 6f 62 28   block=zeroblob(
24a0: 6c 65 6e 67 74 68 28 62 6c 6f 63 6b 29 29 20 57  length(block)) W
24b0: 48 45 52 45 20 6c 65 6e 67 74 68 28 62 6c 6f 63  HERE length(bloc
24c0: 6b 29 3e 31 30 30 30 30 0a 7d 0a 0a 66 6f 72 65  k)>10000.}..fore
24d0: 61 63 68 20 7b 74 6e 20 73 65 74 75 70 7d 20 7b  ach {tn setup} {
24e0: 0a 20 20 31 20 7b 0a 20 20 20 20 73 65 74 20 64  .  1 {.    set d
24f0: 6d 74 5f 6d 6f 64 65 73 20 30 0a 20 20 20 20 65  mt_modes 0.    e
2500: 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20  xecsql { CREATE 
2510: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31  VIRTUAL TABLE t1
2520: 20 55 53 49 4e 47 20 46 54 53 33 20 7d 0a 20 20   USING FTS3 }.  
2530: 20 20 66 6f 72 65 61 63 68 20 64 6f 63 20 24 64    foreach doc $d
2540: 61 74 61 20 7b 20 65 78 65 63 73 71 6c 20 7b 20  ata { execsql { 
2550: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
2560: 41 4c 55 45 53 28 24 64 6f 63 29 20 7d 20 7d 0a  ALUES($doc) } }.
2570: 20 20 7d 0a 20 20 32 20 7b 0a 20 20 20 20 73 65    }.  2 {.    se
2580: 74 20 64 6d 74 5f 6d 6f 64 65 73 20 30 0a 20 20  t dmt_modes 0.  
2590: 20 20 65 78 65 63 73 71 6c 20 7b 20 43 52 45 41    execsql { CREA
25a0: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
25b0: 20 74 31 20 55 53 49 4e 47 20 46 54 53 34 20 7d   t1 USING FTS4 }
25c0: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 64 6f 63  .    foreach doc
25d0: 20 24 64 61 74 61 20 7b 20 65 78 65 63 73 71 6c   $data { execsql
25e0: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74   { INSERT INTO t
25f0: 31 20 56 41 4c 55 45 53 28 24 64 6f 63 29 20 7d  1 VALUES($doc) }
2600: 20 7d 0a 20 20 7d 0a 20 20 33 20 7b 0a 20 20 20   }.  }.  3 {.   
2610: 20 73 65 74 20 64 6d 74 5f 6d 6f 64 65 73 20 7b   set dmt_modes {
2620: 30 20 31 20 32 7d 0a 20 20 20 20 65 78 65 63 73  0 1 2}.    execs
2630: 71 6c 20 7b 20 43 52 45 41 54 45 20 56 49 52 54  ql { CREATE VIRT
2640: 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49  UAL TABLE t1 USI
2650: 4e 47 20 46 54 53 34 20 7d 0a 20 20 20 20 66 6f  NG FTS4 }.    fo
2660: 72 65 61 63 68 20 64 6f 63 20 24 64 61 74 61 20  reach doc $data 
2670: 7b 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45  { execsql { INSE
2680: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
2690: 53 28 24 64 6f 63 29 20 7d 20 7d 0a 20 20 20 20  S($doc) } }.    
26a0: 61 64 64 5f 65 6d 70 74 79 5f 72 65 63 6f 72 64  add_empty_record
26b0: 73 20 31 30 30 30 0a 20 20 20 20 65 78 65 63 73  s 1000.    execs
26c0: 71 6c 20 24 7a 65 72 6f 5f 6c 6f 6e 67 5f 64 6f  ql $zero_long_do
26d0: 63 6c 69 73 74 73 0a 20 20 7d 0a 20 20 34 20 7b  clists.  }.  4 {
26e0: 0a 20 20 20 20 73 65 74 20 64 6d 74 5f 6d 6f 64  .    set dmt_mod
26f0: 65 73 20 30 0a 20 20 20 20 65 78 65 63 73 71 6c  es 0.    execsql
2700: 20 7b 20 43 52 45 41 54 45 20 56 49 52 54 55 41   { CREATE VIRTUA
2710: 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47  L TABLE t1 USING
2720: 20 46 54 53 34 20 7d 0a 20 20 20 20 66 6f 72 65   FTS4 }.    fore
2730: 61 63 68 20 64 6f 63 20 24 64 61 74 61 20 7b 20  ach doc $data { 
2740: 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54  execsql { INSERT
2750: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
2760: 24 64 6f 63 29 20 7d 20 7d 0a 20 20 20 20 61 64  $doc) } }.    ad
2770: 64 5f 65 6d 70 74 79 5f 72 65 63 6f 72 64 73 20  d_empty_records 
2780: 31 30 30 30 0a 20 20 20 20 65 78 65 63 73 71 6c  1000.    execsql
2790: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
27a0: 28 74 31 29 20 56 41 4c 55 45 53 28 27 6f 70 74  (t1) VALUES('opt
27b0: 69 6d 69 7a 65 27 29 22 0a 20 20 20 20 65 78 65  imize')".    exe
27c0: 63 73 71 6c 20 24 7a 65 72 6f 5f 6c 6f 6e 67 5f  csql $zero_long_
27d0: 64 6f 63 6c 69 73 74 73 0a 20 20 7d 0a 20 20 35  doclists.  }.  5
27e0: 20 7b 0a 20 20 20 20 73 65 74 20 64 6d 74 5f 6d   {.    set dmt_m
27f0: 6f 64 65 73 20 30 0a 20 20 20 20 65 78 65 63 73  odes 0.    execs
2800: 71 6c 20 7b 20 43 52 45 41 54 45 20 56 49 52 54  ql { CREATE VIRT
2810: 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49  UAL TABLE t1 USI
2820: 4e 47 20 46 54 53 34 28 6d 61 74 63 68 69 6e 66  NG FTS4(matchinf
2830: 6f 3d 66 74 73 33 29 20 7d 0a 20 20 20 20 66 6f  o=fts3) }.    fo
2840: 72 65 61 63 68 20 64 6f 63 20 24 64 61 74 61 20  reach doc $data 
2850: 7b 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45  { execsql { INSE
2860: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
2870: 53 28 24 64 6f 63 29 20 7d 20 7d 0a 20 20 20 20  S($doc) } }.    
2880: 61 64 64 5f 65 6d 70 74 79 5f 72 65 63 6f 72 64  add_empty_record
2890: 73 20 31 30 30 30 0a 20 20 20 20 65 78 65 63 73  s 1000.    execs
28a0: 71 6c 20 24 7a 65 72 6f 5f 6c 6f 6e 67 5f 64 6f  ql $zero_long_do
28b0: 63 6c 69 73 74 73 0a 20 20 7d 0a 7d 20 7b 0a 0a  clists.  }.} {..
28c0: 20 20 65 78 65 63 73 71 6c 20 7b 20 44 52 4f 50    execsql { DROP
28d0: 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53   TABLE IF EXISTS
28e0: 20 74 31 20 7d 0a 20 20 65 76 61 6c 20 24 73 65   t1 }.  eval $se
28f0: 74 75 70 0a 20 20 73 65 74 20 3a 3a 74 65 73 74  tup.  set ::test
2900: 70 72 65 66 69 78 20 66 74 73 33 64 65 66 65 72  prefix fts3defer
2910: 2d 32 2e 24 74 6e 0a 20 20 73 65 74 20 44 4f 5f  -2.$tn.  set DO_
2920: 4d 41 4c 4c 4f 43 5f 54 45 53 54 20 30 0a 0a 20  MALLOC_TEST 0.. 
2930: 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74   do_execsql_test
2940: 20 30 20 7b 20 0a 20 20 20 20 53 45 4c 45 43 54   0 { .    SELECT
2950: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
2960: 31 5f 73 65 67 6d 65 6e 74 73 20 57 48 45 52 45  1_segments WHERE
2970: 20 6c 65 6e 67 74 68 28 62 6c 6f 63 6b 29 3e 31   length(block)>1
2980: 30 30 30 30 20 0a 20 20 7d 20 7b 32 7d 0a 0a 20  0000 .  } {2}.. 
2990: 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74 20   do_select_test 
29a0: 31 2e 31 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  1.1 {.    SELECT
29b0: 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 20 57   rowid FROM t1 W
29c0: 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 6a  HERE t1 MATCH 'j
29d0: 6b 20 78 6e 78 68 66 27 0a 20 20 7d 20 7b 31 33  k xnxhf'.  } {13
29e0: 20 32 39 20 34 30 20 34 37 20 34 38 20 35 32 20   29 40 47 48 52 
29f0: 36 33 20 39 32 7d 0a 20 20 64 6f 5f 73 65 6c 65  63 92}.  do_sele
2a00: 63 74 5f 74 65 73 74 20 31 2e 32 20 7b 0a 20 20  ct_test 1.2 {.  
2a10: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46    SELECT rowid F
2a20: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20  ROM t1 WHERE t1 
2a30: 4d 41 54 43 48 20 27 6a 6b 20 65 68 27 0a 20 20  MATCH 'jk eh'.  
2a40: 7d 20 7b 31 30 30 7d 0a 20 20 64 6f 5f 73 65 6c  } {100}.  do_sel
2a50: 65 63 74 5f 74 65 73 74 20 31 2e 33 20 7b 0a 20  ect_test 1.3 {. 
2a60: 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20     SELECT rowid 
2a70: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31  FROM t1 WHERE t1
2a80: 20 4d 41 54 43 48 20 27 6a 6b 20 75 62 77 72 66   MATCH 'jk ubwrf
2a90: 71 6e 62 6a 66 27 0a 20 20 7d 20 7b 37 20 37 30  qnbjf'.  } {7 70
2aa0: 20 39 38 7d 0a 20 20 64 6f 5f 73 65 6c 65 63 74   98}.  do_select
2ab0: 5f 74 65 73 74 20 31 2e 34 20 7b 0a 20 20 20 20  _test 1.4 {.    
2ac0: 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f  SELECT rowid FRO
2ad0: 4d 20 74 31 20 57 48 45 52 45 20 74 31 20 4d 41  M t1 WHERE t1 MA
2ae0: 54 43 48 20 27 64 75 73 7a 65 6d 6d 7a 6c 20 6a  TCH 'duszemmzl j
2af0: 6b 27 0a 20 20 7d 20 7b 33 20 35 20 38 20 31 30  k'.  } {3 5 8 10
2b00: 20 31 33 20 31 38 20 32 30 20 32 33 20 33 32 20   13 18 20 23 32 
2b10: 33 37 20 34 31 20 34 33 20 35 35 20 36 30 20 36  37 41 43 55 60 6
2b20: 35 20 36 37 20 37 32 20 37 34 20 37 36 20 38 31  5 67 72 74 76 81
2b30: 20 39 34 20 39 36 20 39 37 7d 0a 20 20 64 6f 5f   94 96 97}.  do_
2b40: 73 65 6c 65 63 74 5f 74 65 73 74 20 31 2e 35 20  select_test 1.5 
2b50: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77  {.    SELECT row
2b60: 69 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  id FROM t1 WHERE
2b70: 20 74 31 20 4d 41 54 43 48 20 27 75 62 77 72 66   t1 MATCH 'ubwrf
2b80: 71 6e 62 6a 66 20 6a 6b 27 0a 20 20 7d 20 7b 37  qnbjf jk'.  } {7
2b90: 20 37 30 20 39 38 7d 0a 20 20 64 6f 5f 73 65 6c   70 98}.  do_sel
2ba0: 65 63 74 5f 74 65 73 74 20 31 2e 36 20 7b 0a 20  ect_test 1.6 {. 
2bb0: 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20     SELECT rowid 
2bc0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31  FROM t1 WHERE t1
2bd0: 20 4d 41 54 43 48 20 27 6a 6b 20 75 62 77 72 66   MATCH 'jk ubwrf
2be0: 71 6e 62 6a 66 20 6a 6b 20 6a 6b 20 6a 6b 20 6a  qnbjf jk jk jk j
2bf0: 6b 27 0a 20 20 7d 20 7b 37 20 37 30 20 39 38 7d  k'.  } {7 70 98}
2c00: 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73  .  do_select_tes
2c10: 74 20 31 2e 37 20 7b 0a 20 20 20 20 53 45 4c 45  t 1.7 {.    SELE
2c20: 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31  CT rowid FROM t1
2c30: 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20   WHERE t1 MATCH 
2c40: 27 7a 6d 20 78 6e 78 68 66 27 0a 20 20 7d 20 7b  'zm xnxhf'.  } {
2c50: 31 32 20 31 33 20 32 39 20 33 30 20 34 30 20 34  12 13 29 30 40 4
2c60: 37 20 34 38 20 35 32 20 36 33 20 39 32 20 39 33  7 48 52 63 92 93
2c70: 7d 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65  }.  do_select_te
2c80: 73 74 20 31 2e 38 20 7b 0a 20 20 20 20 53 45 4c  st 1.8 {.    SEL
2c90: 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74  ECT rowid FROM t
2ca0: 31 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48  1 WHERE t1 MATCH
2cb0: 20 27 7a 6d 20 65 68 27 0a 20 20 7d 20 7b 36 38   'zm eh'.  } {68
2cc0: 20 31 30 30 7d 0a 20 20 64 6f 5f 73 65 6c 65 63   100}.  do_selec
2cd0: 74 5f 74 65 73 74 20 31 2e 39 20 7b 0a 20 20 20  t_test 1.9 {.   
2ce0: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52   SELECT rowid FR
2cf0: 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20 4d  OM t1 WHERE t1 M
2d00: 41 54 43 48 20 27 7a 6d 20 75 62 77 72 66 71 6e  ATCH 'zm ubwrfqn
2d10: 62 6a 66 27 0a 20 20 7d 20 7b 37 20 37 30 20 39  bjf'.  } {7 70 9
2d20: 38 7d 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74  8}.  do_select_t
2d30: 65 73 74 20 31 2e 31 30 20 7b 0a 20 20 20 20 53  est 1.10 {.    S
2d40: 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d  ELECT rowid FROM
2d50: 20 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54   t1 WHERE t1 MAT
2d60: 43 48 20 27 7a 2a 20 76 67 73 6c 64 27 0a 20 20  CH 'z* vgsld'.  
2d70: 7d 20 7b 31 30 20 31 33 20 31 37 20 33 31 20 33  } {10 13 17 31 3
2d80: 35 20 35 31 20 35 38 20 38 38 20 38 39 20 39 30  5 51 58 88 89 90
2d90: 20 39 33 20 31 30 30 7d 0a 0a 20 20 69 66 20 7b   93 100}..  if {
2da0: 20 24 66 74 73 33 5f 73 69 6d 70 6c 65 5f 64 65   $fts3_simple_de
2db0: 66 65 72 72 65 64 5f 74 6f 6b 65 6e 73 5f 6f 6e  ferred_tokens_on
2dc0: 6c 79 3d 3d 30 20 7d 20 7b 0a 20 20 20 20 64 6f  ly==0 } {.    do
2dd0: 5f 73 65 6c 65 63 74 5f 74 65 73 74 20 31 2e 31  _select_test 1.1
2de0: 31 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  1 {.      SELECT
2df0: 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 20 0a   rowid FROM t1 .
2e00: 20 20 20 20 20 20 57 48 45 52 45 20 74 31 20 4d        WHERE t1 M
2e10: 41 54 43 48 20 27 28 0a 20 20 20 20 20 20 20 20  ATCH '(.        
2e20: 7a 64 75 20 4f 52 20 7a 65 78 68 20 4f 52 20 7a  zdu OR zexh OR z
2e30: 66 20 4f 52 20 7a 68 62 72 7a 61 64 62 20 4f 52  f OR zhbrzadb OR
2e40: 20 7a 69 64 68 78 68 62 74 76 20 4f 52 20 0a 20   zidhxhbtv OR . 
2e50: 20 20 20 20 20 20 20 7a 6b 20 4f 52 20 7a 6b 68         zk OR zkh
2e60: 64 76 6b 77 20 4f 52 20 7a 6d 20 4f 52 20 7a 73  dvkw OR zm OR zs
2e70: 6d 68 6e 66 0a 20 20 20 20 20 20 29 20 76 67 73  mhnf.      ) vgs
2e80: 6c 64 27 0a 20 20 20 20 7d 20 7b 31 30 20 31 33  ld'.    } {10 13
2e90: 20 31 37 20 33 31 20 33 35 20 35 31 20 35 38 20   17 31 35 51 58 
2ea0: 38 38 20 38 39 20 39 30 20 39 33 20 31 30 30 7d  88 89 90 93 100}
2eb0: 0a 20 20 7d 0a 0a 20 20 64 6f 5f 73 65 6c 65 63  .  }..  do_selec
2ec0: 74 5f 74 65 73 74 20 32 2e 31 20 7b 0a 20 20 20  t_test 2.1 {.   
2ed0: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52   SELECT rowid FR
2ee0: 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20 4d  OM t1 WHERE t1 M
2ef0: 41 54 43 48 20 27 22 7a 6d 20 61 67 6d 63 6b 75  ATCH '"zm agmcku
2f00: 69 75 22 27 0a 20 20 7d 20 7b 33 20 32 34 20 35  iu"'.  } {3 24 5
2f10: 32 20 35 33 7d 0a 20 20 64 6f 5f 73 65 6c 65 63  2 53}.  do_selec
2f20: 74 5f 74 65 73 74 20 32 2e 32 20 7b 0a 20 20 20  t_test 2.2 {.   
2f30: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52   SELECT rowid FR
2f40: 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20 4d  OM t1 WHERE t1 M
2f50: 41 54 43 48 20 27 22 7a 6d 20 7a 66 22 27 0a 20  ATCH '"zm zf"'. 
2f60: 20 7d 20 7b 33 33 20 35 33 20 37 35 20 38 38 20   } {33 53 75 88 
2f70: 31 30 31 7d 0a 20 20 64 6f 5f 73 65 6c 65 63 74  101}.  do_select
2f80: 5f 74 65 73 74 20 32 2e 33 20 7b 0a 20 20 20 20  _test 2.3 {.    
2f90: 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f  SELECT rowid FRO
2fa0: 4d 20 74 31 20 57 48 45 52 45 20 74 31 20 4d 41  M t1 WHERE t1 MA
2fb0: 54 43 48 20 27 22 7a 6d 20 61 61 79 78 70 6d 76  TCH '"zm aayxpmv
2fc0: 65 22 27 0a 20 20 7d 20 7b 34 38 20 36 35 20 38  e"'.  } {48 65 8
2fd0: 34 7d 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74  4}.  do_select_t
2fe0: 65 73 74 20 32 2e 34 20 7b 0a 20 20 20 20 53 45  est 2.4 {.    SE
2ff0: 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20  LECT rowid FROM 
3000: 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54 43  t1 WHERE t1 MATC
3010: 48 20 27 22 61 61 79 78 70 6d 76 65 20 7a 6d 22  H '"aayxpmve zm"
3020: 27 0a 20 20 7d 20 7b 31 31 20 33 37 20 38 34 7d  '.  } {11 37 84}
3030: 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73  .  do_select_tes
3040: 74 20 32 2e 35 20 7b 0a 20 20 20 20 53 45 4c 45  t 2.5 {.    SELE
3050: 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31  CT rowid FROM t1
3060: 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20   WHERE t1 MATCH 
3070: 27 22 6a 6b 20 61 7a 61 76 77 6d 22 27 0a 20 20  '"jk azavwm"'.  
3080: 7d 20 7b 31 36 20 35 33 7d 0a 20 20 64 6f 5f 73  } {16 53}.  do_s
3090: 65 6c 65 63 74 5f 74 65 73 74 20 32 2e 36 20 7b  elect_test 2.6 {
30a0: 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69  .    SELECT rowi
30b0: 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  d FROM t1 WHERE 
30c0: 74 31 20 4d 41 54 43 48 20 27 22 78 68 20 6a 6b  t1 MATCH '"xh jk
30d0: 20 6a 6b 22 27 0a 20 20 7d 20 7b 31 38 7d 0a 20   jk"'.  } {18}. 
30e0: 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74 20   do_select_test 
30f0: 32 2e 37 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  2.7 {.    SELECT
3100: 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 20 57   rowid FROM t1 W
3110: 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 22  HERE t1 MATCH '"
3120: 7a 6d 20 6a 6b 20 76 67 73 6c 64 22 27 0a 20 20  zm jk vgsld"'.  
3130: 7d 20 7b 31 33 20 31 37 7d 0a 20 20 64 6f 5f 73  } {13 17}.  do_s
3140: 65 6c 65 63 74 5f 74 65 73 74 20 32 2e 38 20 7b  elect_test 2.8 {
3150: 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69  .    SELECT rowi
3160: 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  d FROM t1 WHERE 
3170: 74 31 20 4d 41 54 43 48 20 27 22 7a 6d 20 6a 6b  t1 MATCH '"zm jk
3180: 20 76 67 73 6c 64 20 6c 6b 6a 6c 6b 6a 6c 6b 6a   vgsld lkjlkjlkj
3190: 22 27 0a 20 20 7d 20 7b 7d 0a 0a 20 20 64 6f 5f  "'.  } {}..  do_
31a0: 73 65 6c 65 63 74 5f 74 65 73 74 20 33 2e 31 20  select_test 3.1 
31b0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 73 6e 69  {.    SELECT sni
31c0: 70 70 65 74 28 74 31 2c 20 27 5b 27 2c 20 27 5d  ppet(t1, '[', ']
31d0: 27 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  ') FROM t1 WHERE
31e0: 20 74 31 20 4d 41 54 43 48 20 27 22 7a 6d 20 61   t1 MATCH '"zm a
31f0: 67 6d 63 6b 75 69 75 22 27 0a 20 20 7d 20 7b 0a  gmckuiu"'.  } {.
3200: 20 20 20 20 7b 7a 6d 20 5b 7a 6d 5d 20 5b 61 67      {zm [zm] [ag
3210: 6d 63 6b 75 69 75 5d 20 75 68 7a 71 20 6e 73 61  mckuiu] uhzq nsa
3220: 62 20 6a 6b 20 72 72 6b 78 20 64 75 73 7a 65 6d  b jk rrkx duszem
3230: 6d 7a 6c 20 68 79 71 20 6a 6b 7d 20 0a 20 20 20  mzl hyq jk} .   
3240: 20 7b 6a 6b 20 5b 7a 6d 5d 20 5b 61 67 6d 63 6b   {jk [zm] [agmck
3250: 75 69 75 5d 20 75 72 76 79 73 62 6e 79 6b 6b 20  uiu] urvysbnykk 
3260: 6a 6b 20 6a 6b 20 7a 6d 20 7a 6d 20 6a 6b 20 6a  jk jk zm zm jk j
3270: 6b 7d 20 0a 20 20 20 20 7b 5b 7a 6d 5d 20 5b 61  k} .    {[zm] [a
3280: 67 6d 63 6b 75 69 75 5d 20 7a 65 78 68 20 66 69  gmckuiu] zexh fi
3290: 62 6f 6b 64 72 79 20 6a 6b 20 75 68 7a 71 20 62  bokdry jk uhzq b
32a0: 75 20 74 75 67 66 6c 69 78 6f 65 78 20 78 6e 78  u tugflixoex xnx
32b0: 68 66 20 73 6b 7d 20 0a 20 20 20 20 7b 7a 6d 20  hf sk} .    {zm 
32c0: 7a 66 20 75 65 6e 76 62 6d 20 6a 6b 20 61 7a 61  zf uenvbm jk aza
32d0: 76 77 6d 20 7a 6d 20 5b 7a 6d 5d 20 5b 61 67 6d  vwm zm [zm] [agm
32e0: 63 6b 75 69 75 5d 20 7a 6d 20 6a 6b 7d 0a 20 20  ckuiu] zm jk}.  
32f0: 7d 0a 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74  }..  do_select_t
3300: 65 73 74 20 33 2e 32 20 7b 0a 20 20 20 20 53 45  est 3.2 {.    SE
3310: 4c 45 43 54 20 73 6e 69 70 70 65 74 28 74 31 2c  LECT snippet(t1,
3320: 20 27 5b 27 2c 20 27 5d 27 29 20 46 52 4f 4d 20   '[', ']') FROM 
3330: 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54 43  t1 WHERE t1 MATC
3340: 48 20 27 78 6e 78 68 66 20 6a 6b 27 0a 20 20 7d  H 'xnxhf jk'.  }
3350: 20 7b 0a 20 20 20 20 7b 5b 78 6e 78 68 66 5d 20   {.    {[xnxhf] 
3360: 5b 6a 6b 5d 20 5b 6a 6b 5d 20 61 67 6d 63 6b 75  [jk] [jk] agmcku
3370: 69 75 20 64 75 73 7a 65 6d 6d 7a 6c 20 5b 6a 6b  iu duszemmzl [jk
3380: 5d 20 7a 6d 20 7a 6d 20 5b 6a 6b 5d 20 76 67 73  ] zm zm [jk] vgs
3390: 6c 64 7d 20 0a 20 20 20 20 7b 5b 6a 6b 5d 20 5b  ld} .    {[jk] [
33a0: 78 6e 78 68 66 5d 20 69 67 6a 75 20 5b 6a 6b 5d  xnxhf] igju [jk]
33b0: 20 78 68 20 5b 6a 6b 5d 20 6e 76 66 61 73 66 68   xh [jk] nvfasfh
33c0: 20 7a 6d 20 6a 73 20 5b 6a 6b 5d 7d 20 0a 20 20   zm js [jk]} .  
33d0: 20 20 7b 5b 6a 6b 5d 20 6a 63 70 69 77 6a 20 7a    {[jk] jcpiwj z
33e0: 6d 20 5b 78 6e 78 68 66 5d 20 7a 6d 20 6d 6a 70  m [xnxhf] zm mjp
33f0: 61 76 6a 75 68 77 20 6d 6a 20 64 72 69 72 20 70  avjuhw mj drir p
3400: 61 20 70 76 6a 72 6a 6c 61 73 7d 20 0a 20 20 20  a pvjrjlas} .   
3410: 20 7b 67 61 7a 72 74 20 5b 6a 6b 5d 20 65 70 68   {gazrt [jk] eph
3420: 6b 6e 6f 6e 71 20 6d 79 6a 70 20 75 65 6e 76 62  knonq myjp uenvb
3430: 6d 20 77 75 76 61 6a 68 77 71 7a 20 5b 6a 6b 5d  m wuvajhwqz [jk]
3440: 20 7a 6d 20 5b 78 6e 78 68 66 5d 20 6e 76 66 61   zm [xnxhf] nvfa
3450: 73 66 68 7d 20 0a 20 20 20 20 7b 7a 6d 20 61 61  sfh} .    {zm aa
3460: 79 78 70 6d 76 65 20 63 73 6a 71 78 68 67 6a 20  yxpmve csjqxhgj 
3470: 5b 78 6e 78 68 66 5d 20 78 72 20 5b 6a 6b 5d 20  [xnxhf] xr [jk] 
3480: 61 61 79 78 70 6d 76 65 20 5b 78 6e 78 68 66 5d  aayxpmve [xnxhf]
3490: 20 7a 6d 20 7a 6d 7d 20 0a 20 20 20 20 7b 7a 6d   zm zm} .    {zm
34a0: 20 61 67 6d 63 6b 75 69 75 20 7a 65 78 68 20 66   agmckuiu zexh f
34b0: 69 62 6f 6b 64 72 79 20 5b 6a 6b 5d 20 75 68 7a  ibokdry [jk] uhz
34c0: 71 20 62 75 20 74 75 67 66 6c 69 78 6f 65 78 20  q bu tugflixoex 
34d0: 5b 78 6e 78 68 66 5d 20 73 6b 7d 20 0a 20 20 20  [xnxhf] sk} .   
34e0: 20 7b 6c 77 61 20 68 69 20 5b 78 6e 78 68 66 5d   {lwa hi [xnxhf]
34f0: 20 71 64 79 65 72 62 77 73 20 7a 6b 20 6e 6a 74   qdyerbws zk njt
3500: 63 20 5b 6a 6b 5d 20 75 68 7a 71 20 7a 6d 20 5b  c [jk] uhzq zm [
3510: 6a 6b 5d 7d 20 0a 20 20 20 20 7b 7a 6d 20 61 7a  jk]} .    {zm az
3520: 61 76 77 6d 20 69 67 6a 75 20 71 7a 7a 71 64 78  avwm igju qzzqdx
3530: 71 20 5b 6a 6b 5d 20 5b 78 6e 78 68 66 5d 20 61  q [jk] [xnxhf] a
3540: 62 74 68 6e 7a 63 76 20 5b 6a 6b 5d 20 6e 76 66  bthnzcv [jk] nvf
3550: 61 73 66 68 20 7a 6d 7d 0a 20 20 7d 0a 0a 20 20  asfh zm}.  }..  
3560: 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74 20 34  do_select_test 4
3570: 2e 31 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  .1 {.    SELECT 
3580: 6f 66 66 73 65 74 73 28 74 31 29 20 46 52 4f 4d  offsets(t1) FROM
3590: 20 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54   t1 WHERE t1 MAT
35a0: 43 48 20 27 22 6a 6b 20 75 65 6e 76 62 6d 22 27  CH '"jk uenvbm"'
35b0: 0a 20 20 7d 20 7b 0a 20 20 20 20 7b 30 20 30 20  .  } {.    {0 0 
35c0: 31 30 20 32 20 30 20 31 20 31 33 20 36 7d 20 7b  10 2 0 1 13 6} {
35d0: 30 20 30 20 32 36 20 32 20 30 20 31 20 32 39 20  0 0 26 2 0 1 29 
35e0: 36 7d 0a 20 20 7d 0a 0a 20 20 64 6f 5f 73 65 6c  6}.  }..  do_sel
35f0: 65 63 74 5f 74 65 73 74 20 34 2e 32 20 7b 0a 20  ect_test 4.2 {. 
3600: 20 20 20 53 45 4c 45 43 54 20 6f 66 66 73 65 74     SELECT offset
3610: 73 28 74 31 29 20 46 52 4f 4d 20 74 31 20 57 48  s(t1) FROM t1 WH
3620: 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 64 75  ERE t1 MATCH 'du
3630: 73 7a 65 6d 6d 7a 6c 20 6a 6b 20 66 69 62 6f 6b  szemmzl jk fibok
3640: 64 72 79 27 0a 20 20 7d 20 7b 0a 20 20 20 20 7b  dry'.  } {.    {
3650: 30 20 32 20 33 20 38 20 30 20 31 20 33 36 20 32  0 2 3 8 0 1 36 2
3660: 20 30 20 30 20 35 38 20 39 7d 20 0a 20 20 20 20   0 0 58 9} .    
3670: 7b 30 20 30 20 30 20 39 20 30 20 31 20 31 33 20  {0 0 0 9 0 1 13 
3680: 32 20 30 20 31 20 31 36 20 32 20 30 20 32 20 31  2 0 1 16 2 0 2 1
3690: 39 20 38 20 30 20 31 20 35 33 20 32 7d 20 0a 20  9 8 0 1 53 2} . 
36a0: 20 20 20 7b 30 20 31 20 34 20 32 20 30 20 30 20     {0 1 4 2 0 0 
36b0: 32 30 20 39 20 30 20 31 20 33 30 20 32 20 30 20  20 9 0 1 30 2 0 
36c0: 31 20 33 33 20 32 20 30 20 32 20 34 38 20 38 7d  1 33 2 0 2 48 8}
36d0: 20 0a 20 20 20 20 7b 30 20 31 20 31 37 20 32 20   .    {0 1 17 2 
36e0: 30 20 31 20 32 30 20 32 20 30 20 31 20 32 36 20  0 1 20 2 0 1 26 
36f0: 32 20 30 20 30 20 32 39 20 39 20 30 20 32 20 33  2 0 0 29 9 0 2 3
3700: 39 20 38 7d 0a 20 20 7d 0a 0a 20 20 64 6f 5f 73  9 8}.  }..  do_s
3710: 65 6c 65 63 74 5f 74 65 73 74 20 34 2e 33 20 7b  elect_test 4.3 {
3720: 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 66 66 73  .    SELECT offs
3730: 65 74 73 28 74 31 29 20 46 52 4f 4d 20 74 31 20  ets(t1) FROM t1 
3740: 0a 20 20 20 20 57 48 45 52 45 20 74 31 20 4d 41  .    WHERE t1 MA
3750: 54 43 48 20 27 76 67 73 6c 64 20 28 68 72 6c 69  TCH 'vgsld (hrli
3760: 70 64 6d 20 4f 52 20 28 61 61 70 6d 76 65 20 4e  pdm OR (aapmve N
3770: 45 41 52 20 64 75 73 7a 65 6d 6d 7a 6c 29 29 27  EAR duszemmzl))'
3780: 0a 20 20 7d 20 7b 7b 30 20 30 20 30 20 35 20 30  .  } {{0 0 0 5 0
3790: 20 31 20 31 35 20 37 20 30 20 30 20 33 36 20 35   1 15 7 0 0 36 5
37a0: 7d 7d 0a 0a 20 20 23 20 54 68 65 20 66 6f 6c 6c  }}..  # The foll
37b0: 6f 77 69 6e 67 20 62 6c 6f 63 6b 20 6f 66 20 74  owing block of t
37c0: 65 73 74 73 20 72 75 6e 73 20 6e 6f 72 6d 61 6c  ests runs normal
37d0: 6c 79 20 77 69 74 68 20 46 54 53 33 20 6f 72 20  ly with FTS3 or 
37e0: 46 54 53 34 20 77 69 74 68 6f 75 74 20 74 68 65  FTS4 without the
37f0: 0a 20 20 23 20 6c 6f 6e 67 20 64 6f 63 6c 69 73  .  # long doclis
3800: 74 73 20 7a 65 72 6f 65 64 2e 20 41 6e 64 20 77  ts zeroed. And w
3810: 69 74 68 20 4f 4f 4d 2d 69 6e 6a 65 63 74 69 6f  ith OOM-injectio
3820: 6e 20 66 6f 72 20 46 54 53 34 20 77 69 74 68 20  n for FTS4 with 
3830: 6c 6f 6e 67 20 64 6f 63 6c 69 73 74 73 0a 20 20  long doclists.  
3840: 23 20 7a 65 72 6f 65 64 2e 20 43 68 61 6e 67 65  # zeroed. Change
3850: 20 74 68 69 73 20 62 79 20 6d 65 73 73 69 6e 67   this by messing
3860: 20 77 69 74 68 20 74 68 65 20 5b 73 65 74 20 64   with the [set d
3870: 6d 74 5f 6d 6f 64 65 73 5d 20 63 6f 6d 6d 61 6e  mt_modes] comman
3880: 64 73 20 61 62 6f 76 65 2e 0a 20 20 23 0a 20 20  ds above..  #.  
3890: 66 6f 72 65 61 63 68 20 44 4f 5f 4d 41 4c 4c 4f  foreach DO_MALLO
38a0: 43 5f 54 45 53 54 20 24 64 6d 74 5f 6d 6f 64 65  C_TEST $dmt_mode
38b0: 73 20 7b 0a 20 20 20 20 0a 20 20 20 20 23 20 50  s {.    .    # P
38c0: 68 72 61 73 65 20 73 65 61 72 63 68 2e 0a 20 20  hrase search..  
38d0: 20 20 23 0a 20 20 20 20 64 6f 5f 73 65 6c 65 63    #.    do_selec
38e0: 74 5f 74 65 73 74 20 35 2e 24 44 4f 5f 4d 41 4c  t_test 5.$DO_MAL
38f0: 4c 4f 43 5f 54 45 53 54 2e 31 20 7b 0a 20 20 20  LOC_TEST.1 {.   
3900: 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20     SELECT rowid 
3910: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31  FROM t1 WHERE t1
3920: 20 4d 41 54 43 48 20 27 22 6a 6b 20 6d 6a 70 61   MATCH '"jk mjpa
3930: 76 6a 75 68 77 22 27 0a 20 20 20 20 7d 20 7b 38  vjuhw"'.    } {8
3940: 20 31 35 20 33 36 20 36 34 20 36 37 20 37 32 7d   15 36 64 67 72}
3950: 0a 0a 20 20 20 20 23 20 4d 75 6c 74 69 70 6c 65  ..    # Multiple
3960: 20 74 6f 6b 65 6e 73 20 73 65 61 72 63 68 2e 0a   tokens search..
3970: 20 20 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65      do_select_te
3980: 73 74 20 35 2e 24 44 4f 5f 4d 41 4c 4c 4f 43 5f  st 5.$DO_MALLOC_
3990: 54 45 53 54 2e 32 20 7b 0a 20 20 20 20 20 20 53  TEST.2 {.      S
39a0: 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d  ELECT rowid FROM
39b0: 20 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54   t1 WHERE t1 MAT
39c0: 43 48 20 27 64 75 73 7a 65 6d 6d 7a 6c 20 7a 6d  CH 'duszemmzl zm
39d0: 27 0a 20 20 20 20 7d 20 7b 33 20 35 20 38 20 31  '.    } {3 5 8 1
39e0: 30 20 31 32 20 31 33 20 31 38 20 32 30 20 32 33  0 12 13 18 20 23
39f0: 20 33 37 20 34 33 20 35 35 20 36 30 20 36 35 20   37 43 55 60 65 
3a00: 36 37 20 37 32 20 37 34 20 38 31 20 39 34 20 39  67 72 74 81 94 9
3a10: 36 20 39 37 7d 0a 0a 20 20 20 20 23 20 73 6e 69  6 97}..    # sni
3a20: 70 70 65 74 28 29 20 66 75 6e 63 74 69 6f 6e 20  ppet() function 
3a30: 77 69 74 68 20 70 68 72 61 73 65 2e 0a 20 20 20  with phrase..   
3a40: 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74 20   do_select_test 
3a50: 35 2e 24 44 4f 5f 4d 41 4c 4c 4f 43 5f 54 45 53  5.$DO_MALLOC_TES
3a60: 54 2e 33 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  T.3 {.      SELE
3a70: 43 54 20 73 6e 69 70 70 65 74 28 74 31 2c 20 27  CT snippet(t1, '
3a80: 5b 27 2c 20 27 5d 27 29 20 46 52 4f 4d 20 74 31  [', ']') FROM t1
3a90: 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20   WHERE t1 MATCH 
3aa0: 27 22 7a 6d 20 61 61 79 78 70 6d 76 65 22 27 0a  '"zm aayxpmve"'.
3ab0: 20 20 20 20 7d 20 7b 0a 20 20 20 20 20 20 7b 5b      } {.      {[
3ac0: 7a 6d 5d 20 5b 61 61 79 78 70 6d 76 65 5d 20 63  zm] [aayxpmve] c
3ad0: 73 6a 71 78 68 67 6a 20 78 6e 78 68 66 20 78 72  sjqxhgj xnxhf xr
3ae0: 20 6a 6b 20 61 61 79 78 70 6d 76 65 20 78 6e 78   jk aayxpmve xnx
3af0: 68 66 20 7a 6d 20 7a 6d 7d 20 0a 20 20 20 20 20  hf zm zm} .     
3b00: 20 7b 64 75 73 7a 65 6d 6d 7a 6c 20 7a 6b 20 6a   {duszemmzl zk j
3b10: 6b 20 6a 6b 20 66 69 62 6f 6b 64 72 79 20 6a 73  k jk fibokdry js
3b20: 65 75 68 6a 6e 7a 6f 20 5b 7a 6d 5d 20 5b 61 61  euhjnzo [zm] [aa
3b30: 79 78 70 6d 76 65 5d 20 7a 6b 20 6a 6b 7d 20 0a  yxpmve] zk jk} .
3b40: 20 20 20 20 20 20 7b 7a 66 20 6a 6d 66 69 71 68        {zf jmfiqh
3b50: 77 6e 6a 67 20 6a 73 20 69 67 6a 75 20 5b 7a 6d  wnjg js igju [zm
3b60: 5d 20 5b 61 61 79 78 70 6d 76 65 5d 20 7a 6d 20  ] [aayxpmve] zm 
3b70: 6d 62 78 6e 6c 6a 6f 6d 69 76 20 63 73 6a 71 78  mbxnljomiv csjqx
3b80: 68 67 6a 20 6e 76 66 61 73 66 68 7d 0a 20 20 20  hgj nvfasfh}.   
3b90: 20 7d 0a 20 20 20 20 0a 20 20 20 20 23 20 73 6e   }.    .    # sn
3ba0: 69 70 70 65 74 28 29 20 66 75 6e 63 74 69 6f 6e  ippet() function
3bb0: 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 74   with multiple t
3bc0: 6f 6b 65 6e 73 2e 0a 20 20 20 20 64 6f 5f 73 65  okens..    do_se
3bd0: 6c 65 63 74 5f 74 65 73 74 20 35 2e 24 44 4f 5f  lect_test 5.$DO_
3be0: 4d 41 4c 4c 4f 43 5f 54 45 53 54 2e 34 20 7b 0a  MALLOC_TEST.4 {.
3bf0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 73 6e 69        SELECT sni
3c00: 70 70 65 74 28 74 31 2c 20 27 5b 27 2c 20 27 5d  ppet(t1, '[', ']
3c10: 27 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  ') FROM t1 WHERE
3c20: 20 74 31 20 4d 41 54 43 48 20 27 7a 6d 20 7a 68   t1 MATCH 'zm zh
3c30: 62 72 7a 61 64 62 27 0a 20 20 20 20 7d 20 7b 0a  brzadb'.    } {.
3c40: 20 20 20 20 20 20 7b 5b 7a 6d 5d 20 6a 6b 20 5b        {[zm] jk [
3c50: 7a 6d 5d 20 5b 7a 6d 5d 20 5b 7a 68 62 72 7a 61  zm] [zm] [zhbrza
3c60: 64 62 5d 20 75 65 6e 76 62 6d 20 61 61 79 78 70  db] uenvbm aayxp
3c70: 6d 76 65 20 75 72 76 79 73 62 6e 79 6b 6b 20 64  mve urvysbnykk d
3c80: 75 73 7a 65 6d 6d 7a 6c 20 6a 6b 7d 0a 20 20 20  uszemmzl jk}.   
3c90: 20 7d 0a 20 20 20 20 0a 20 20 20 20 23 20 73 6e   }.    .    # sn
3ca0: 69 70 70 65 74 28 29 20 66 75 6e 63 74 69 6f 6e  ippet() function
3cb0: 20 77 69 74 68 20 70 68 72 61 73 65 2e 0a 20 20   with phrase..  
3cc0: 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74    do_select_test
3cd0: 20 35 2e 24 44 4f 5f 4d 41 4c 4c 4f 43 5f 54 45   5.$DO_MALLOC_TE
3ce0: 53 54 2e 35 20 7b 0a 20 20 20 20 20 20 53 45 4c  ST.5 {.      SEL
3cf0: 45 43 54 20 6f 66 66 73 65 74 73 28 74 31 29 20  ECT offsets(t1) 
3d00: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31  FROM t1 WHERE t1
3d10: 20 4d 41 54 43 48 20 27 22 7a 6d 20 61 61 79 78   MATCH '"zm aayx
3d20: 70 6d 76 65 22 27 0a 20 20 20 20 7d 20 7b 0a 20  pmve"'.    } {. 
3d30: 20 20 20 20 20 7b 30 20 30 20 30 20 32 20 30 20       {0 0 0 2 0 
3d40: 31 20 33 20 38 7d 20 7b 30 20 30 20 33 38 20 32  1 3 8} {0 0 38 2
3d50: 20 30 20 31 20 34 31 20 38 7d 20 7b 30 20 30 20   0 1 41 8} {0 0 
3d60: 32 32 20 32 20 30 20 31 20 32 35 20 38 7d 0a 20  22 2 0 1 25 8}. 
3d70: 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 23 20     }.    .    # 
3d80: 73 6e 69 70 70 65 74 28 29 20 66 75 6e 63 74 69  snippet() functi
3d90: 6f 6e 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65  on with multiple
3da0: 20 74 6f 6b 65 6e 73 2e 0a 20 20 20 20 64 6f 5f   tokens..    do_
3db0: 73 65 6c 65 63 74 5f 74 65 73 74 20 35 2e 24 44  select_test 5.$D
3dc0: 4f 5f 4d 41 4c 4c 4f 43 5f 54 45 53 54 2e 36 20  O_MALLOC_TEST.6 
3dd0: 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 6f  {.      SELECT o
3de0: 66 66 73 65 74 73 28 74 31 29 20 46 52 4f 4d 20  ffsets(t1) FROM 
3df0: 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54 43  t1 WHERE t1 MATC
3e00: 48 20 27 7a 6d 20 7a 68 62 72 7a 61 64 62 27 0a  H 'zm zhbrzadb'.
3e10: 20 20 20 20 7d 20 7b 0a 20 20 20 20 20 20 7b 30      } {.      {0
3e20: 20 30 20 30 20 32 20 30 20 30 20 36 20 32 20 30   0 0 2 0 0 6 2 0
3e30: 20 30 20 39 20 32 20 30 20 31 20 31 32 20 38 7d   0 9 2 0 1 12 8}
3e40: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 65 74 20  .    }..    set 
3e50: 44 4f 5f 4d 41 4c 4c 4f 43 5f 54 45 53 54 20 30  DO_MALLOC_TEST 0
3e60: 0a 20 20 7d 0a 0a 20 20 64 6f 5f 73 65 6c 65 63  .  }..  do_selec
3e70: 74 5f 74 65 73 74 20 36 2e 31 20 7b 0a 20 20 20  t_test 6.1 {.   
3e80: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52   SELECT rowid FR
3e90: 4f 4d 20 74 31 20 0a 20 20 20 20 57 48 45 52 45  OM t1 .    WHERE
3ea0: 20 74 31 20 4d 41 54 43 48 20 27 76 67 73 6c 64   t1 MATCH 'vgsld
3eb0: 20 28 68 72 6c 69 70 64 6d 20 4f 52 20 28 61 61   (hrlipdm OR (aa
3ec0: 79 78 70 6d 76 65 20 64 75 73 7a 65 6d 6d 7a 6c  yxpmve duszemmzl
3ed0: 29 29 27 0a 20 20 7d 20 7b 31 30 7d 0a 20 20 64  ))'.  } {10}.  d
3ee0: 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74 20 36 2e  o_select_test 6.
3ef0: 32 2e 31 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  2.1 {.    SELECT
3f00: 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 20 57   rowid FROM t1 W
3f10: 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 22  HERE t1 MATCH '"
3f20: 6a 6b 20 78 64 75 76 66 68 6b 22 27 0a 20 20 7d  jk xduvfhk"'.  }
3f30: 20 7b 38 7d 0a 20 20 64 6f 5f 73 65 6c 65 63 74   {8}.  do_select
3f40: 5f 74 65 73 74 20 36 2e 32 2e 32 20 7b 0a 20 20  _test 6.2.2 {.  
3f50: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46    SELECT rowid F
3f60: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20  ROM t1 WHERE t1 
3f70: 4d 41 54 43 48 20 27 22 7a 6d 20 61 7a 61 76 77  MATCH '"zm azavw
3f80: 6d 22 27 0a 20 20 7d 20 7b 31 35 20 32 36 20 39  m"'.  } {15 26 9
3f90: 32 20 39 36 7d 0a 20 20 69 66 20 7b 24 66 74 73  2 96}.  if {$fts
3fa0: 33 5f 73 69 6d 70 6c 65 5f 64 65 66 65 72 72 65  3_simple_deferre
3fb0: 64 5f 74 6f 6b 65 6e 73 5f 6f 6e 6c 79 3d 3d 30  d_tokens_only==0
3fc0: 7d 20 7b 0a 20 20 20 20 64 6f 5f 73 65 6c 65 63  } {.    do_selec
3fd0: 74 5f 74 65 73 74 20 36 2e 32 2e 33 20 7b 0a 20  t_test 6.2.3 {. 
3fe0: 20 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69       SELECT rowi
3ff0: 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  d FROM t1 WHERE 
4000: 74 31 20 4d 41 54 43 48 20 27 22 6a 6b 20 78 64  t1 MATCH '"jk xd
4010: 75 76 66 68 6b 22 20 4f 52 20 22 7a 6d 20 61 7a  uvfhk" OR "zm az
4020: 61 76 77 6d 22 27 0a 20 20 20 20 7d 20 7b 38 20  avwm"'.    } {8 
4030: 31 35 20 32 36 20 39 32 20 39 36 7d 0a 20 20 7d  15 26 92 96}.  }
4040: 0a 0a 20 20 69 66 20 7b 24 74 6e 3e 31 7d 20 7b  ..  if {$tn>1} {
4050: 0a 20 20 20 20 23 20 54 68 65 73 65 20 74 65 73  .    # These tes
4060: 74 73 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b  ts will not work
4070: 20 77 69 74 68 20 24 74 6e 3d 3d 31 2c 20 61 73   with $tn==1, as
4080: 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 74 61   in this case ta
4090: 62 6c 65 20 74 31 20 69 73 0a 20 20 20 20 23 20  ble t1 is.    # 
40a0: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 46 54  created using FT
40b0: 53 33 2e 20 54 68 65 20 5e 20 73 79 6e 74 61 78  S3. The ^ syntax
40c0: 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62   is only availab
40d0: 6c 65 20 77 69 74 68 20 46 54 53 34 20 74 61 62  le with FTS4 tab
40e0: 6c 65 73 2e 0a 20 20 20 20 23 0a 20 20 20 20 64  les..    #.    d
40f0: 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74 20 37 2e  o_select_test 7.
4100: 31 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  1 {.      SELECT
4110: 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 20 57   rowid FROM t1 W
4120: 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 5e  HERE t1 MATCH '^
4130: 7a 6d 20 6d 6a 70 61 76 6a 75 68 77 27 0a 20 20  zm mjpavjuhw'.  
4140: 20 20 7d 20 7b 35 36 20 36 32 7d 0a 20 20 20 20    } {56 62}.    
4150: 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74 20 37  do_select_test 7
4160: 2e 32 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  .2 {.      SELEC
4170: 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 20  T rowid FROM t1 
4180: 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27  WHERE t1 MATCH '
4190: 5e 61 7a 61 76 77 6d 20 7a 6d 27 0a 20 20 20 20  ^azavwm zm'.    
41a0: 7d 20 7b 34 33 7d 0a 20 20 7d 0a 7d 0a 0a 73 65  } {43}.  }.}..se
41b0: 74 20 74 65 73 74 70 72 65 66 69 78 20 66 74 73  t testprefix fts
41c0: 33 64 65 66 65 72 0a 0a 64 6f 5f 65 78 65 63 73  3defer..do_execs
41d0: 71 6c 5f 74 65 73 74 20 33 2e 31 20 7b 0a 20 20  ql_test 3.1 {.  
41e0: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
41f0: 41 42 4c 45 20 78 31 20 55 53 49 4e 47 20 66 74  ABLE x1 USING ft
4200: 73 34 28 61 2c 20 62 29 3b 0a 20 20 49 4e 53 45  s4(a, b);.  INSE
4210: 52 54 20 49 4e 54 4f 20 78 31 20 56 41 4c 55 45  RT INTO x1 VALUE
4220: 53 28 27 61 20 62 20 63 27 2c 20 27 64 20 65 20  S('a b c', 'd e 
4230: 66 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  f');.  INSERT IN
4240: 54 4f 20 78 31 20 53 45 4c 45 43 54 20 2a 20 46  TO x1 SELECT * F
4250: 52 4f 4d 20 78 31 3b 0a 20 20 49 4e 53 45 52 54  ROM x1;.  INSERT
4260: 20 49 4e 54 4f 20 78 31 20 53 45 4c 45 43 54 20   INTO x1 SELECT 
4270: 2a 20 46 52 4f 4d 20 78 31 3b 0a 20 20 49 4e 53  * FROM x1;.  INS
4280: 45 52 54 20 49 4e 54 4f 20 78 31 20 53 45 4c 45  ERT INTO x1 SELE
4290: 43 54 20 2a 20 46 52 4f 4d 20 78 31 3b 0a 20 20  CT * FROM x1;.  
42a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31 20 53  INSERT INTO x1 S
42b0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 31 3b  ELECT * FROM x1;
42c0: 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .}.do_execsql_te
42d0: 73 74 20 33 2e 32 20 22 0a 20 20 49 4e 53 45 52  st 3.2 ".  INSER
42e0: 54 20 49 4e 54 4f 20 78 31 20 56 41 4c 55 45 53  T INTO x1 VALUES
42f0: 28 0a 20 20 20 20 27 5b 73 74 72 69 6e 67 20 72  (.    '[string r
4300: 65 70 65 61 74 20 7b 64 20 7d 20 33 30 30 30 5d  epeat {d } 3000]
4310: 27 2c 20 27 5b 73 74 72 69 6e 67 20 72 65 70 65  ', '[string repe
4320: 61 74 20 7b 66 20 7d 20 33 30 30 30 30 5d 27 0a  at {f } 30000]'.
4330: 20 20 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e    );.  INSERT IN
4340: 54 4f 20 78 31 28 78 31 29 20 56 41 4c 55 45 53  TO x1(x1) VALUES
4350: 28 27 6f 70 74 69 6d 69 7a 65 27 29 3b 0a 22 0a  ('optimize');.".
4360: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
4370: 20 33 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20   3.3 {.  SELECT 
4380: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 78 31  count(*) FROM x1
4390: 20 57 48 45 52 45 20 78 31 20 4d 41 54 43 48 20   WHERE x1 MATCH 
43a0: 27 22 64 20 65 20 66 22 27 0a 7d 20 7b 31 36 7d  '"d e f"'.} {16}
43b0: 0a 0a 23 20 41 74 20 6f 6e 65 20 70 6f 69 6e 74  ..# At one point
43c0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 77   the following w
43d0: 61 73 20 63 61 75 73 69 6e 67 20 61 20 66 6c 6f  as causing a flo
43e0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 65 78 63 65  ating-point exce
43f0: 70 74 69 6f 6e 2e 0a 23 0a 64 6f 5f 65 78 65 63  ption..#.do_exec
4400: 73 71 6c 5f 74 65 73 74 20 34 2e 31 20 7b 0a 20  sql_test 4.1 {. 
4410: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
4420: 54 41 42 4c 45 20 78 32 20 55 53 49 4e 47 20 46  TABLE x2 USING F
4430: 54 53 34 28 78 29 3b 0a 20 20 42 45 47 49 4e 3b  TS4(x);.  BEGIN;
4440: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78  .  INSERT INTO x
4450: 32 20 56 41 4c 55 45 53 28 27 6d 20 6d 20 6d 20  2 VALUES('m m m 
4460: 6d 20 6d 20 6d 20 6d 20 6d 20 6d 20 6d 20 6d 20  m m m m m m m m 
4470: 6d 20 6d 20 6d 20 6d 20 6d 20 6d 20 6d 20 6d 20  m m m m m m m m 
4480: 6d 20 6d 20 6d 20 6d 20 6d 20 6d 20 6d 27 29 3b  m m m m m m m');
4490: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78  .  INSERT INTO x
44a0: 32 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  2 SELECT * FROM 
44b0: 78 32 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  x2;.  INSERT INT
44c0: 4f 20 78 32 20 53 45 4c 45 43 54 20 2a 20 46 52  O x2 SELECT * FR
44d0: 4f 4d 20 78 32 3b 0a 20 20 49 4e 53 45 52 54 20  OM x2;.  INSERT 
44e0: 49 4e 54 4f 20 78 32 20 53 45 4c 45 43 54 20 2a  INTO x2 SELECT *
44f0: 20 46 52 4f 4d 20 78 32 3b 0a 20 20 49 4e 53 45   FROM x2;.  INSE
4500: 52 54 20 49 4e 54 4f 20 78 32 20 53 45 4c 45 43  RT INTO x2 SELEC
4510: 54 20 2a 20 46 52 4f 4d 20 78 32 3b 0a 20 20 49  T * FROM x2;.  I
4520: 4e 53 45 52 54 20 49 4e 54 4f 20 78 32 20 53 45  NSERT INTO x2 SE
4530: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 32 3b 0a  LECT * FROM x2;.
4540: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 32    INSERT INTO x2
4550: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78   SELECT * FROM x
4560: 32 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  2;.  INSERT INTO
4570: 20 78 32 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   x2 SELECT * FRO
4580: 4d 20 78 32 3b 0a 20 20 49 4e 53 45 52 54 20 49  M x2;.  INSERT I
4590: 4e 54 4f 20 78 32 20 53 45 4c 45 43 54 20 2a 20  NTO x2 SELECT * 
45a0: 46 52 4f 4d 20 78 32 3b 0a 20 20 49 4e 53 45 52  FROM x2;.  INSER
45b0: 54 20 49 4e 54 4f 20 78 32 20 53 45 4c 45 43 54  T INTO x2 SELECT
45c0: 20 2a 20 46 52 4f 4d 20 78 32 3b 0a 20 20 49 4e   * FROM x2;.  IN
45d0: 53 45 52 54 20 49 4e 54 4f 20 78 32 20 53 45 4c  SERT INTO x2 SEL
45e0: 45 43 54 20 2a 20 46 52 4f 4d 20 78 32 3b 0a 20  ECT * FROM x2;. 
45f0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 32 20   INSERT INTO x2 
4600: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 32  SELECT * FROM x2
4610: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
4620: 78 32 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  x2 SELECT * FROM
4630: 20 78 32 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e   x2;.  INSERT IN
4640: 54 4f 20 78 32 20 53 45 4c 45 43 54 20 2a 20 46  TO x2 SELECT * F
4650: 52 4f 4d 20 78 32 3b 0a 20 20 49 4e 53 45 52 54  ROM x2;.  INSERT
4660: 20 49 4e 54 4f 20 78 32 20 53 45 4c 45 43 54 20   INTO x2 SELECT 
4670: 2a 20 46 52 4f 4d 20 78 32 3b 0a 20 20 49 4e 53  * FROM x2;.  INS
4680: 45 52 54 20 49 4e 54 4f 20 78 32 20 53 45 4c 45  ERT INTO x2 SELE
4690: 43 54 20 2a 20 46 52 4f 4d 20 78 32 3b 0a 20 20  CT * FROM x2;.  
46a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 32 20 56  INSERT INTO x2 V
46b0: 41 4c 55 45 53 28 27 61 20 62 20 63 20 64 20 65  ALUES('a b c d e
46c0: 20 66 20 67 20 68 20 69 20 6a 20 6b 20 6c 20 6d   f g h i j k l m
46d0: 20 6e 20 6f 20 70 20 71 20 72 20 73 20 74 20 75   n o p q r s t u
46e0: 20 76 20 77 20 78 20 79 20 6d 27 29 3b 0a 20 20   v w x y m');.  
46f0: 43 4f 4d 4d 49 54 3b 0a 7d 0a 64 6f 5f 65 78 65  COMMIT;.}.do_exe
4700: 63 73 71 6c 5f 74 65 73 74 20 34 2e 32 20 7b 0a  csql_test 4.2 {.
4710: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
4720: 78 32 20 57 48 45 52 45 20 78 32 20 4d 41 54 43  x2 WHERE x2 MATC
4730: 48 20 27 61 20 62 20 63 20 64 20 65 20 66 20 67  H 'a b c d e f g
4740: 20 68 20 69 20 6a 20 6b 20 6c 20 6d 20 6e 20 6f   h i j k l m n o
4750: 20 70 20 71 20 72 20 73 27 3b 0a 7d 20 7b 7b 61   p q r s';.} {{a
4760: 20 62 20 63 20 64 20 65 20 66 20 67 20 68 20 69   b c d e f g h i
4770: 20 6a 20 6b 20 6c 20 6d 20 6e 20 6f 20 70 20 71   j k l m n o p q
4780: 20 72 20 73 20 74 20 75 20 76 20 77 20 78 20 79   r s t u v w x y
4790: 20 6d 7d 7d 0a 0a 0a 66 69 6e 69 73 68 5f 74 65   m}}...finish_te
47a0: 73 74 0a                                         st.