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

Artifact 059592c4f37ccd30138bbf8e3e5b7982cb5c8f2e:


0000: 23 20 32 30 30 39 20 4f 63 74 6f 62 65 72 20 32  # 2009 October 2
0010: 32 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  2.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an you give..#.#
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 0a 23 0a 23 20 54 68 69 73  *******.#.# This
0170: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74   file contains t
0180: 65 73 74 73 20 74 6f 20 76 65 72 69 66 79 20 74  ests to verify t
0190: 68 61 74 20 6d 61 6c 6c 6f 63 28 29 20 65 72 72  hat malloc() err
01a0: 6f 72 73 20 74 68 61 74 20 6f 63 63 75 72 0a 23  ors that occur.#
01b0: 20 77 69 74 68 69 6e 20 74 68 65 20 46 54 53 33   within the FTS3
01c0: 20 6d 6f 64 75 6c 65 20 63 6f 64 65 20 61 72 65   module code are
01d0: 20 68 61 6e 64 6c 65 64 20 63 6f 72 72 65 63 74   handled correct
01e0: 6c 79 2e 20 0a 23 0a 0a 73 65 74 20 74 65 73 74  ly. .#..set test
01f0: 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  dir [file dirnam
0200: 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65  e $argv0].source
0210: 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72   $testdir/tester
0220: 2e 74 63 6c 0a 69 66 63 61 70 61 62 6c 65 20 21  .tcl.ifcapable !
0230: 66 74 73 33 20 7b 20 66 69 6e 69 73 68 5f 74 65  fts3 { finish_te
0240: 73 74 20 3b 20 72 65 74 75 72 6e 20 7d 0a 73 6f  st ; return }.so
0250: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 6d 61  urce $testdir/ma
0260: 6c 6c 6f 63 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a  lloc_common.tcl.
0270: 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f  source $testdir/
0280: 66 74 73 33 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a  fts3_common.tcl.
0290: 0a 23 20 45 6e 73 75 72 65 20 74 68 65 20 6c 6f  .# Ensure the lo
02a0: 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 69  okaside buffer i
02b0: 73 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 74  s disabled for t
02c0: 68 65 73 65 20 74 65 73 74 73 2e 0a 23 0a 73 71  hese tests..#.sq
02d0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
02e0: 0a 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66  .sqlite3_db_conf
02f0: 69 67 5f 6c 6f 6f 6b 61 73 69 64 65 20 64 62 20  ig_lookaside db 
0300: 30 20 30 20 30 0a 0a 73 65 74 20 73 71 6c 69 74  0 0 0..set sqlit
0310: 65 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61  e_fts3_enable_pa
0320: 72 65 6e 74 68 65 73 65 73 20 31 0a 73 65 74 20  rentheses 1.set 
0330: 44 4f 5f 4d 41 4c 4c 4f 43 5f 54 45 53 54 20 31  DO_MALLOC_TEST 1
0340: 0a 0a 23 20 54 65 73 74 20 6f 72 67 61 6e 69 7a  ..# Test organiz
0350: 61 74 69 6f 6e 3a 0a 23 0a 23 20 66 74 73 33 5f  ation:.#.# fts3_
0360: 6d 61 6c 6c 6f 63 2d 31 2e 2a 3a 20 54 65 73 74  malloc-1.*: Test
0370: 20 4f 4f 4d 20 64 75 72 69 6e 67 20 43 52 45 41   OOM during CREA
0380: 54 45 20 61 6e 64 20 44 52 4f 50 20 74 61 62 6c  TE and DROP tabl
0390: 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 23 20  e statements..# 
03a0: 66 74 73 33 5f 6d 61 6c 6c 6f 63 2d 32 2e 2a 3a  fts3_malloc-2.*:
03b0: 20 54 65 73 74 20 4f 4f 4d 20 64 75 72 69 6e 67   Test OOM during
03c0: 20 53 45 4c 45 43 54 20 6f 70 65 72 61 74 69 6f   SELECT operatio
03d0: 6e 73 2e 0a 23 20 66 74 73 33 5f 6d 61 6c 6c 6f  ns..# fts3_mallo
03e0: 63 2d 33 2e 2a 3a 20 54 65 73 74 20 4f 4f 4d 20  c-3.*: Test OOM 
03f0: 64 75 72 69 6e 67 20 53 45 4c 45 43 54 20 6f 70  during SELECT op
0400: 65 72 61 74 69 6f 6e 73 20 77 69 74 68 20 61 20  erations with a 
0410: 6c 61 72 67 65 72 20 64 61 74 61 62 61 73 65 2e  larger database.
0420: 0a 23 20 66 74 73 33 5f 6d 61 6c 6c 6f 63 2d 34  .# fts3_malloc-4
0430: 2e 2a 3a 20 54 65 73 74 20 4f 4f 4d 20 64 75 72  .*: Test OOM dur
0440: 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 72 69  ing database wri
0450: 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 23  te operations..#
0460: 20 66 74 73 33 5f 6d 61 6c 6c 6f 63 2d 35 2e 2a   fts3_malloc-5.*
0470: 3a 20 54 65 73 74 20 74 68 61 74 20 61 20 63 6f  : Test that a co
0480: 75 70 6c 65 20 6f 66 20 6d 65 6d 6f 72 79 20 6c  uple of memory l
0490: 65 61 6b 73 20 74 68 61 74 20 63 6f 75 6c 64 20  eaks that could 
04a0: 66 6f 6c 6c 6f 77 0a 23 20 20 20 20 20 20 20 20  follow.#        
04b0: 20 20 20 20 20 20 20 20 20 20 4f 4f 4d 20 69 6e            OOM in
04c0: 20 74 6f 6b 65 6e 69 7a 65 72 20 63 6f 64 65 20   tokenizer code 
04d0: 68 61 76 65 20 62 65 65 6e 20 66 69 78 65 64 2e  have been fixed.
04e0: 0a 23 0a 0a 0a 70 72 6f 63 20 6e 6f 72 6d 61 6c  .#...proc normal
04f0: 5f 6c 69 73 74 20 7b 6c 7d 20 7b 0a 20 20 73 65  _list {l} {.  se
0500: 74 20 72 65 74 20 5b 6c 69 73 74 5d 0a 20 20 66  t ret [list].  f
0510: 6f 72 65 61 63 68 20 65 6c 65 6d 20 24 6c 20 7b  oreach elem $l {
0520: 6c 61 70 70 65 6e 64 20 72 65 74 20 24 65 6c 65  lappend ret $ele
0530: 6d 7d 0a 20 20 73 65 74 20 72 65 74 0a 7d 0a 0a  m}.  set ret.}..
0540: 0a 64 6f 5f 77 72 69 74 65 5f 74 65 73 74 20 66  .do_write_test f
0550: 74 73 33 5f 6d 61 6c 6c 6f 63 2d 31 2e 31 20 73  ts3_malloc-1.1 s
0560: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 7b 0a 20  qlite_master {. 
0570: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
0580: 54 41 42 4c 45 20 66 74 31 20 55 53 49 4e 47 20  TABLE ft1 USING 
0590: 66 74 73 33 28 61 2c 20 62 29 0a 7d 0a 64 6f 5f  fts3(a, b).}.do_
05a0: 77 72 69 74 65 5f 74 65 73 74 20 66 74 73 33 5f  write_test fts3_
05b0: 6d 61 6c 6c 6f 63 2d 31 2e 32 20 73 71 6c 69 74  malloc-1.2 sqlit
05c0: 65 5f 6d 61 73 74 65 72 20 7b 0a 20 20 43 52 45  e_master {.  CRE
05d0: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
05e0: 45 20 66 74 32 20 55 53 49 4e 47 20 66 74 73 33  E ft2 USING fts3
05f0: 28 5b 61 5d 2c 20 5b 62 5d 29 3b 0a 7d 0a 64 6f  ([a], [b]);.}.do
0600: 5f 77 72 69 74 65 5f 74 65 73 74 20 66 74 73 33  _write_test fts3
0610: 5f 6d 61 6c 6c 6f 63 2d 31 2e 33 20 73 71 6c 69  _malloc-1.3 sqli
0620: 74 65 5f 6d 61 73 74 65 72 20 7b 0a 20 20 43 52  te_master {.  CR
0630: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
0640: 4c 45 20 66 74 33 20 55 53 49 4e 47 20 66 74 73  LE ft3 USING fts
0650: 33 28 27 61 27 2c 20 22 62 22 29 3b 0a 7d 0a 64  3('a', "b");.}.d
0660: 6f 5f 77 72 69 74 65 5f 74 65 73 74 20 66 74 73  o_write_test fts
0670: 33 5f 6d 61 6c 6c 6f 63 2d 31 2e 34 20 73 71 6c  3_malloc-1.4 sql
0680: 69 74 65 5f 6d 61 73 74 65 72 20 7b 0a 20 20 43  ite_master {.  C
0690: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
06a0: 42 4c 45 20 66 74 34 20 55 53 49 4e 47 20 66 74  BLE ft4 USING ft
06b0: 73 33 28 60 61 60 2c 20 27 66 72 65 64 27 27 73  s3(`a`, 'fred''s
06c0: 20 63 6f 6c 75 6d 6e 27 29 3b 0a 7d 0a 64 6f 5f   column');.}.do_
06d0: 65 72 72 6f 72 5f 74 65 73 74 20 66 74 73 33 5f  error_test fts3_
06e0: 6d 61 6c 6c 6f 63 2d 31 2e 35 20 7b 0a 20 20 43  malloc-1.5 {.  C
06f0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
0700: 42 4c 45 20 66 74 35 20 55 53 49 4e 47 20 66 74  BLE ft5 USING ft
0710: 73 33 28 61 2c 20 62 2c 20 74 6f 6b 65 6e 69 7a  s3(a, b, tokeniz
0720: 65 20 75 6e 6b 6e 6f 77 6e 29 0a 7d 20 7b 75 6e  e unknown).} {un
0730: 6b 6e 6f 77 6e 20 74 6f 6b 65 6e 69 7a 65 72 3a  known tokenizer:
0740: 20 75 6e 6b 6e 6f 77 6e 7d 0a 64 6f 5f 77 72 69   unknown}.do_wri
0750: 74 65 5f 74 65 73 74 20 66 74 73 33 5f 6d 61 6c  te_test fts3_mal
0760: 6c 6f 63 2d 31 2e 36 20 73 71 6c 69 74 65 5f 6d  loc-1.6 sqlite_m
0770: 61 73 74 65 72 20 7b 0a 20 20 43 52 45 41 54 45  aster {.  CREATE
0780: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 66   VIRTUAL TABLE f
0790: 74 36 20 55 53 49 4e 47 20 66 74 73 33 28 61 2c  t6 USING fts3(a,
07a0: 20 62 2c 20 74 6f 6b 65 6e 69 7a 65 20 70 6f 72   b, tokenize por
07b0: 74 65 72 29 0a 7d 0a 0a 23 20 54 65 73 74 20 74  ter).}..# Test t
07c0: 68 65 20 78 43 6f 6e 6e 65 63 74 2f 78 44 69 73  he xConnect/xDis
07d0: 63 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 73 3a  connect methods:
07e0: 0a 23 64 62 20 65 76 61 6c 20 7b 20 41 54 54 41  .#db eval { ATTA
07f0: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
0800: 20 61 75 78 20 7d 0a 23 64 6f 5f 77 72 69 74 65   aux }.#do_write
0810: 5f 74 65 73 74 20 66 74 73 33 5f 6d 61 6c 6c 6f  _test fts3_mallo
0820: 63 2d 31 2e 36 20 61 75 78 2e 73 71 6c 69 74 65  c-1.6 aux.sqlite
0830: 5f 6d 61 73 74 65 72 20 7b 0a 23 20 20 43 52 45  _master {.#  CRE
0840: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
0850: 45 20 61 75 78 2e 66 74 37 20 55 53 49 4e 47 20  E aux.ft7 USING 
0860: 66 74 73 33 28 61 2c 20 62 2c 20 63 29 3b 0a 23  fts3(a, b, c);.#
0870: 7d 0a 23 64 6f 5f 77 72 69 74 65 5f 74 65 73 74  }.#do_write_test
0880: 20 66 74 73 33 5f 6d 61 6c 6c 6f 63 2d 31 2e 36   fts3_malloc-1.6
0890: 20 61 75 78 2e 73 71 6c 69 74 65 5f 6d 61 73 74   aux.sqlite_mast
08a0: 65 72 20 7b 0a 23 20 20 43 52 45 41 54 45 20 56  er {.#  CREATE V
08b0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 61 75 78  IRTUAL TABLE aux
08c0: 2e 66 74 37 20 55 53 49 4e 47 20 66 74 73 33 28  .ft7 USING fts3(
08d0: 61 2c 20 62 2c 20 63 29 3b 0a 23 7d 0a 0a 0a 0a  a, b, c);.#}....
08e0: 64 6f 5f 74 65 73 74 20 66 74 73 33 5f 6d 61 6c  do_test fts3_mal
08f0: 6c 6f 63 2d 32 2e 30 20 7b 0a 20 20 65 78 65 63  loc-2.0 {.  exec
0900: 73 71 6c 20 7b 20 0a 20 20 20 20 44 52 4f 50 20  sql { .    DROP 
0910: 54 41 42 4c 45 20 66 74 31 3b 0a 20 20 20 20 44  TABLE ft1;.    D
0920: 52 4f 50 20 54 41 42 4c 45 20 66 74 32 3b 0a 20  ROP TABLE ft2;. 
0930: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 66 74     DROP TABLE ft
0940: 33 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c  3;.    DROP TABL
0950: 45 20 66 74 34 3b 0a 20 20 20 20 44 52 4f 50 20  E ft4;.    DROP 
0960: 54 41 42 4c 45 20 66 74 36 3b 0a 20 20 7d 0a 20  TABLE ft6;.  }. 
0970: 20 65 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54   execsql { CREAT
0980: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
0990: 66 74 20 55 53 49 4e 47 20 66 74 73 33 28 61 2c  ft USING fts3(a,
09a0: 20 62 29 20 7d 0a 20 20 66 6f 72 20 7b 73 65 74   b) }.  for {set
09b0: 20 69 69 20 31 7d 20 7b 24 69 69 20 3c 20 33 32   ii 1} {$ii < 32
09c0: 7d 20 7b 69 6e 63 72 20 69 69 7d 20 7b 0a 20 20  } {incr ii} {.  
09d0: 20 20 73 65 74 20 61 20 5b 6c 69 73 74 5d 0a 20    set a [list]. 
09e0: 20 20 20 73 65 74 20 62 20 5b 6c 69 73 74 5d 0a     set b [list].
09f0: 20 20 20 20 69 66 20 7b 24 69 69 20 26 20 30 78      if {$ii & 0x
0a00: 30 31 7d 20 7b 6c 61 70 70 65 6e 64 20 61 20 6f  01} {lappend a o
0a10: 6e 65 20 20 20 3b 20 6c 61 70 70 65 6e 64 20 62  ne   ; lappend b
0a20: 20 6e 65 75 6e 67 7d 0a 20 20 20 20 69 66 20 7b   neung}.    if {
0a30: 24 69 69 20 26 20 30 78 30 32 7d 20 7b 6c 61 70  $ii & 0x02} {lap
0a40: 70 65 6e 64 20 61 20 74 77 6f 20 20 20 3b 20 6c  pend a two   ; l
0a50: 61 70 70 65 6e 64 20 62 20 73 6f 6e 67 20 7d 0a  append b song }.
0a60: 20 20 20 20 69 66 20 7b 24 69 69 20 26 20 30 78      if {$ii & 0x
0a70: 30 34 7d 20 7b 6c 61 70 70 65 6e 64 20 61 20 74  04} {lappend a t
0a80: 68 72 65 65 20 3b 20 6c 61 70 70 65 6e 64 20 62  hree ; lappend b
0a90: 20 73 61 68 6d 20 7d 0a 20 20 20 20 69 66 20 7b   sahm }.    if {
0aa0: 24 69 69 20 26 20 30 78 30 38 7d 20 7b 6c 61 70  $ii & 0x08} {lap
0ab0: 70 65 6e 64 20 61 20 66 6f 75 72 20 20 3b 20 6c  pend a four  ; l
0ac0: 61 70 70 65 6e 64 20 62 20 73 65 65 20 20 7d 0a  append b see  }.
0ad0: 20 20 20 20 69 66 20 7b 24 69 69 20 26 20 30 78      if {$ii & 0x
0ae0: 31 30 7d 20 7b 6c 61 70 70 65 6e 64 20 61 20 66  10} {lappend a f
0af0: 69 76 65 20 20 3b 20 6c 61 70 70 65 6e 64 20 62  ive  ; lappend b
0b00: 20 68 61 68 20 20 7d 0a 20 20 20 20 65 78 65 63   hah  }.    exec
0b10: 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  sql { INSERT INT
0b20: 4f 20 66 74 20 56 41 4c 55 45 53 28 24 61 2c 20  O ft VALUES($a, 
0b30: 24 62 29 20 7d 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  $b) }.  }.} {}..
0b40: 66 6f 72 65 61 63 68 20 7b 74 6e 20 73 71 6c 20  foreach {tn sql 
0b50: 72 65 73 75 6c 74 7d 20 7b 0a 20 20 31 20 22 53  result} {.  1 "S
0b60: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
0b70: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
0b80: 72 22 20 7b 35 7d 0a 20 20 32 20 22 53 45 4c 45  r" {5}.  2 "SELE
0b90: 43 54 20 2a 20 46 52 4f 4d 20 66 74 20 57 48 45  CT * FROM ft WHE
0ba0: 52 45 20 64 6f 63 69 64 20 3d 20 31 22 20 20 20  RE docid = 1"   
0bb0: 7b 6f 6e 65 20 6e 65 75 6e 67 7d 0a 20 20 33 20  {one neung}.  3 
0bc0: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 66  "SELECT * FROM f
0bd0: 74 20 57 48 45 52 45 20 64 6f 63 69 64 20 3d 20  t WHERE docid = 
0be0: 32 22 20 20 20 7b 74 77 6f 20 73 6f 6e 67 7d 0a  2"   {two song}.
0bf0: 20 20 34 20 22 53 45 4c 45 43 54 20 2a 20 46 52    4 "SELECT * FR
0c00: 4f 4d 20 66 74 20 57 48 45 52 45 20 64 6f 63 69  OM ft WHERE doci
0c10: 64 20 3d 20 33 22 20 20 20 7b 7b 6f 6e 65 20 74  d = 3"   {{one t
0c20: 77 6f 7d 20 7b 6e 65 75 6e 67 20 73 6f 6e 67 7d  wo} {neung song}
0c30: 7d 0a 0a 20 20 35 20 22 53 45 4c 45 43 54 20 61  }..  5 "SELECT a
0c40: 20 46 52 4f 4d 20 66 74 22 20 7b 0a 20 20 20 20   FROM ft" {.    
0c50: 7b 6f 6e 65 7d 20 20 20 20 20 20 20 20 20 20 20  {one}           
0c60: 20 20 20 20 20 20 20 20 20 20 7b 74 77 6f 7d 20            {two} 
0c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c80: 7b 6f 6e 65 20 74 77 6f 7d 0a 20 20 20 20 7b 74  {one two}.    {t
0c90: 68 72 65 65 7d 20 20 20 20 20 20 20 20 20 20 20  hree}           
0ca0: 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74 68 72          {one thr
0cb0: 65 65 7d 20 20 20 20 20 20 20 20 20 20 20 7b 74  ee}           {t
0cc0: 77 6f 20 74 68 72 65 65 7d 20 20 20 20 20 0a 20  wo three}     . 
0cd0: 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65     {one two thre
0ce0: 65 7d 20 20 20 20 20 20 20 20 20 20 20 7b 66 6f  e}           {fo
0cf0: 75 72 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ur}             
0d00: 20 20 20 7b 6f 6e 65 20 66 6f 75 72 7d 20 0a 20     {one four} . 
0d10: 20 20 20 7b 74 77 6f 20 66 6f 75 72 7d 20 20 20     {two four}   
0d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f 6e               {on
0d30: 65 20 74 77 6f 20 66 6f 75 72 7d 20 20 20 20 20  e two four}     
0d40: 20 20 20 7b 74 68 72 65 65 20 66 6f 75 72 7d 20     {three four} 
0d50: 20 20 0a 20 20 20 20 7b 6f 6e 65 20 74 68 72 65    .    {one thre
0d60: 65 20 66 6f 75 72 7d 20 20 20 20 20 20 20 20 20  e four}         
0d70: 20 7b 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72   {two three four
0d80: 7d 20 20 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20  }      {one two 
0d90: 74 68 72 65 65 20 66 6f 75 72 7d 20 20 0a 20 20  three four}  .  
0da0: 20 20 7b 66 69 76 65 7d 20 20 20 20 20 20 20 20    {five}        
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f 6e 65              {one
0dc0: 20 66 69 76 65 7d 20 20 20 20 20 20 20 20 20 20   five}          
0dd0: 20 20 7b 74 77 6f 20 66 69 76 65 7d 20 20 20 20    {two five}    
0de0: 20 20 20 20 20 20 20 20 0a 20 20 20 20 7b 6f 6e          .    {on
0df0: 65 20 74 77 6f 20 66 69 76 65 7d 20 20 20 20 20  e two five}     
0e00: 20 20 20 20 20 20 20 7b 74 68 72 65 65 20 66 69         {three fi
0e10: 76 65 7d 20 20 20 20 20 20 20 20 20 20 7b 6f 6e  ve}          {on
0e20: 65 20 74 68 72 65 65 20 66 69 76 65 7d 20 0a 20  e three five} . 
0e30: 20 20 20 7b 74 77 6f 20 74 68 72 65 65 20 66 69     {two three fi
0e40: 76 65 7d 20 20 20 20 20 20 20 20 20 20 7b 6f 6e  ve}          {on
0e50: 65 20 74 77 6f 20 74 68 72 65 65 20 66 69 76 65  e two three five
0e60: 7d 20 20 7b 66 6f 75 72 20 66 69 76 65 7d 0a 20  }  {four five}. 
0e70: 20 20 20 7b 6f 6e 65 20 66 6f 75 72 20 66 69 76     {one four fiv
0e80: 65 7d 20 20 20 20 20 20 20 20 20 20 20 7b 74 77  e}           {tw
0e90: 6f 20 66 6f 75 72 20 66 69 76 65 7d 20 20 20 20  o four five}    
0ea0: 20 20 20 7b 6f 6e 65 20 74 77 6f 20 66 6f 75 72     {one two four
0eb0: 20 66 69 76 65 7d 0a 20 20 20 20 7b 74 68 72 65   five}.    {thre
0ec0: 65 20 66 6f 75 72 20 66 69 76 65 7d 20 20 20 20  e four five}    
0ed0: 20 20 20 20 20 7b 6f 6e 65 20 74 68 72 65 65 20       {one three 
0ee0: 66 6f 75 72 20 66 69 76 65 7d 20 7b 74 77 6f 20  four five} {two 
0ef0: 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65 7d  three four five}
0f00: 0a 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68  .    {one two th
0f10: 72 65 65 20 66 6f 75 72 20 66 69 76 65 7d 0a 20  ree four five}. 
0f20: 20 7d 0a 0a 20 20 36 20 22 53 45 4c 45 43 54 20   }..  6 "SELECT 
0f30: 61 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20  a FROM ft WHERE 
0f40: 61 20 4d 41 54 43 48 20 27 6f 6e 65 27 22 20 7b  a MATCH 'one'" {
0f50: 0a 20 20 20 20 7b 6f 6e 65 7d 20 7b 6f 6e 65 20  .    {one} {one 
0f60: 74 77 6f 7d 20 7b 6f 6e 65 20 74 68 72 65 65 7d  two} {one three}
0f70: 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 7d   {one two three}
0f80: 0a 20 20 20 20 7b 6f 6e 65 20 66 6f 75 72 7d 20  .    {one four} 
0f90: 7b 6f 6e 65 20 74 77 6f 20 66 6f 75 72 7d 20 7b  {one two four} {
0fa0: 6f 6e 65 20 74 68 72 65 65 20 66 6f 75 72 7d 20  one three four} 
0fb0: 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66  {one two three f
0fc0: 6f 75 72 7d 0a 20 20 20 20 7b 6f 6e 65 20 66 69  our}.    {one fi
0fd0: 76 65 7d 20 7b 6f 6e 65 20 74 77 6f 20 66 69 76  ve} {one two fiv
0fe0: 65 7d 20 7b 6f 6e 65 20 74 68 72 65 65 20 66 69  e} {one three fi
0ff0: 76 65 7d 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72  ve} {one two thr
1000: 65 65 20 66 69 76 65 7d 0a 20 20 20 20 7b 6f 6e  ee five}.    {on
1010: 65 20 66 6f 75 72 20 66 69 76 65 7d 20 7b 6f 6e  e four five} {on
1020: 65 20 74 77 6f 20 66 6f 75 72 20 66 69 76 65 7d  e two four five}
1030: 20 0a 20 20 20 20 7b 6f 6e 65 20 74 68 72 65 65   .    {one three
1040: 20 66 6f 75 72 20 66 69 76 65 7d 20 7b 6f 6e 65   four five} {one
1050: 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20   two three four 
1060: 66 69 76 65 7d 0a 20 20 7d 0a 0a 20 20 37 20 22  five}.  }..  7 "
1070: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 66 74  SELECT a FROM ft
1080: 20 57 48 45 52 45 20 61 20 4d 41 54 43 48 20 27   WHERE a MATCH '
1090: 6f 2a 27 22 20 7b 0a 20 20 20 20 7b 6f 6e 65 7d  o*'" {.    {one}
10a0: 20 7b 6f 6e 65 20 74 77 6f 7d 20 7b 6f 6e 65 20   {one two} {one 
10b0: 74 68 72 65 65 7d 20 7b 6f 6e 65 20 74 77 6f 20  three} {one two 
10c0: 74 68 72 65 65 7d 0a 20 20 20 20 7b 6f 6e 65 20  three}.    {one 
10d0: 66 6f 75 72 7d 20 7b 6f 6e 65 20 74 77 6f 20 66  four} {one two f
10e0: 6f 75 72 7d 20 7b 6f 6e 65 20 74 68 72 65 65 20  our} {one three 
10f0: 66 6f 75 72 7d 20 7b 6f 6e 65 20 74 77 6f 20 74  four} {one two t
1100: 68 72 65 65 20 66 6f 75 72 7d 0a 20 20 20 20 7b  hree four}.    {
1110: 6f 6e 65 20 66 69 76 65 7d 20 7b 6f 6e 65 20 74  one five} {one t
1120: 77 6f 20 66 69 76 65 7d 20 7b 6f 6e 65 20 74 68  wo five} {one th
1130: 72 65 65 20 66 69 76 65 7d 20 7b 6f 6e 65 20 74  ree five} {one t
1140: 77 6f 20 74 68 72 65 65 20 66 69 76 65 7d 0a 20  wo three five}. 
1150: 20 20 20 7b 6f 6e 65 20 66 6f 75 72 20 66 69 76     {one four fiv
1160: 65 7d 20 7b 6f 6e 65 20 74 77 6f 20 66 6f 75 72  e} {one two four
1170: 20 66 69 76 65 7d 20 0a 20 20 20 20 7b 6f 6e 65   five} .    {one
1180: 20 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65   three four five
1190: 7d 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65  } {one two three
11a0: 20 66 6f 75 72 20 66 69 76 65 7d 0a 20 20 7d 0a   four five}.  }.
11b0: 0a 20 20 38 20 22 53 45 4c 45 43 54 20 61 20 46  .  8 "SELECT a F
11c0: 52 4f 4d 20 66 74 20 57 48 45 52 45 20 61 20 4d  ROM ft WHERE a M
11d0: 41 54 43 48 20 27 6f 2a 20 74 2a 27 22 20 7b 0a  ATCH 'o* t*'" {.
11e0: 20 20 20 20 7b 6f 6e 65 20 74 77 6f 7d 20 20 20      {one two}   
11f0: 20 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74            {one t
1200: 68 72 65 65 7d 20 20 20 20 20 20 20 20 20 20 20  hree}           
1210: 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 7d 20  {one two three} 
1220: 0a 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 66 6f  .    {one two fo
1230: 75 72 7d 20 20 20 20 20 20 20 20 7b 6f 6e 65 20  ur}        {one 
1240: 74 68 72 65 65 20 66 6f 75 72 7d 20 20 20 20 20  three four}     
1250: 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20   {one two three 
1260: 66 6f 75 72 7d 20 0a 20 20 20 20 7b 6f 6e 65 20  four} .    {one 
1270: 74 77 6f 20 66 69 76 65 7d 20 20 20 20 20 20 20  two five}       
1280: 20 7b 6f 6e 65 20 74 68 72 65 65 20 66 69 76 65   {one three five
1290: 7d 20 20 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20  }      {one two 
12a0: 74 68 72 65 65 20 66 69 76 65 7d 20 0a 20 20 20  three five} .   
12b0: 20 7b 6f 6e 65 20 74 77 6f 20 66 6f 75 72 20 66   {one two four f
12c0: 69 76 65 7d 20 20 20 7b 6f 6e 65 20 74 68 72 65  ive}   {one thre
12d0: 65 20 66 6f 75 72 20 66 69 76 65 7d 20 7b 6f 6e  e four five} {on
12e0: 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72  e two three four
12f0: 20 66 69 76 65 7d 0a 20 20 7d 0a 0a 20 20 39 20   five}.  }..  9 
1300: 22 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 66  "SELECT a FROM f
1310: 74 20 57 48 45 52 45 20 61 20 4d 41 54 43 48 20  t WHERE a MATCH 
1320: 27 5c 22 6f 2a 20 74 2a 5c 22 27 22 20 7b 0a 20  '\"o* t*\"'" {. 
1330: 20 20 20 7b 6f 6e 65 20 74 77 6f 7d 20 20 20 20     {one two}    
1340: 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74 68           {one th
1350: 72 65 65 7d 20 20 20 20 20 20 20 20 20 20 20 7b  ree}           {
1360: 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 7d 20 0a  one two three} .
1370: 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 66 6f 75      {one two fou
1380: 72 7d 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74  r}        {one t
1390: 68 72 65 65 20 66 6f 75 72 7d 20 20 20 20 20 20  hree four}      
13a0: 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66  {one two three f
13b0: 6f 75 72 7d 20 0a 20 20 20 20 7b 6f 6e 65 20 74  our} .    {one t
13c0: 77 6f 20 66 69 76 65 7d 20 20 20 20 20 20 20 20  wo five}        
13d0: 7b 6f 6e 65 20 74 68 72 65 65 20 66 69 76 65 7d  {one three five}
13e0: 20 20 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74        {one two t
13f0: 68 72 65 65 20 66 69 76 65 7d 20 0a 20 20 20 20  hree five} .    
1400: 7b 6f 6e 65 20 74 77 6f 20 66 6f 75 72 20 66 69  {one two four fi
1410: 76 65 7d 20 20 20 7b 6f 6e 65 20 74 68 72 65 65  ve}   {one three
1420: 20 66 6f 75 72 20 66 69 76 65 7d 20 7b 6f 6e 65   four five} {one
1430: 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20   two three four 
1440: 66 69 76 65 7d 0a 20 20 7d 0a 0a 20 20 31 30 20  five}.  }..  10 
1450: 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 66  {SELECT a FROM f
1460: 74 20 57 48 45 52 45 20 61 20 4d 41 54 43 48 20  t WHERE a MATCH 
1470: 27 22 6f 2a 20 66 2a 22 27 7d 20 7b 0a 20 20 20  '"o* f*"'} {.   
1480: 20 7b 6f 6e 65 20 66 6f 75 72 7d 20 20 20 20 20   {one four}     
1490: 20 20 20 20 20 20 20 7b 6f 6e 65 20 66 69 76 65         {one five
14a0: 7d 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f 6e  }            {on
14b0: 65 20 66 6f 75 72 20 66 69 76 65 7d 0a 20 20 7d  e four five}.  }
14c0: 0a 0a 20 20 31 31 20 7b 53 45 4c 45 43 54 20 61  ..  11 {SELECT a
14d0: 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20 61   FROM ft WHERE a
14e0: 20 4d 41 54 43 48 20 27 22 6f 6e 65 20 74 77 6f   MATCH '"one two
14f0: 20 74 68 72 65 65 22 27 7d 20 7b 0a 20 20 20 20   three"'} {.    
1500: 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 7d 0a  {one two three}.
1510: 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72      {one two thr
1520: 65 65 20 66 6f 75 72 7d 20 20 0a 20 20 20 20 7b  ee four}  .    {
1530: 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66 69  one two three fi
1540: 76 65 7d 0a 20 20 20 20 7b 6f 6e 65 20 74 77 6f  ve}.    {one two
1550: 20 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65   three four five
1560: 7d 0a 20 20 7d 0a 0a 20 20 31 32 20 7b 53 45 4c  }.  }..  12 {SEL
1570: 45 43 54 20 61 20 46 52 4f 4d 20 66 74 20 57 48  ECT a FROM ft WH
1580: 45 52 45 20 61 20 4d 41 54 43 48 20 27 22 74 77  ERE a MATCH '"tw
1590: 6f 20 74 68 72 65 65 20 66 6f 75 72 22 27 7d 20  o three four"'} 
15a0: 7b 0a 20 20 20 20 7b 74 77 6f 20 74 68 72 65 65  {.    {two three
15b0: 20 66 6f 75 72 7d 0a 20 20 20 20 7b 6f 6e 65 20   four}.    {one 
15c0: 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72 7d 0a  two three four}.
15d0: 20 20 20 20 7b 74 77 6f 20 74 68 72 65 65 20 66      {two three f
15e0: 6f 75 72 20 66 69 76 65 7d 0a 20 20 20 20 7b 6f  our five}.    {o
15f0: 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75  ne two three fou
1600: 72 20 66 69 76 65 7d 0a 20 20 7d 0a 0a 20 20 31  r five}.  }..  1
1610: 32 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  2 {SELECT a FROM
1620: 20 66 74 20 57 48 45 52 45 20 61 20 4d 41 54 43   ft WHERE a MATC
1630: 48 20 27 22 74 77 6f 20 74 68 72 65 65 22 20 66  H '"two three" f
1640: 69 76 65 27 7d 20 7b 0a 20 20 20 20 7b 74 77 6f  ive'} {.    {two
1650: 20 74 68 72 65 65 20 66 69 76 65 7d 20 20 20 20   three five}    
1660: 20 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68       {one two th
1670: 72 65 65 20 66 69 76 65 7d 0a 20 20 20 20 7b 74  ree five}.    {t
1680: 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66 69  wo three four fi
1690: 76 65 7d 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20  ve}    {one two 
16a0: 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65 7d  three four five}
16b0: 0a 20 20 7d 0a 0a 20 20 31 33 20 7b 53 45 4c 45  .  }..  13 {SELE
16c0: 43 54 20 61 20 46 52 4f 4d 20 66 74 20 57 48 45  CT a FROM ft WHE
16d0: 52 45 20 66 74 20 4d 41 54 43 48 20 27 22 73 6f  RE ft MATCH '"so
16e0: 6e 67 20 73 61 68 6d 22 20 68 61 68 27 7d 20 7b  ng sahm" hah'} {
16f0: 0a 20 20 20 20 7b 74 77 6f 20 74 68 72 65 65 20  .    {two three 
1700: 66 69 76 65 7d 20 20 20 20 20 20 20 20 20 7b 6f  five}         {o
1710: 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66 69 76  ne two three fiv
1720: 65 7d 0a 20 20 20 20 7b 74 77 6f 20 74 68 72 65  e}.    {two thre
1730: 65 20 66 6f 75 72 20 66 69 76 65 7d 20 20 20 20  e four five}    
1740: 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66  {one two three f
1750: 6f 75 72 20 66 69 76 65 7d 0a 20 20 7d 0a 0a 20  our five}.  }.. 
1760: 20 31 34 20 7b 53 45 4c 45 43 54 20 61 20 46 52   14 {SELECT a FR
1770: 4f 4d 20 66 74 20 57 48 45 52 45 20 62 20 4d 41  OM ft WHERE b MA
1780: 54 43 48 20 27 6e 65 75 6e 67 27 7d 20 7b 0a 20  TCH 'neung'} {. 
1790: 20 20 20 7b 6f 6e 65 7d 20 20 20 20 20 20 20 20     {one}        
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f 6e 65              {one
17b0: 20 74 77 6f 7d 20 0a 20 20 20 20 7b 6f 6e 65 20   two} .    {one 
17c0: 74 68 72 65 65 7d 20 20 20 20 20 20 20 20 20 20  three}          
17d0: 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72      {one two thr
17e0: 65 65 7d 0a 20 20 20 20 7b 6f 6e 65 20 66 6f 75  ee}.    {one fou
17f0: 72 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r}              
1800: 20 7b 6f 6e 65 20 74 77 6f 20 66 6f 75 72 7d 20   {one two four} 
1810: 0a 20 20 20 20 7b 6f 6e 65 20 74 68 72 65 65 20  .    {one three 
1820: 66 6f 75 72 7d 20 20 20 20 20 20 20 20 20 7b 6f  four}         {o
1830: 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75  ne two three fou
1840: 72 7d 0a 20 20 20 20 7b 6f 6e 65 20 66 69 76 65  r}.    {one five
1850: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
1860: 7b 6f 6e 65 20 74 77 6f 20 66 69 76 65 7d 20 0a  {one two five} .
1870: 20 20 20 20 7b 6f 6e 65 20 74 68 72 65 65 20 66      {one three f
1880: 69 76 65 7d 20 20 20 20 20 20 20 20 20 7b 6f 6e  ive}         {on
1890: 65 20 74 77 6f 20 74 68 72 65 65 20 66 69 76 65  e two three five
18a0: 7d 0a 20 20 20 20 7b 6f 6e 65 20 66 6f 75 72 20  }.    {one four 
18b0: 66 69 76 65 7d 20 20 20 20 20 20 20 20 20 20 7b  five}          {
18c0: 6f 6e 65 20 74 77 6f 20 66 6f 75 72 20 66 69 76  one two four fiv
18d0: 65 7d 20 0a 20 20 20 20 7b 6f 6e 65 20 74 68 72  e} .    {one thr
18e0: 65 65 20 66 6f 75 72 20 66 69 76 65 7d 20 20 20  ee four five}   
18f0: 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20   {one two three 
1900: 66 6f 75 72 20 66 69 76 65 7d 0a 20 20 7d 0a 0a  four five}.  }..
1910: 20 20 31 35 20 7b 53 45 4c 45 43 54 20 61 20 46    15 {SELECT a F
1920: 52 4f 4d 20 66 74 20 57 48 45 52 45 20 62 20 4d  ROM ft WHERE b M
1930: 41 54 43 48 20 27 22 6e 65 75 6e 67 20 73 6f 6e  ATCH '"neung son
1940: 67 20 73 61 68 6d 22 27 7d 20 7b 0a 20 20 20 20  g sahm"'} {.    
1950: 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 7d 20  {one two three} 
1960: 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74 77           {one tw
1970: 6f 20 74 68 72 65 65 20 66 6f 75 72 7d 20 20 0a  o three four}  .
1980: 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72      {one two thr
1990: 65 65 20 66 69 76 65 7d 20 20 20 20 20 7b 6f 6e  ee five}     {on
19a0: 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72  e two three four
19b0: 20 66 69 76 65 7d 0a 20 20 7d 0a 0a 20 20 31 36   five}.  }..  16
19c0: 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20   {SELECT a FROM 
19d0: 66 74 20 57 48 45 52 45 20 62 20 4d 41 54 43 48  ft WHERE b MATCH
19e0: 20 27 68 61 68 20 22 73 6f 6e 67 20 73 61 68 6d   'hah "song sahm
19f0: 22 27 7d 20 7b 0a 20 20 20 20 7b 74 77 6f 20 74  "'} {.    {two t
1a00: 68 72 65 65 20 66 69 76 65 7d 20 20 20 20 20 20  hree five}      
1a10: 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65     {one two thre
1a20: 65 20 66 69 76 65 7d 0a 20 20 20 20 7b 74 77 6f  e five}.    {two
1a30: 20 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65   three four five
1a40: 7d 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68  }    {one two th
1a50: 72 65 65 20 66 6f 75 72 20 66 69 76 65 7d 0a 20  ree four five}. 
1a60: 20 7d 0a 0a 20 20 31 37 20 7b 53 45 4c 45 43 54   }..  17 {SELECT
1a70: 20 61 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45   a FROM ft WHERE
1a80: 20 62 20 4d 41 54 43 48 20 27 73 6f 6e 67 20 4f   b MATCH 'song O
1a90: 52 20 73 61 68 6d 27 7d 20 7b 0a 20 20 20 20 7b  R sahm'} {.    {
1aa0: 74 77 6f 7d 20 20 20 20 20 20 20 20 20 20 20 20  two}            
1ab0: 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74 77           {one tw
1ac0: 6f 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  o}             {
1ad0: 74 68 72 65 65 7d 0a 20 20 20 20 7b 6f 6e 65 20  three}.    {one 
1ae0: 74 68 72 65 65 7d 20 20 20 20 20 20 20 20 20 20  three}          
1af0: 20 20 20 20 20 7b 74 77 6f 20 74 68 72 65 65 7d       {two three}
1b00: 20 20 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20             {one 
1b10: 74 77 6f 20 74 68 72 65 65 7d 0a 20 20 20 20 7b  two three}.    {
1b20: 74 77 6f 20 66 6f 75 72 7d 20 20 20 20 20 20 20  two four}       
1b30: 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74 77           {one tw
1b40: 6f 20 66 6f 75 72 7d 20 20 20 20 20 20 20 20 7b  o four}        {
1b50: 74 68 72 65 65 20 66 6f 75 72 7d 20 20 20 0a 20  three four}   . 
1b60: 20 20 20 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f     {one three fo
1b70: 75 72 7d 20 20 20 20 20 20 20 20 20 20 7b 74 77  ur}          {tw
1b80: 6f 20 74 68 72 65 65 20 66 6f 75 72 7d 20 20 20  o three four}   
1b90: 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65     {one two thre
1ba0: 65 20 66 6f 75 72 7d 20 20 0a 20 20 20 20 7b 74  e four}  .    {t
1bb0: 77 6f 20 66 69 76 65 7d 20 20 20 20 20 20 20 20  wo five}        
1bc0: 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74 77 6f          {one two
1bd0: 20 66 69 76 65 7d 20 20 20 20 20 20 20 20 7b 74   five}        {t
1be0: 68 72 65 65 20 66 69 76 65 7d 0a 20 20 20 20 7b  hree five}.    {
1bf0: 6f 6e 65 20 74 68 72 65 65 20 66 69 76 65 7d 20  one three five} 
1c00: 20 20 20 20 20 20 20 20 20 7b 74 77 6f 20 74 68           {two th
1c10: 72 65 65 20 66 69 76 65 7d 20 20 20 20 20 20 7b  ree five}      {
1c20: 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66 69  one two three fi
1c30: 76 65 7d 0a 20 20 20 20 7b 74 77 6f 20 66 6f 75  ve}.    {two fou
1c40: 72 20 66 69 76 65 7d 20 20 20 20 20 20 20 20 20  r five}         
1c50: 20 20 7b 6f 6e 65 20 74 77 6f 20 66 6f 75 72 20    {one two four 
1c60: 66 69 76 65 7d 20 20 20 7b 74 68 72 65 65 20 66  five}   {three f
1c70: 6f 75 72 20 66 69 76 65 7d 0a 20 20 20 20 7b 6f  our five}.    {o
1c80: 6e 65 20 74 68 72 65 65 20 66 6f 75 72 20 66 69  ne three four fi
1c90: 76 65 7d 20 20 20 20 20 7b 74 77 6f 20 74 68 72  ve}     {two thr
1ca0: 65 65 20 66 6f 75 72 20 66 69 76 65 7d 20 7b 6f  ee four five} {o
1cb0: 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75  ne two three fou
1cc0: 72 20 66 69 76 65 7d 0a 20 20 7d 0a 0a 20 20 31  r five}.  }..  1
1cd0: 38 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  8 {SELECT a FROM
1ce0: 20 66 74 20 57 48 45 52 45 20 61 20 4d 41 54 43   ft WHERE a MATC
1cf0: 48 20 27 74 68 72 65 65 20 4e 4f 54 20 74 77 6f  H 'three NOT two
1d00: 27 7d 20 7b 0a 20 20 20 20 7b 74 68 72 65 65 7d  '} {.    {three}
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d20: 20 20 20 7b 6f 6e 65 20 74 68 72 65 65 7d 20 20     {one three}  
1d30: 20 20 20 20 20 20 20 20 20 7b 74 68 72 65 65 20           {three 
1d40: 66 6f 75 72 7d 20 20 20 0a 20 20 20 20 7b 6f 6e  four}   .    {on
1d50: 65 20 74 68 72 65 65 20 66 6f 75 72 7d 20 20 20  e three four}   
1d60: 20 20 20 20 20 20 20 7b 74 68 72 65 65 20 66 69         {three fi
1d70: 76 65 7d 20 20 20 20 20 20 20 20 20 20 7b 6f 6e  ve}          {on
1d80: 65 20 74 68 72 65 65 20 66 69 76 65 7d 0a 20 20  e three five}.  
1d90: 20 20 7b 74 68 72 65 65 20 66 6f 75 72 20 66 69    {three four fi
1da0: 76 65 7d 20 20 20 20 20 20 20 20 20 7b 6f 6e 65  ve}         {one
1db0: 20 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65   three four five
1dc0: 7d 0a 20 20 7d 0a 0a 20 20 31 39 20 7b 53 45 4c  }.  }..  19 {SEL
1dd0: 45 43 54 20 61 20 46 52 4f 4d 20 66 74 20 57 48  ECT a FROM ft WH
1de0: 45 52 45 20 62 20 4d 41 54 43 48 20 27 73 61 68  ERE b MATCH 'sah
1df0: 6d 20 4e 4f 54 20 73 6f 6e 67 27 7d 20 7b 0a 20  m NOT song'} {. 
1e00: 20 20 20 7b 74 68 72 65 65 7d 20 20 20 20 20 20     {three}      
1e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f 6e               {on
1e20: 65 20 74 68 72 65 65 7d 20 20 20 20 20 20 20 20  e three}        
1e30: 20 20 20 7b 74 68 72 65 65 20 66 6f 75 72 7d 20     {three four} 
1e40: 20 20 0a 20 20 20 20 7b 6f 6e 65 20 74 68 72 65    .    {one thre
1e50: 65 20 66 6f 75 72 7d 20 20 20 20 20 20 20 20 20  e four}         
1e60: 20 7b 74 68 72 65 65 20 66 69 76 65 7d 20 20 20   {three five}   
1e70: 20 20 20 20 20 20 20 7b 6f 6e 65 20 74 68 72 65         {one thre
1e80: 65 20 66 69 76 65 7d 0a 20 20 20 20 7b 74 68 72  e five}.    {thr
1e90: 65 65 20 66 6f 75 72 20 66 69 76 65 7d 20 20 20  ee four five}   
1ea0: 20 20 20 20 20 20 7b 6f 6e 65 20 74 68 72 65 65        {one three
1eb0: 20 66 6f 75 72 20 66 69 76 65 7d 0a 20 20 7d 0a   four five}.  }.
1ec0: 0a 20 20 32 30 20 7b 53 45 4c 45 43 54 20 61 20  .  20 {SELECT a 
1ed0: 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20 66 74  FROM ft WHERE ft
1ee0: 20 4d 41 54 43 48 20 27 73 61 68 6d 20 4e 4f 54   MATCH 'sahm NOT
1ef0: 20 73 6f 6e 67 27 7d 20 7b 0a 20 20 20 20 7b 74   song'} {.    {t
1f00: 68 72 65 65 7d 20 20 20 20 20 20 20 20 20 20 20  hree}           
1f10: 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74 68 72          {one thr
1f20: 65 65 7d 20 20 20 20 20 20 20 20 20 20 20 7b 74  ee}           {t
1f30: 68 72 65 65 20 66 6f 75 72 7d 20 20 20 0a 20 20  hree four}   .  
1f40: 20 20 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f 75    {one three fou
1f50: 72 7d 20 20 20 20 20 20 20 20 20 20 7b 74 68 72  r}          {thr
1f60: 65 65 20 66 69 76 65 7d 20 20 20 20 20 20 20 20  ee five}        
1f70: 20 20 7b 6f 6e 65 20 74 68 72 65 65 20 66 69 76    {one three fiv
1f80: 65 7d 0a 20 20 20 20 7b 74 68 72 65 65 20 66 6f  e}.    {three fo
1f90: 75 72 20 66 69 76 65 7d 20 20 20 20 20 20 20 20  ur five}        
1fa0: 20 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f 75 72   {one three four
1fb0: 20 66 69 76 65 7d 0a 20 20 7d 0a 0a 20 20 32 31   five}.  }..  21
1fc0: 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20   {SELECT a FROM 
1fd0: 66 74 20 57 48 45 52 45 20 62 20 4d 41 54 43 48  ft WHERE b MATCH
1fe0: 20 27 6e 65 75 6e 67 20 4e 45 41 52 20 73 6f 6e   'neung NEAR son
1ff0: 67 20 4e 45 41 52 20 73 61 68 6d 27 7d 20 7b 0a  g NEAR sahm'} {.
2000: 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72      {one two thr
2010: 65 65 7d 20 20 20 20 20 20 20 20 20 20 20 7b 6f  ee}           {o
2020: 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75  ne two three fou
2030: 72 7d 20 20 0a 20 20 20 20 7b 6f 6e 65 20 74 77  r}  .    {one tw
2040: 6f 20 74 68 72 65 65 20 66 69 76 65 7d 20 20 20  o three five}   
2050: 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65     {one two thre
2060: 65 20 66 6f 75 72 20 66 69 76 65 7d 0a 20 20 7d  e four five}.  }
2070: 0a 0a 7d 20 7b 0a 20 20 73 65 74 20 72 65 73 75  ..} {.  set resu
2080: 6c 74 20 5b 6e 6f 72 6d 61 6c 5f 6c 69 73 74 20  lt [normal_list 
2090: 24 72 65 73 75 6c 74 5d 0a 20 20 64 6f 5f 73 65  $result].  do_se
20a0: 6c 65 63 74 5f 74 65 73 74 20 66 74 73 33 5f 6d  lect_test fts3_m
20b0: 61 6c 6c 6f 63 2d 32 2e 24 74 6e 20 24 73 71 6c  alloc-2.$tn $sql
20c0: 20 24 72 65 73 75 6c 74 0a 7d 0a 0a 64 6f 5f 74   $result.}..do_t
20d0: 65 73 74 20 66 74 73 33 5f 6d 61 6c 6c 6f 63 2d  est fts3_malloc-
20e0: 33 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.0 {.  execsql 
20f0: 42 45 47 49 4e 0a 20 20 66 6f 72 20 7b 73 65 74  BEGIN.  for {set
2100: 20 69 69 20 33 32 7d 20 7b 24 69 69 20 3c 20 31   ii 32} {$ii < 1
2110: 30 32 34 7d 20 7b 69 6e 63 72 20 69 69 7d 20 7b  024} {incr ii} {
2120: 0a 20 20 20 20 73 65 74 20 61 20 5b 6c 69 73 74  .    set a [list
2130: 5d 0a 20 20 20 20 73 65 74 20 62 20 5b 6c 69 73  ].    set b [lis
2140: 74 5d 0a 20 20 20 20 69 66 20 7b 24 69 69 20 26  t].    if {$ii &
2150: 20 30 78 30 30 30 31 7d 20 7b 6c 61 70 70 65 6e   0x0001} {lappen
2160: 64 20 61 20 6f 6e 65 20 20 20 3b 20 6c 61 70 70  d a one   ; lapp
2170: 65 6e 64 20 62 20 6e 65 75 6e 67 20 7d 0a 20 20  end b neung }.  
2180: 20 20 69 66 20 7b 24 69 69 20 26 20 30 78 30 30    if {$ii & 0x00
2190: 30 32 7d 20 7b 6c 61 70 70 65 6e 64 20 61 20 74  02} {lappend a t
21a0: 77 6f 20 20 20 3b 20 6c 61 70 70 65 6e 64 20 62  wo   ; lappend b
21b0: 20 73 6f 6e 67 20 20 7d 0a 20 20 20 20 69 66 20   song  }.    if 
21c0: 7b 24 69 69 20 26 20 30 78 30 30 30 34 7d 20 7b  {$ii & 0x0004} {
21d0: 6c 61 70 70 65 6e 64 20 61 20 74 68 72 65 65 20  lappend a three 
21e0: 3b 20 6c 61 70 70 65 6e 64 20 62 20 73 61 68 6d  ; lappend b sahm
21f0: 20 20 7d 0a 20 20 20 20 69 66 20 7b 24 69 69 20    }.    if {$ii 
2200: 26 20 30 78 30 30 30 38 7d 20 7b 6c 61 70 70 65  & 0x0008} {lappe
2210: 6e 64 20 61 20 66 6f 75 72 20 20 3b 20 6c 61 70  nd a four  ; lap
2220: 70 65 6e 64 20 62 20 73 65 65 20 20 20 7d 0a 20  pend b see   }. 
2230: 20 20 20 69 66 20 7b 24 69 69 20 26 20 30 78 30     if {$ii & 0x0
2240: 30 31 30 7d 20 7b 6c 61 70 70 65 6e 64 20 61 20  010} {lappend a 
2250: 66 69 76 65 20 20 3b 20 6c 61 70 70 65 6e 64 20  five  ; lappend 
2260: 62 20 68 61 68 20 20 20 7d 0a 20 20 20 20 69 66  b hah   }.    if
2270: 20 7b 24 69 69 20 26 20 30 78 30 30 32 30 7d 20   {$ii & 0x0020} 
2280: 7b 6c 61 70 70 65 6e 64 20 61 20 73 69 78 20 20  {lappend a six  
2290: 20 3b 20 6c 61 70 70 65 6e 64 20 62 20 68 6f 6b   ; lappend b hok
22a0: 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 24 69 69     }.    if {$ii
22b0: 20 26 20 30 78 30 30 34 30 7d 20 7b 6c 61 70 70   & 0x0040} {lapp
22c0: 65 6e 64 20 61 20 73 65 76 65 6e 20 3b 20 6c 61  end a seven ; la
22d0: 70 70 65 6e 64 20 62 20 6a 65 74 20 20 20 7d 0a  ppend b jet   }.
22e0: 20 20 20 20 69 66 20 7b 24 69 69 20 26 20 30 78      if {$ii & 0x
22f0: 30 30 38 30 7d 20 7b 6c 61 70 70 65 6e 64 20 61  0080} {lappend a
2300: 20 65 69 67 68 74 20 3b 20 6c 61 70 70 65 6e 64   eight ; lappend
2310: 20 62 20 62 61 69 72 74 20 7d 0a 20 20 20 20 69   b bairt }.    i
2320: 66 20 7b 24 69 69 20 26 20 30 78 30 31 30 30 7d  f {$ii & 0x0100}
2330: 20 7b 6c 61 70 70 65 6e 64 20 61 20 6e 69 6e 65   {lappend a nine
2340: 20 20 3b 20 6c 61 70 70 65 6e 64 20 62 20 67 6f    ; lappend b go
2350: 77 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 24 69  w   }.    if {$i
2360: 69 20 26 20 30 78 30 32 30 30 7d 20 7b 6c 61 70  i & 0x0200} {lap
2370: 70 65 6e 64 20 61 20 74 65 6e 20 20 20 3b 20 6c  pend a ten   ; l
2380: 61 70 70 65 6e 64 20 62 20 73 69 70 20 20 20 7d  append b sip   }
2390: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 49  .    execsql { I
23a0: 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 20 56 41  NSERT INTO ft VA
23b0: 4c 55 45 53 28 24 61 2c 20 24 62 29 20 7d 0a 20  LUES($a, $b) }. 
23c0: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 43 4f 4d   }.  execsql COM
23d0: 4d 49 54 0a 7d 20 7b 7d 0a 66 6f 72 65 61 63 68  MIT.} {}.foreach
23e0: 20 7b 74 6e 20 73 71 6c 20 72 65 73 75 6c 74 7d   {tn sql result}
23f0: 20 7b 0a 20 20 31 20 22 53 45 4c 45 43 54 20 63   {.  1 "SELECT c
2400: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 66 74 22  ount(*) FROM ft"
2410: 20 7b 31 30 32 33 7d 0a 0a 20 20 32 20 22 53 45   {1023}..  2 "SE
2420: 4c 45 43 54 20 61 20 46 52 4f 4d 20 66 74 20 57  LECT a FROM ft W
2430: 48 45 52 45 20 61 20 4d 41 54 43 48 20 27 6f 6e  HERE a MATCH 'on
2440: 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72  e two three four
2450: 20 66 69 76 65 20 73 69 78 20 73 65 76 65 6e 20   five six seven 
2460: 65 69 67 68 74 27 22 20 7b 0a 20 20 20 20 20 7b  eight'" {.     {
2470: 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f  one two three fo
2480: 75 72 20 66 69 76 65 20 73 69 78 20 73 65 76 65  ur five six seve
2490: 6e 20 65 69 67 68 74 7d 0a 20 20 20 20 20 7b 6f  n eight}.     {o
24a0: 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75  ne two three fou
24b0: 72 20 66 69 76 65 20 73 69 78 20 73 65 76 65 6e  r five six seven
24c0: 20 65 69 67 68 74 20 6e 69 6e 65 7d 0a 20 20 20   eight nine}.   
24d0: 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65    {one two three
24e0: 20 66 6f 75 72 20 66 69 76 65 20 73 69 78 20 73   four five six s
24f0: 65 76 65 6e 20 65 69 67 68 74 20 74 65 6e 7d 0a  even eight ten}.
2500: 20 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68       {one two th
2510: 72 65 65 20 66 6f 75 72 20 66 69 76 65 20 73 69  ree four five si
2520: 78 20 73 65 76 65 6e 20 65 69 67 68 74 20 6e 69  x seven eight ni
2530: 6e 65 20 74 65 6e 7d 0a 20 20 7d 0a 0a 20 20 33  ne ten}.  }..  3
2540: 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   {SELECT count(*
2550: 29 2c 20 73 75 6d 28 64 6f 63 69 64 29 20 46 52  ), sum(docid) FR
2560: 4f 4d 20 66 74 20 57 48 45 52 45 20 61 20 4d 41  OM ft WHERE a MA
2570: 54 43 48 20 27 6f 2a 27 7d 20 7b 0a 20 20 20 20  TCH 'o*'} {.    
2580: 35 31 32 20 32 36 32 31 34 34 0a 20 20 7d 0a 0a  512 262144.  }..
2590: 20 20 34 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e    4 {SELECT coun
25a0: 74 28 2a 29 2c 20 73 75 6d 28 64 6f 63 69 64 29  t(*), sum(docid)
25b0: 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20 61   FROM ft WHERE a
25c0: 20 4d 41 54 43 48 20 27 22 74 77 6f 20 74 68 72   MATCH '"two thr
25d0: 65 65 20 66 6f 75 72 22 27 7d 20 7b 0a 20 20 20  ee four"'} {.   
25e0: 20 31 32 38 20 36 36 33 36 38 0a 20 20 7d 0a 7d   128 66368.  }.}
25f0: 20 7b 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20   {.  set result 
2600: 5b 6e 6f 72 6d 61 6c 5f 6c 69 73 74 20 24 72 65  [normal_list $re
2610: 73 75 6c 74 5d 0a 20 20 64 6f 5f 73 65 6c 65 63  sult].  do_selec
2620: 74 5f 74 65 73 74 20 66 74 73 33 5f 6d 61 6c 6c  t_test fts3_mall
2630: 6f 63 2d 33 2e 24 74 6e 20 24 73 71 6c 20 24 72  oc-3.$tn $sql $r
2640: 65 73 75 6c 74 0a 7d 0a 0a 64 6f 5f 74 65 73 74  esult.}..do_test
2650: 20 66 74 73 33 5f 6d 61 6c 6c 6f 63 2d 34 2e 30   fts3_malloc-4.0
2660: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44   {.  execsql { D
2670: 45 4c 45 54 45 20 46 52 4f 4d 20 66 74 20 57 48  ELETE FROM ft WH
2680: 45 52 45 20 64 6f 63 69 64 3e 3d 33 32 20 7d 0a  ERE docid>=32 }.
2690: 7d 20 7b 7d 0a 66 6f 72 65 61 63 68 20 7b 74 6e  } {}.foreach {tn
26a0: 20 73 71 6c 7d 20 7b 0a 20 20 31 20 22 44 45 4c   sql} {.  1 "DEL
26b0: 45 54 45 20 46 52 4f 4d 20 66 74 20 57 48 45 52  ETE FROM ft WHER
26c0: 45 20 66 74 20 4d 41 54 43 48 20 27 6f 6e 65 27  E ft MATCH 'one'
26d0: 22 0a 20 20 32 20 22 44 45 4c 45 54 45 20 46 52  ".  2 "DELETE FR
26e0: 4f 4d 20 66 74 20 57 48 45 52 45 20 66 74 20 4d  OM ft WHERE ft M
26f0: 41 54 43 48 20 27 74 68 72 65 65 27 22 0a 20 20  ATCH 'three'".  
2700: 33 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 66  3 "DELETE FROM f
2710: 74 20 57 48 45 52 45 20 66 74 20 4d 41 54 43 48  t WHERE ft MATCH
2720: 20 27 66 69 76 65 27 22 0a 7d 20 7b 0a 20 20 64   'five'".} {.  d
2730: 6f 5f 77 72 69 74 65 5f 74 65 73 74 20 66 74 73  o_write_test fts
2740: 33 5f 6d 61 6c 6c 6f 63 2d 34 2e 31 2e 24 74 6e  3_malloc-4.1.$tn
2750: 20 66 74 5f 63 6f 6e 74 65 6e 74 20 24 73 71 6c   ft_content $sql
2760: 0a 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 5f  .}.do_test fts3_
2770: 6d 61 6c 6c 6f 63 2d 34 2e 32 20 7b 0a 20 20 65  malloc-4.2 {.  e
2780: 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  xecsql { SELECT 
2790: 61 20 46 52 4f 4d 20 66 74 20 7d 0a 7d 20 7b 74  a FROM ft }.} {t
27a0: 77 6f 20 66 6f 75 72 20 7b 74 77 6f 20 66 6f 75  wo four {two fou
27b0: 72 7d 7d 0a 0a 64 6f 5f 77 72 69 74 65 5f 74 65  r}}..do_write_te
27c0: 73 74 20 66 74 73 33 5f 6d 61 6c 6c 6f 63 2d 35  st fts3_malloc-5
27d0: 2e 31 20 66 74 5f 63 6f 6e 74 65 6e 74 20 7b 0a  .1 ft_content {.
27e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74    INSERT INTO ft
27f0: 20 56 41 4c 55 45 53 28 27 73 68 6f 72 74 20 61   VALUES('short a
2800: 6c 6f 6e 67 65 72 74 6f 6b 65 6e 20 72 65 61 6c  longertoken real
2810: 6c 79 71 75 69 74 65 61 6c 6f 74 6c 6f 6e 67 65  lyquitealotlonge
2820: 72 69 6d 65 61 6e 69 74 20 61 6e 64 74 68 69 73  rimeanit andthis
2830: 74 6f 6b 65 6e 69 73 6a 75 73 74 73 6f 6c 6f 6e  tokenisjustsolon
2840: 67 74 68 61 74 6f 6e 65 6d 69 67 68 74 62 65 66  gthatonemightbef
2850: 6f 72 67 69 76 65 6e 66 6f 72 69 6d 61 67 69 6e  orgivenforimagin
2860: 69 6e 67 74 68 61 74 69 74 77 61 73 6d 65 72 65  ingthatitwasmere
2870: 6c 79 61 63 6f 6e 74 72 69 76 65 64 65 78 61 6d  lyacontrivedexam
2880: 70 6c 65 61 6e 64 6e 6f 74 61 72 65 61 6c 74 6f  pleandnotarealto
2890: 6b 65 6e 27 2c 20 27 63 79 6e 69 63 73 21 27 29  ken', 'cynics!')
28a0: 0a 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 5f  .}.do_test fts3_
28b0: 6d 61 6c 6c 6f 63 2d 35 2e 32 20 7b 0a 20 20 65  malloc-5.2 {.  e
28c0: 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20  xecsql { CREATE 
28d0: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 66 74  VIRTUAL TABLE ft
28e0: 38 20 55 53 49 4e 47 20 66 74 73 33 28 78 2c 20  8 USING fts3(x, 
28f0: 74 6f 6b 65 6e 69 7a 65 20 70 6f 72 74 65 72 29  tokenize porter)
2900: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 77 72 69 74 65   }.} {}.do_write
2910: 5f 74 65 73 74 20 66 74 73 33 5f 6d 61 6c 6c 6f  _test fts3_mallo
2920: 63 2d 35 2e 33 20 66 74 5f 63 6f 6e 74 65 6e 74  c-5.3 ft_content
2930: 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   {.  INSERT INTO
2940: 20 66 74 38 20 56 41 4c 55 45 53 28 27 73 68 6f   ft8 VALUES('sho
2950: 72 74 20 61 6c 6f 6e 67 65 72 74 6f 6b 65 6e 20  rt alongertoken 
2960: 72 65 61 6c 6c 79 71 75 69 74 65 61 6c 6f 74 6c  reallyquitealotl
2970: 6f 6e 67 65 72 69 6d 65 61 6e 69 74 20 61 6e 64  ongerimeanit and
2980: 74 68 69 73 74 6f 6b 65 6e 69 73 6a 75 73 74 73  thistokenisjusts
2990: 6f 6c 6f 6e 67 74 68 61 74 6f 6e 65 6d 69 67 68  olongthatonemigh
29a0: 74 62 65 66 6f 72 67 69 76 65 6e 66 6f 72 69 6d  tbeforgivenforim
29b0: 61 67 69 6e 69 6e 67 74 68 61 74 69 74 77 61 73  aginingthatitwas
29c0: 6d 65 72 65 6c 79 61 63 6f 6e 74 72 69 76 65 64  merelyacontrived
29d0: 65 78 61 6d 70 6c 65 61 6e 64 6e 6f 74 61 72 65  exampleandnotare
29e0: 61 6c 74 6f 6b 65 6e 27 29 0a 7d 0a 0a 0a 66 69  altoken').}...fi
29f0: 6e 69 73 68 5f 74 65 73 74 0a 0a                 nish_test..