/ Hex Artifact Content
Login

Artifact b0e4c133b8d61d4f6d112d8110f8320e9e453ef6:


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: 64 6f 5f 77 72 69 74 65 5f 74 65 73 74 20 66 74  do_write_test ft
0550: 73 33 5f 6d 61 6c 6c 6f 63 2d 31 2e 31 20 73 71  s3_malloc-1.1 sq
0560: 6c 69 74 65 5f 6d 61 73 74 65 72 20 7b 0a 20 20  lite_master {.  
0570: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
0580: 41 42 4c 45 20 66 74 31 20 55 53 49 4e 47 20 66  ABLE ft1 USING f
0590: 74 73 33 28 61 2c 20 62 29 0a 7d 0a 64 6f 5f 77  ts3(a, b).}.do_w
05a0: 72 69 74 65 5f 74 65 73 74 20 66 74 73 33 5f 6d  rite_test fts3_m
05b0: 61 6c 6c 6f 63 2d 31 2e 32 20 73 71 6c 69 74 65  alloc-1.2 sqlite
05c0: 5f 6d 61 73 74 65 72 20 7b 0a 20 20 43 52 45 41  _master {.  CREA
05d0: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
05e0: 20 66 74 32 20 55 53 49 4e 47 20 66 74 73 33 28   ft2 USING fts3(
05f0: 5b 61 5d 2c 20 5b 62 5d 29 3b 0a 7d 0a 64 6f 5f  [a], [b]);.}.do_
0600: 77 72 69 74 65 5f 74 65 73 74 20 66 74 73 33 5f  write_test fts3_
0610: 6d 61 6c 6c 6f 63 2d 31 2e 33 20 73 71 6c 69 74  malloc-1.3 sqlit
0620: 65 5f 6d 61 73 74 65 72 20 7b 0a 20 20 43 52 45  e_master {.  CRE
0630: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
0640: 45 20 66 74 33 20 55 53 49 4e 47 20 66 74 73 33  E ft3 USING fts3
0650: 28 27 61 27 2c 20 22 62 22 29 3b 0a 7d 0a 64 6f  ('a', "b");.}.do
0660: 5f 77 72 69 74 65 5f 74 65 73 74 20 66 74 73 33  _write_test fts3
0670: 5f 6d 61 6c 6c 6f 63 2d 31 2e 34 20 73 71 6c 69  _malloc-1.4 sqli
0680: 74 65 5f 6d 61 73 74 65 72 20 7b 0a 20 20 43 52  te_master {.  CR
0690: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
06a0: 4c 45 20 66 74 34 20 55 53 49 4e 47 20 66 74 73  LE ft4 USING fts
06b0: 33 28 60 61 60 2c 20 27 66 72 65 64 27 27 73 20  3(`a`, 'fred''s 
06c0: 63 6f 6c 75 6d 6e 27 29 3b 0a 7d 0a 64 6f 5f 65  column');.}.do_e
06d0: 72 72 6f 72 5f 74 65 73 74 20 66 74 73 33 5f 6d  rror_test fts3_m
06e0: 61 6c 6c 6f 63 2d 31 2e 35 20 7b 0a 20 20 43 52  alloc-1.5 {.  CR
06f0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
0700: 4c 45 20 66 74 35 20 55 53 49 4e 47 20 66 74 73  LE ft5 USING fts
0710: 33 28 61 2c 20 62 2c 20 74 6f 6b 65 6e 69 7a 65  3(a, b, tokenize
0720: 20 75 6e 6b 6e 6f 77 6e 29 0a 7d 20 7b 75 6e 6b   unknown).} {unk
0730: 6e 6f 77 6e 20 74 6f 6b 65 6e 69 7a 65 72 3a 20  nown tokenizer: 
0740: 75 6e 6b 6e 6f 77 6e 7d 0a 64 6f 5f 77 72 69 74  unknown}.do_writ
0750: 65 5f 74 65 73 74 20 66 74 73 33 5f 6d 61 6c 6c  e_test fts3_mall
0760: 6f 63 2d 31 2e 36 20 73 71 6c 69 74 65 5f 6d 61  oc-1.6 sqlite_ma
0770: 73 74 65 72 20 7b 0a 20 20 43 52 45 41 54 45 20  ster {.  CREATE 
0780: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 66 74  VIRTUAL TABLE ft
0790: 36 20 55 53 49 4e 47 20 66 74 73 33 28 61 2c 20  6 USING fts3(a, 
07a0: 62 2c 20 74 6f 6b 65 6e 69 7a 65 20 70 6f 72 74  b, tokenize port
07b0: 65 72 29 0a 7d 0a 64 6f 5f 77 72 69 74 65 5f 74  er).}.do_write_t
07c0: 65 73 74 20 66 74 73 33 5f 6d 61 6c 6c 6f 63 2d  est fts3_malloc-
07d0: 31 2e 37 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  1.7 sqlite_maste
07e0: 72 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52  r {.  CREATE VIR
07f0: 54 55 41 4c 20 54 41 42 4c 45 20 66 74 37 20 55  TUAL TABLE ft7 U
0800: 53 49 4e 47 20 66 74 73 34 28 61 2c 20 62 2c 20  SING fts4(a, b, 
0810: 6e 6f 74 69 6e 64 65 78 65 64 3d 62 29 0a 7d 0a  notindexed=b).}.
0820: 0a 23 20 54 65 73 74 20 74 68 65 20 78 43 6f 6e  .# Test the xCon
0830: 6e 65 63 74 2f 78 44 69 73 63 6f 6e 6e 65 63 74  nect/xDisconnect
0840: 20 6d 65 74 68 6f 64 73 3a 0a 23 64 62 20 65 76   methods:.#db ev
0850: 61 6c 20 7b 20 41 54 54 41 43 48 20 27 74 65 73  al { ATTACH 'tes
0860: 74 32 2e 64 62 27 20 41 53 20 61 75 78 20 7d 0a  t2.db' AS aux }.
0870: 23 64 6f 5f 77 72 69 74 65 5f 74 65 73 74 20 66  #do_write_test f
0880: 74 73 33 5f 6d 61 6c 6c 6f 63 2d 31 2e 36 20 61  ts3_malloc-1.6 a
0890: 75 78 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ux.sqlite_master
08a0: 20 7b 0a 23 20 20 43 52 45 41 54 45 20 56 49 52   {.#  CREATE VIR
08b0: 54 55 41 4c 20 54 41 42 4c 45 20 61 75 78 2e 66  TUAL TABLE aux.f
08c0: 74 37 20 55 53 49 4e 47 20 66 74 73 33 28 61 2c  t7 USING fts3(a,
08d0: 20 62 2c 20 63 29 3b 0a 23 7d 0a 23 64 6f 5f 77   b, c);.#}.#do_w
08e0: 72 69 74 65 5f 74 65 73 74 20 66 74 73 33 5f 6d  rite_test fts3_m
08f0: 61 6c 6c 6f 63 2d 31 2e 36 20 61 75 78 2e 73 71  alloc-1.6 aux.sq
0900: 6c 69 74 65 5f 6d 61 73 74 65 72 20 7b 0a 23 20  lite_master {.# 
0910: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
0920: 54 41 42 4c 45 20 61 75 78 2e 66 74 37 20 55 53  TABLE aux.ft7 US
0930: 49 4e 47 20 66 74 73 33 28 61 2c 20 62 2c 20 63  ING fts3(a, b, c
0940: 29 3b 0a 23 7d 0a 0a 0a 0a 64 6f 5f 74 65 73 74  );.#}....do_test
0950: 20 66 74 73 33 5f 6d 61 6c 6c 6f 63 2d 32 2e 30   fts3_malloc-2.0
0960: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a   {.  execsql { .
0970: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 66      DROP TABLE f
0980: 74 31 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  t1;.    DROP TAB
0990: 4c 45 20 66 74 32 3b 0a 20 20 20 20 44 52 4f 50  LE ft2;.    DROP
09a0: 20 54 41 42 4c 45 20 66 74 33 3b 0a 20 20 20 20   TABLE ft3;.    
09b0: 44 52 4f 50 20 54 41 42 4c 45 20 66 74 34 3b 0a  DROP TABLE ft4;.
09c0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 66      DROP TABLE f
09d0: 74 36 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  t6;.    DROP TAB
09e0: 4c 45 20 66 74 37 3b 0a 20 20 7d 0a 20 20 65 78  LE ft7;.  }.  ex
09f0: 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 56  ecsql { CREATE V
0a00: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 66 74 20  IRTUAL TABLE ft 
0a10: 55 53 49 4e 47 20 66 74 73 33 28 61 2c 20 62 29  USING fts3(a, b)
0a20: 20 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 69   }.  for {set ii
0a30: 20 31 7d 20 7b 24 69 69 20 3c 20 33 32 7d 20 7b   1} {$ii < 32} {
0a40: 69 6e 63 72 20 69 69 7d 20 7b 0a 20 20 20 20 73  incr ii} {.    s
0a50: 65 74 20 61 20 5b 6c 69 73 74 5d 0a 20 20 20 20  et a [list].    
0a60: 73 65 74 20 62 20 5b 6c 69 73 74 5d 0a 20 20 20  set b [list].   
0a70: 20 69 66 20 7b 24 69 69 20 26 20 30 78 30 31 7d   if {$ii & 0x01}
0a80: 20 7b 6c 61 70 70 65 6e 64 20 61 20 6f 6e 65 20   {lappend a one 
0a90: 20 20 3b 20 6c 61 70 70 65 6e 64 20 62 20 6e 65    ; lappend b ne
0aa0: 75 6e 67 7d 0a 20 20 20 20 69 66 20 7b 24 69 69  ung}.    if {$ii
0ab0: 20 26 20 30 78 30 32 7d 20 7b 6c 61 70 70 65 6e   & 0x02} {lappen
0ac0: 64 20 61 20 74 77 6f 20 20 20 3b 20 6c 61 70 70  d a two   ; lapp
0ad0: 65 6e 64 20 62 20 73 6f 6e 67 20 7d 0a 20 20 20  end b song }.   
0ae0: 20 69 66 20 7b 24 69 69 20 26 20 30 78 30 34 7d   if {$ii & 0x04}
0af0: 20 7b 6c 61 70 70 65 6e 64 20 61 20 74 68 72 65   {lappend a thre
0b00: 65 20 3b 20 6c 61 70 70 65 6e 64 20 62 20 73 61  e ; lappend b sa
0b10: 68 6d 20 7d 0a 20 20 20 20 69 66 20 7b 24 69 69  hm }.    if {$ii
0b20: 20 26 20 30 78 30 38 7d 20 7b 6c 61 70 70 65 6e   & 0x08} {lappen
0b30: 64 20 61 20 66 6f 75 72 20 20 3b 20 6c 61 70 70  d a four  ; lapp
0b40: 65 6e 64 20 62 20 73 65 65 20 20 7d 0a 20 20 20  end b see  }.   
0b50: 20 69 66 20 7b 24 69 69 20 26 20 30 78 31 30 7d   if {$ii & 0x10}
0b60: 20 7b 6c 61 70 70 65 6e 64 20 61 20 66 69 76 65   {lappend a five
0b70: 20 20 3b 20 6c 61 70 70 65 6e 64 20 62 20 68 61    ; lappend b ha
0b80: 68 20 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c  h  }.    execsql
0b90: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66   { INSERT INTO f
0ba0: 74 20 56 41 4c 55 45 53 28 24 61 2c 20 24 62 29  t VALUES($a, $b)
0bb0: 20 7d 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 66 6f 72   }.  }.} {}..for
0bc0: 65 61 63 68 20 7b 74 6e 20 73 71 6c 20 72 65 73  each {tn sql res
0bd0: 75 6c 74 7d 20 7b 0a 20 20 31 20 22 53 45 4c 45  ult} {.  1 "SELE
0be0: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
0bf0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 20   sqlite_master" 
0c00: 7b 35 7d 0a 20 20 32 20 22 53 45 4c 45 43 54 20  {5}.  2 "SELECT 
0c10: 2a 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20  * FROM ft WHERE 
0c20: 64 6f 63 69 64 20 3d 20 31 22 20 20 20 7b 6f 6e  docid = 1"   {on
0c30: 65 20 6e 65 75 6e 67 7d 0a 20 20 33 20 22 53 45  e neung}.  3 "SE
0c40: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 66 74 20 57  LECT * FROM ft W
0c50: 48 45 52 45 20 64 6f 63 69 64 20 3d 20 32 22 20  HERE docid = 2" 
0c60: 20 20 7b 74 77 6f 20 73 6f 6e 67 7d 0a 20 20 34    {two song}.  4
0c70: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
0c80: 66 74 20 57 48 45 52 45 20 64 6f 63 69 64 20 3d  ft WHERE docid =
0c90: 20 33 22 20 20 20 7b 7b 6f 6e 65 20 74 77 6f 7d   3"   {{one two}
0ca0: 20 7b 6e 65 75 6e 67 20 73 6f 6e 67 7d 7d 0a 0a   {neung song}}..
0cb0: 20 20 35 20 22 53 45 4c 45 43 54 20 61 20 46 52    5 "SELECT a FR
0cc0: 4f 4d 20 66 74 22 20 7b 0a 20 20 20 20 7b 6f 6e  OM ft" {.    {on
0cd0: 65 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e}              
0ce0: 20 20 20 20 20 20 20 7b 74 77 6f 7d 20 20 20 20         {two}    
0cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f 6e               {on
0d00: 65 20 74 77 6f 7d 0a 20 20 20 20 7b 74 68 72 65  e two}.    {thre
0d10: 65 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e}              
0d20: 20 20 20 20 20 7b 6f 6e 65 20 74 68 72 65 65 7d       {one three}
0d30: 20 20 20 20 20 20 20 20 20 20 20 7b 74 77 6f 20             {two 
0d40: 74 68 72 65 65 7d 20 20 20 20 20 0a 20 20 20 20  three}     .    
0d50: 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 7d 20  {one two three} 
0d60: 20 20 20 20 20 20 20 20 20 20 7b 66 6f 75 72 7d            {four}
0d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d80: 7b 6f 6e 65 20 66 6f 75 72 7d 20 0a 20 20 20 20  {one four} .    
0d90: 7b 74 77 6f 20 66 6f 75 72 7d 20 20 20 20 20 20  {two four}      
0da0: 20 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74            {one t
0db0: 77 6f 20 66 6f 75 72 7d 20 20 20 20 20 20 20 20  wo four}        
0dc0: 7b 74 68 72 65 65 20 66 6f 75 72 7d 20 20 20 0a  {three four}   .
0dd0: 20 20 20 20 7b 6f 6e 65 20 74 68 72 65 65 20 66      {one three f
0de0: 6f 75 72 7d 20 20 20 20 20 20 20 20 20 20 7b 74  our}          {t
0df0: 77 6f 20 74 68 72 65 65 20 66 6f 75 72 7d 20 20  wo three four}  
0e00: 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72      {one two thr
0e10: 65 65 20 66 6f 75 72 7d 20 20 0a 20 20 20 20 7b  ee four}  .    {
0e20: 66 69 76 65 7d 20 20 20 20 20 20 20 20 20 20 20  five}           
0e30: 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 66 69           {one fi
0e40: 76 65 7d 20 20 20 20 20 20 20 20 20 20 20 20 7b  ve}            {
0e50: 74 77 6f 20 66 69 76 65 7d 20 20 20 20 20 20 20  two five}       
0e60: 20 20 20 20 20 0a 20 20 20 20 7b 6f 6e 65 20 74       .    {one t
0e70: 77 6f 20 66 69 76 65 7d 20 20 20 20 20 20 20 20  wo five}        
0e80: 20 20 20 20 7b 74 68 72 65 65 20 66 69 76 65 7d      {three five}
0e90: 20 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74            {one t
0ea0: 68 72 65 65 20 66 69 76 65 7d 20 0a 20 20 20 20  hree five} .    
0eb0: 7b 74 77 6f 20 74 68 72 65 65 20 66 69 76 65 7d  {two three five}
0ec0: 20 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74            {one t
0ed0: 77 6f 20 74 68 72 65 65 20 66 69 76 65 7d 20 20  wo three five}  
0ee0: 7b 66 6f 75 72 20 66 69 76 65 7d 0a 20 20 20 20  {four five}.    
0ef0: 7b 6f 6e 65 20 66 6f 75 72 20 66 69 76 65 7d 20  {one four five} 
0f00: 20 20 20 20 20 20 20 20 20 20 7b 74 77 6f 20 66            {two f
0f10: 6f 75 72 20 66 69 76 65 7d 20 20 20 20 20 20 20  our five}       
0f20: 7b 6f 6e 65 20 74 77 6f 20 66 6f 75 72 20 66 69  {one two four fi
0f30: 76 65 7d 0a 20 20 20 20 7b 74 68 72 65 65 20 66  ve}.    {three f
0f40: 6f 75 72 20 66 69 76 65 7d 20 20 20 20 20 20 20  our five}       
0f50: 20 20 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f 75    {one three fou
0f60: 72 20 66 69 76 65 7d 20 7b 74 77 6f 20 74 68 72  r five} {two thr
0f70: 65 65 20 66 6f 75 72 20 66 69 76 65 7d 0a 20 20  ee four five}.  
0f80: 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65    {one two three
0f90: 20 66 6f 75 72 20 66 69 76 65 7d 0a 20 20 7d 0a   four five}.  }.
0fa0: 0a 20 20 36 20 22 53 45 4c 45 43 54 20 61 20 46  .  6 "SELECT a F
0fb0: 52 4f 4d 20 66 74 20 57 48 45 52 45 20 61 20 4d  ROM ft WHERE a M
0fc0: 41 54 43 48 20 27 6f 6e 65 27 22 20 7b 0a 20 20  ATCH 'one'" {.  
0fd0: 20 20 7b 6f 6e 65 7d 20 7b 6f 6e 65 20 74 77 6f    {one} {one two
0fe0: 7d 20 7b 6f 6e 65 20 74 68 72 65 65 7d 20 7b 6f  } {one three} {o
0ff0: 6e 65 20 74 77 6f 20 74 68 72 65 65 7d 0a 20 20  ne two three}.  
1000: 20 20 7b 6f 6e 65 20 66 6f 75 72 7d 20 7b 6f 6e    {one four} {on
1010: 65 20 74 77 6f 20 66 6f 75 72 7d 20 7b 6f 6e 65  e two four} {one
1020: 20 74 68 72 65 65 20 66 6f 75 72 7d 20 7b 6f 6e   three four} {on
1030: 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72  e two three four
1040: 7d 0a 20 20 20 20 7b 6f 6e 65 20 66 69 76 65 7d  }.    {one five}
1050: 20 7b 6f 6e 65 20 74 77 6f 20 66 69 76 65 7d 20   {one two five} 
1060: 7b 6f 6e 65 20 74 68 72 65 65 20 66 69 76 65 7d  {one three five}
1070: 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20   {one two three 
1080: 66 69 76 65 7d 0a 20 20 20 20 7b 6f 6e 65 20 66  five}.    {one f
1090: 6f 75 72 20 66 69 76 65 7d 20 7b 6f 6e 65 20 74  our five} {one t
10a0: 77 6f 20 66 6f 75 72 20 66 69 76 65 7d 20 0a 20  wo four five} . 
10b0: 20 20 20 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f     {one three fo
10c0: 75 72 20 66 69 76 65 7d 20 7b 6f 6e 65 20 74 77  ur five} {one tw
10d0: 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66 69 76  o three four fiv
10e0: 65 7d 0a 20 20 7d 0a 0a 20 20 37 20 22 53 45 4c  e}.  }..  7 "SEL
10f0: 45 43 54 20 61 20 46 52 4f 4d 20 66 74 20 57 48  ECT a FROM ft WH
1100: 45 52 45 20 61 20 4d 41 54 43 48 20 27 6f 2a 27  ERE a MATCH 'o*'
1110: 22 20 7b 0a 20 20 20 20 7b 6f 6e 65 7d 20 7b 6f  " {.    {one} {o
1120: 6e 65 20 74 77 6f 7d 20 7b 6f 6e 65 20 74 68 72  ne two} {one thr
1130: 65 65 7d 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72  ee} {one two thr
1140: 65 65 7d 0a 20 20 20 20 7b 6f 6e 65 20 66 6f 75  ee}.    {one fou
1150: 72 7d 20 7b 6f 6e 65 20 74 77 6f 20 66 6f 75 72  r} {one two four
1160: 7d 20 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f 75  } {one three fou
1170: 72 7d 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65  r} {one two thre
1180: 65 20 66 6f 75 72 7d 0a 20 20 20 20 7b 6f 6e 65  e four}.    {one
1190: 20 66 69 76 65 7d 20 7b 6f 6e 65 20 74 77 6f 20   five} {one two 
11a0: 66 69 76 65 7d 20 7b 6f 6e 65 20 74 68 72 65 65  five} {one three
11b0: 20 66 69 76 65 7d 20 7b 6f 6e 65 20 74 77 6f 20   five} {one two 
11c0: 74 68 72 65 65 20 66 69 76 65 7d 0a 20 20 20 20  three five}.    
11d0: 7b 6f 6e 65 20 66 6f 75 72 20 66 69 76 65 7d 20  {one four five} 
11e0: 7b 6f 6e 65 20 74 77 6f 20 66 6f 75 72 20 66 69  {one two four fi
11f0: 76 65 7d 20 0a 20 20 20 20 7b 6f 6e 65 20 74 68  ve} .    {one th
1200: 72 65 65 20 66 6f 75 72 20 66 69 76 65 7d 20 7b  ree four five} {
1210: 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f  one two three fo
1220: 75 72 20 66 69 76 65 7d 0a 20 20 7d 0a 0a 20 20  ur five}.  }..  
1230: 38 20 22 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  8 "SELECT a FROM
1240: 20 66 74 20 57 48 45 52 45 20 61 20 4d 41 54 43   ft WHERE a MATC
1250: 48 20 27 6f 2a 20 74 2a 27 22 20 7b 0a 20 20 20  H 'o* t*'" {.   
1260: 20 7b 6f 6e 65 20 74 77 6f 7d 20 20 20 20 20 20   {one two}      
1270: 20 20 20 20 20 20 20 7b 6f 6e 65 20 74 68 72 65         {one thre
1280: 65 7d 20 20 20 20 20 20 20 20 20 20 20 7b 6f 6e  e}           {on
1290: 65 20 74 77 6f 20 74 68 72 65 65 7d 20 0a 20 20  e two three} .  
12a0: 20 20 7b 6f 6e 65 20 74 77 6f 20 66 6f 75 72 7d    {one two four}
12b0: 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74 68 72          {one thr
12c0: 65 65 20 66 6f 75 72 7d 20 20 20 20 20 20 7b 6f  ee four}      {o
12d0: 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75  ne two three fou
12e0: 72 7d 20 0a 20 20 20 20 7b 6f 6e 65 20 74 77 6f  r} .    {one two
12f0: 20 66 69 76 65 7d 20 20 20 20 20 20 20 20 7b 6f   five}        {o
1300: 6e 65 20 74 68 72 65 65 20 66 69 76 65 7d 20 20  ne three five}  
1310: 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72      {one two thr
1320: 65 65 20 66 69 76 65 7d 20 0a 20 20 20 20 7b 6f  ee five} .    {o
1330: 6e 65 20 74 77 6f 20 66 6f 75 72 20 66 69 76 65  ne two four five
1340: 7d 20 20 20 7b 6f 6e 65 20 74 68 72 65 65 20 66  }   {one three f
1350: 6f 75 72 20 66 69 76 65 7d 20 7b 6f 6e 65 20 74  our five} {one t
1360: 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66 69  wo three four fi
1370: 76 65 7d 0a 20 20 7d 0a 0a 20 20 39 20 22 53 45  ve}.  }..  9 "SE
1380: 4c 45 43 54 20 61 20 46 52 4f 4d 20 66 74 20 57  LECT a FROM ft W
1390: 48 45 52 45 20 61 20 4d 41 54 43 48 20 27 5c 22  HERE a MATCH '\"
13a0: 6f 2a 20 74 2a 5c 22 27 22 20 7b 0a 20 20 20 20  o* t*\"'" {.    
13b0: 7b 6f 6e 65 20 74 77 6f 7d 20 20 20 20 20 20 20  {one two}       
13c0: 20 20 20 20 20 20 7b 6f 6e 65 20 74 68 72 65 65        {one three
13d0: 7d 20 20 20 20 20 20 20 20 20 20 20 7b 6f 6e 65  }           {one
13e0: 20 74 77 6f 20 74 68 72 65 65 7d 20 0a 20 20 20   two three} .   
13f0: 20 7b 6f 6e 65 20 74 77 6f 20 66 6f 75 72 7d 20   {one two four} 
1400: 20 20 20 20 20 20 20 7b 6f 6e 65 20 74 68 72 65         {one thre
1410: 65 20 66 6f 75 72 7d 20 20 20 20 20 20 7b 6f 6e  e four}      {on
1420: 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72  e two three four
1430: 7d 20 0a 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20  } .    {one two 
1440: 66 69 76 65 7d 20 20 20 20 20 20 20 20 7b 6f 6e  five}        {on
1450: 65 20 74 68 72 65 65 20 66 69 76 65 7d 20 20 20  e three five}   
1460: 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65     {one two thre
1470: 65 20 66 69 76 65 7d 20 0a 20 20 20 20 7b 6f 6e  e five} .    {on
1480: 65 20 74 77 6f 20 66 6f 75 72 20 66 69 76 65 7d  e two four five}
1490: 20 20 20 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f     {one three fo
14a0: 75 72 20 66 69 76 65 7d 20 7b 6f 6e 65 20 74 77  ur five} {one tw
14b0: 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66 69 76  o three four fiv
14c0: 65 7d 0a 20 20 7d 0a 0a 20 20 31 30 20 7b 53 45  e}.  }..  10 {SE
14d0: 4c 45 43 54 20 61 20 46 52 4f 4d 20 66 74 20 57  LECT a FROM ft W
14e0: 48 45 52 45 20 61 20 4d 41 54 43 48 20 27 22 6f  HERE a MATCH '"o
14f0: 2a 20 66 2a 22 27 7d 20 7b 0a 20 20 20 20 7b 6f  * f*"'} {.    {o
1500: 6e 65 20 66 6f 75 72 7d 20 20 20 20 20 20 20 20  ne four}        
1510: 20 20 20 20 7b 6f 6e 65 20 66 69 76 65 7d 20 20      {one five}  
1520: 20 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 66            {one f
1530: 6f 75 72 20 66 69 76 65 7d 0a 20 20 7d 0a 0a 20  our five}.  }.. 
1540: 20 31 31 20 7b 53 45 4c 45 43 54 20 61 20 46 52   11 {SELECT a FR
1550: 4f 4d 20 66 74 20 57 48 45 52 45 20 61 20 4d 41  OM ft WHERE a MA
1560: 54 43 48 20 27 22 6f 6e 65 20 74 77 6f 20 74 68  TCH '"one two th
1570: 72 65 65 22 27 7d 20 7b 0a 20 20 20 20 7b 6f 6e  ree"'} {.    {on
1580: 65 20 74 77 6f 20 74 68 72 65 65 7d 0a 20 20 20  e two three}.   
1590: 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20   {one two three 
15a0: 66 6f 75 72 7d 20 20 0a 20 20 20 20 7b 6f 6e 65  four}  .    {one
15b0: 20 74 77 6f 20 74 68 72 65 65 20 66 69 76 65 7d   two three five}
15c0: 0a 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68  .    {one two th
15d0: 72 65 65 20 66 6f 75 72 20 66 69 76 65 7d 0a 20  ree four five}. 
15e0: 20 7d 0a 0a 20 20 31 32 20 7b 53 45 4c 45 43 54   }..  12 {SELECT
15f0: 20 61 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45   a FROM ft WHERE
1600: 20 61 20 4d 41 54 43 48 20 27 22 74 77 6f 20 74   a MATCH '"two t
1610: 68 72 65 65 20 66 6f 75 72 22 27 7d 20 7b 0a 20  hree four"'} {. 
1620: 20 20 20 7b 74 77 6f 20 74 68 72 65 65 20 66 6f     {two three fo
1630: 75 72 7d 0a 20 20 20 20 7b 6f 6e 65 20 74 77 6f  ur}.    {one two
1640: 20 74 68 72 65 65 20 66 6f 75 72 7d 0a 20 20 20   three four}.   
1650: 20 7b 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72   {two three four
1660: 20 66 69 76 65 7d 0a 20 20 20 20 7b 6f 6e 65 20   five}.    {one 
1670: 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66  two three four f
1680: 69 76 65 7d 0a 20 20 7d 0a 0a 20 20 31 32 20 7b  ive}.  }..  12 {
1690: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 66 74  SELECT a FROM ft
16a0: 20 57 48 45 52 45 20 61 20 4d 41 54 43 48 20 27   WHERE a MATCH '
16b0: 22 74 77 6f 20 74 68 72 65 65 22 20 66 69 76 65  "two three" five
16c0: 27 7d 20 7b 0a 20 20 20 20 7b 74 77 6f 20 74 68  '} {.    {two th
16d0: 72 65 65 20 66 69 76 65 7d 20 20 20 20 20 20 20  ree five}       
16e0: 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65    {one two three
16f0: 20 66 69 76 65 7d 0a 20 20 20 20 7b 74 77 6f 20   five}.    {two 
1700: 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65 7d  three four five}
1710: 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72      {one two thr
1720: 65 65 20 66 6f 75 72 20 66 69 76 65 7d 0a 20 20  ee four five}.  
1730: 7d 0a 0a 20 20 31 33 20 7b 53 45 4c 45 43 54 20  }..  13 {SELECT 
1740: 61 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20  a FROM ft WHERE 
1750: 66 74 20 4d 41 54 43 48 20 27 22 73 6f 6e 67 20  ft MATCH '"song 
1760: 73 61 68 6d 22 20 68 61 68 27 7d 20 7b 0a 20 20  sahm" hah'} {.  
1770: 20 20 7b 74 77 6f 20 74 68 72 65 65 20 66 69 76    {two three fiv
1780: 65 7d 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20  e}         {one 
1790: 74 77 6f 20 74 68 72 65 65 20 66 69 76 65 7d 0a  two three five}.
17a0: 20 20 20 20 7b 74 77 6f 20 74 68 72 65 65 20 66      {two three f
17b0: 6f 75 72 20 66 69 76 65 7d 20 20 20 20 7b 6f 6e  our five}    {on
17c0: 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72  e two three four
17d0: 20 66 69 76 65 7d 0a 20 20 7d 0a 0a 20 20 31 34   five}.  }..  14
17e0: 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20   {SELECT a FROM 
17f0: 66 74 20 57 48 45 52 45 20 62 20 4d 41 54 43 48  ft WHERE b MATCH
1800: 20 27 6e 65 75 6e 67 27 7d 20 7b 0a 20 20 20 20   'neung'} {.    
1810: 7b 6f 6e 65 7d 20 20 20 20 20 20 20 20 20 20 20  {one}           
1820: 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74 77           {one tw
1830: 6f 7d 20 0a 20 20 20 20 7b 6f 6e 65 20 74 68 72  o} .    {one thr
1840: 65 65 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ee}             
1850: 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 7d   {one two three}
1860: 0a 20 20 20 20 7b 6f 6e 65 20 66 6f 75 72 7d 20  .    {one four} 
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f                {o
1880: 6e 65 20 74 77 6f 20 66 6f 75 72 7d 20 0a 20 20  ne two four} .  
1890: 20 20 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f 75    {one three fou
18a0: 72 7d 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20  r}         {one 
18b0: 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72 7d 0a  two three four}.
18c0: 20 20 20 20 7b 6f 6e 65 20 66 69 76 65 7d 20 20      {one five}  
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f 6e               {on
18e0: 65 20 74 77 6f 20 66 69 76 65 7d 20 0a 20 20 20  e two five} .   
18f0: 20 7b 6f 6e 65 20 74 68 72 65 65 20 66 69 76 65   {one three five
1900: 7d 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74  }         {one t
1910: 77 6f 20 74 68 72 65 65 20 66 69 76 65 7d 0a 20  wo three five}. 
1920: 20 20 20 7b 6f 6e 65 20 66 6f 75 72 20 66 69 76     {one four fiv
1930: 65 7d 20 20 20 20 20 20 20 20 20 20 7b 6f 6e 65  e}          {one
1940: 20 74 77 6f 20 66 6f 75 72 20 66 69 76 65 7d 20   two four five} 
1950: 0a 20 20 20 20 7b 6f 6e 65 20 74 68 72 65 65 20  .    {one three 
1960: 66 6f 75 72 20 66 69 76 65 7d 20 20 20 20 7b 6f  four five}    {o
1970: 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75  ne two three fou
1980: 72 20 66 69 76 65 7d 0a 20 20 7d 0a 0a 20 20 31  r five}.  }..  1
1990: 35 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  5 {SELECT a FROM
19a0: 20 66 74 20 57 48 45 52 45 20 62 20 4d 41 54 43   ft WHERE b MATC
19b0: 48 20 27 22 6e 65 75 6e 67 20 73 6f 6e 67 20 73  H '"neung song s
19c0: 61 68 6d 22 27 7d 20 7b 0a 20 20 20 20 7b 6f 6e  ahm"'} {.    {on
19d0: 65 20 74 77 6f 20 74 68 72 65 65 7d 20 20 20 20  e two three}    
19e0: 20 20 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74        {one two t
19f0: 68 72 65 65 20 66 6f 75 72 7d 20 20 0a 20 20 20  hree four}  .   
1a00: 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20   {one two three 
1a10: 66 69 76 65 7d 20 20 20 20 20 7b 6f 6e 65 20 74  five}     {one t
1a20: 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66 69  wo three four fi
1a30: 76 65 7d 0a 20 20 7d 0a 0a 20 20 31 36 20 7b 53  ve}.  }..  16 {S
1a40: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 66 74 20  ELECT a FROM ft 
1a50: 57 48 45 52 45 20 62 20 4d 41 54 43 48 20 27 68  WHERE b MATCH 'h
1a60: 61 68 20 22 73 6f 6e 67 20 73 61 68 6d 22 27 7d  ah "song sahm"'}
1a70: 20 7b 0a 20 20 20 20 7b 74 77 6f 20 74 68 72 65   {.    {two thre
1a80: 65 20 66 69 76 65 7d 20 20 20 20 20 20 20 20 20  e five}         
1a90: 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66  {one two three f
1aa0: 69 76 65 7d 0a 20 20 20 20 7b 74 77 6f 20 74 68  ive}.    {two th
1ab0: 72 65 65 20 66 6f 75 72 20 66 69 76 65 7d 20 20  ree four five}  
1ac0: 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65    {one two three
1ad0: 20 66 6f 75 72 20 66 69 76 65 7d 0a 20 20 7d 0a   four five}.  }.
1ae0: 0a 20 20 31 37 20 7b 53 45 4c 45 43 54 20 61 20  .  17 {SELECT a 
1af0: 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20 62 20  FROM ft WHERE b 
1b00: 4d 41 54 43 48 20 27 73 6f 6e 67 20 4f 52 20 73  MATCH 'song OR s
1b10: 61 68 6d 27 7d 20 7b 0a 20 20 20 20 7b 74 77 6f  ahm'} {.    {two
1b20: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
1b30: 20 20 20 20 20 20 7b 6f 6e 65 20 74 77 6f 7d 20        {one two} 
1b40: 20 20 20 20 20 20 20 20 20 20 20 20 7b 74 68 72              {thr
1b50: 65 65 7d 0a 20 20 20 20 7b 6f 6e 65 20 74 68 72  ee}.    {one thr
1b60: 65 65 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ee}             
1b70: 20 20 7b 74 77 6f 20 74 68 72 65 65 7d 20 20 20    {two three}   
1b80: 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74 77 6f          {one two
1b90: 20 74 68 72 65 65 7d 0a 20 20 20 20 7b 74 77 6f   three}.    {two
1ba0: 20 66 6f 75 72 7d 20 20 20 20 20 20 20 20 20 20   four}          
1bb0: 20 20 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 66        {one two f
1bc0: 6f 75 72 7d 20 20 20 20 20 20 20 20 7b 74 68 72  our}        {thr
1bd0: 65 65 20 66 6f 75 72 7d 20 20 20 0a 20 20 20 20  ee four}   .    
1be0: 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f 75 72 7d  {one three four}
1bf0: 20 20 20 20 20 20 20 20 20 20 7b 74 77 6f 20 74            {two t
1c00: 68 72 65 65 20 66 6f 75 72 7d 20 20 20 20 20 20  hree four}      
1c10: 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66  {one two three f
1c20: 6f 75 72 7d 20 20 0a 20 20 20 20 7b 74 77 6f 20  our}  .    {two 
1c30: 66 69 76 65 7d 20 20 20 20 20 20 20 20 20 20 20  five}           
1c40: 20 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 66 69       {one two fi
1c50: 76 65 7d 20 20 20 20 20 20 20 20 7b 74 68 72 65  ve}        {thre
1c60: 65 20 66 69 76 65 7d 0a 20 20 20 20 7b 6f 6e 65  e five}.    {one
1c70: 20 74 68 72 65 65 20 66 69 76 65 7d 20 20 20 20   three five}    
1c80: 20 20 20 20 20 20 7b 74 77 6f 20 74 68 72 65 65        {two three
1c90: 20 66 69 76 65 7d 20 20 20 20 20 20 7b 6f 6e 65   five}      {one
1ca0: 20 74 77 6f 20 74 68 72 65 65 20 66 69 76 65 7d   two three five}
1cb0: 0a 20 20 20 20 7b 74 77 6f 20 66 6f 75 72 20 66  .    {two four f
1cc0: 69 76 65 7d 20 20 20 20 20 20 20 20 20 20 20 7b  ive}           {
1cd0: 6f 6e 65 20 74 77 6f 20 66 6f 75 72 20 66 69 76  one two four fiv
1ce0: 65 7d 20 20 20 7b 74 68 72 65 65 20 66 6f 75 72  e}   {three four
1cf0: 20 66 69 76 65 7d 0a 20 20 20 20 7b 6f 6e 65 20   five}.    {one 
1d00: 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65 7d  three four five}
1d10: 20 20 20 20 20 7b 74 77 6f 20 74 68 72 65 65 20       {two three 
1d20: 66 6f 75 72 20 66 69 76 65 7d 20 7b 6f 6e 65 20  four five} {one 
1d30: 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66  two three four f
1d40: 69 76 65 7d 0a 20 20 7d 0a 0a 20 20 31 38 20 7b  ive}.  }..  18 {
1d50: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 66 74  SELECT a FROM ft
1d60: 20 57 48 45 52 45 20 61 20 4d 41 54 43 48 20 27   WHERE a MATCH '
1d70: 74 68 72 65 65 20 4e 4f 54 20 74 77 6f 27 7d 20  three NOT two'} 
1d80: 7b 0a 20 20 20 20 7b 74 68 72 65 65 7d 20 20 20  {.    {three}   
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da0: 7b 6f 6e 65 20 74 68 72 65 65 7d 20 20 20 20 20  {one three}     
1db0: 20 20 20 20 20 20 7b 74 68 72 65 65 20 66 6f 75        {three fou
1dc0: 72 7d 20 20 20 0a 20 20 20 20 7b 6f 6e 65 20 74  r}   .    {one t
1dd0: 68 72 65 65 20 66 6f 75 72 7d 20 20 20 20 20 20  hree four}      
1de0: 20 20 20 20 7b 74 68 72 65 65 20 66 69 76 65 7d      {three five}
1df0: 20 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74            {one t
1e00: 68 72 65 65 20 66 69 76 65 7d 0a 20 20 20 20 7b  hree five}.    {
1e10: 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65 7d  three four five}
1e20: 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74 68           {one th
1e30: 72 65 65 20 66 6f 75 72 20 66 69 76 65 7d 0a 20  ree four five}. 
1e40: 20 7d 0a 0a 20 20 31 39 20 7b 53 45 4c 45 43 54   }..  19 {SELECT
1e50: 20 61 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45   a FROM ft WHERE
1e60: 20 62 20 4d 41 54 43 48 20 27 73 61 68 6d 20 4e   b MATCH 'sahm N
1e70: 4f 54 20 73 6f 6e 67 27 7d 20 7b 0a 20 20 20 20  OT song'} {.    
1e80: 7b 74 68 72 65 65 7d 20 20 20 20 20 20 20 20 20  {three}         
1e90: 20 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20 74            {one t
1ea0: 68 72 65 65 7d 20 20 20 20 20 20 20 20 20 20 20  hree}           
1eb0: 7b 74 68 72 65 65 20 66 6f 75 72 7d 20 20 20 0a  {three four}   .
1ec0: 20 20 20 20 7b 6f 6e 65 20 74 68 72 65 65 20 66      {one three f
1ed0: 6f 75 72 7d 20 20 20 20 20 20 20 20 20 20 7b 74  our}          {t
1ee0: 68 72 65 65 20 66 69 76 65 7d 20 20 20 20 20 20  hree five}      
1ef0: 20 20 20 20 7b 6f 6e 65 20 74 68 72 65 65 20 66      {one three f
1f00: 69 76 65 7d 0a 20 20 20 20 7b 74 68 72 65 65 20  ive}.    {three 
1f10: 66 6f 75 72 20 66 69 76 65 7d 20 20 20 20 20 20  four five}      
1f20: 20 20 20 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f     {one three fo
1f30: 75 72 20 66 69 76 65 7d 0a 20 20 7d 0a 0a 20 20  ur five}.  }..  
1f40: 32 30 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f  20 {SELECT a FRO
1f50: 4d 20 66 74 20 57 48 45 52 45 20 66 74 20 4d 41  M ft WHERE ft MA
1f60: 54 43 48 20 27 73 61 68 6d 20 4e 4f 54 20 73 6f  TCH 'sahm NOT so
1f70: 6e 67 27 7d 20 7b 0a 20 20 20 20 7b 74 68 72 65  ng'} {.    {thre
1f80: 65 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e}              
1f90: 20 20 20 20 20 7b 6f 6e 65 20 74 68 72 65 65 7d       {one three}
1fa0: 20 20 20 20 20 20 20 20 20 20 20 7b 74 68 72 65             {thre
1fb0: 65 20 66 6f 75 72 7d 20 20 20 0a 20 20 20 20 7b  e four}   .    {
1fc0: 6f 6e 65 20 74 68 72 65 65 20 66 6f 75 72 7d 20  one three four} 
1fd0: 20 20 20 20 20 20 20 20 20 7b 74 68 72 65 65 20           {three 
1fe0: 66 69 76 65 7d 20 20 20 20 20 20 20 20 20 20 7b  five}          {
1ff0: 6f 6e 65 20 74 68 72 65 65 20 66 69 76 65 7d 0a  one three five}.
2000: 20 20 20 20 7b 74 68 72 65 65 20 66 6f 75 72 20      {three four 
2010: 66 69 76 65 7d 20 20 20 20 20 20 20 20 20 7b 6f  five}         {o
2020: 6e 65 20 74 68 72 65 65 20 66 6f 75 72 20 66 69  ne three four fi
2030: 76 65 7d 0a 20 20 7d 0a 0a 20 20 32 31 20 7b 53  ve}.  }..  21 {S
2040: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 66 74 20  ELECT a FROM ft 
2050: 57 48 45 52 45 20 62 20 4d 41 54 43 48 20 27 6e  WHERE b MATCH 'n
2060: 65 75 6e 67 20 4e 45 41 52 20 73 6f 6e 67 20 4e  eung NEAR song N
2070: 45 41 52 20 73 61 68 6d 27 7d 20 7b 0a 20 20 20  EAR sahm'} {.   
2080: 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 7d   {one two three}
2090: 20 20 20 20 20 20 20 20 20 20 20 7b 6f 6e 65 20             {one 
20a0: 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72 7d 20  two three four} 
20b0: 20 0a 20 20 20 20 7b 6f 6e 65 20 74 77 6f 20 74   .    {one two t
20c0: 68 72 65 65 20 66 69 76 65 7d 20 20 20 20 20 20  hree five}      
20d0: 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66  {one two three f
20e0: 6f 75 72 20 66 69 76 65 7d 0a 20 20 7d 0a 0a 7d  our five}.  }..}
20f0: 20 7b 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20   {.  set result 
2100: 5b 6e 6f 72 6d 61 6c 5f 6c 69 73 74 20 24 72 65  [normal_list $re
2110: 73 75 6c 74 5d 0a 20 20 64 6f 5f 73 65 6c 65 63  sult].  do_selec
2120: 74 5f 74 65 73 74 20 66 74 73 33 5f 6d 61 6c 6c  t_test fts3_mall
2130: 6f 63 2d 32 2e 24 74 6e 20 24 73 71 6c 20 24 72  oc-2.$tn $sql $r
2140: 65 73 75 6c 74 0a 7d 0a 0a 64 6f 5f 74 65 73 74  esult.}..do_test
2150: 20 66 74 73 33 5f 6d 61 6c 6c 6f 63 2d 33 2e 30   fts3_malloc-3.0
2160: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 42 45 47   {.  execsql BEG
2170: 49 4e 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 69  IN.  for {set ii
2180: 20 33 32 7d 20 7b 24 69 69 20 3c 20 31 30 32 34   32} {$ii < 1024
2190: 7d 20 7b 69 6e 63 72 20 69 69 7d 20 7b 0a 20 20  } {incr ii} {.  
21a0: 20 20 73 65 74 20 61 20 5b 6c 69 73 74 5d 0a 20    set a [list]. 
21b0: 20 20 20 73 65 74 20 62 20 5b 6c 69 73 74 5d 0a     set b [list].
21c0: 20 20 20 20 69 66 20 7b 24 69 69 20 26 20 30 78      if {$ii & 0x
21d0: 30 30 30 31 7d 20 7b 6c 61 70 70 65 6e 64 20 61  0001} {lappend a
21e0: 20 6f 6e 65 20 20 20 3b 20 6c 61 70 70 65 6e 64   one   ; lappend
21f0: 20 62 20 6e 65 75 6e 67 20 7d 0a 20 20 20 20 69   b neung }.    i
2200: 66 20 7b 24 69 69 20 26 20 30 78 30 30 30 32 7d  f {$ii & 0x0002}
2210: 20 7b 6c 61 70 70 65 6e 64 20 61 20 74 77 6f 20   {lappend a two 
2220: 20 20 3b 20 6c 61 70 70 65 6e 64 20 62 20 73 6f    ; lappend b so
2230: 6e 67 20 20 7d 0a 20 20 20 20 69 66 20 7b 24 69  ng  }.    if {$i
2240: 69 20 26 20 30 78 30 30 30 34 7d 20 7b 6c 61 70  i & 0x0004} {lap
2250: 70 65 6e 64 20 61 20 74 68 72 65 65 20 3b 20 6c  pend a three ; l
2260: 61 70 70 65 6e 64 20 62 20 73 61 68 6d 20 20 7d  append b sahm  }
2270: 0a 20 20 20 20 69 66 20 7b 24 69 69 20 26 20 30  .    if {$ii & 0
2280: 78 30 30 30 38 7d 20 7b 6c 61 70 70 65 6e 64 20  x0008} {lappend 
2290: 61 20 66 6f 75 72 20 20 3b 20 6c 61 70 70 65 6e  a four  ; lappen
22a0: 64 20 62 20 73 65 65 20 20 20 7d 0a 20 20 20 20  d b see   }.    
22b0: 69 66 20 7b 24 69 69 20 26 20 30 78 30 30 31 30  if {$ii & 0x0010
22c0: 7d 20 7b 6c 61 70 70 65 6e 64 20 61 20 66 69 76  } {lappend a fiv
22d0: 65 20 20 3b 20 6c 61 70 70 65 6e 64 20 62 20 68  e  ; lappend b h
22e0: 61 68 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 24  ah   }.    if {$
22f0: 69 69 20 26 20 30 78 30 30 32 30 7d 20 7b 6c 61  ii & 0x0020} {la
2300: 70 70 65 6e 64 20 61 20 73 69 78 20 20 20 3b 20  ppend a six   ; 
2310: 6c 61 70 70 65 6e 64 20 62 20 68 6f 6b 20 20 20  lappend b hok   
2320: 7d 0a 20 20 20 20 69 66 20 7b 24 69 69 20 26 20  }.    if {$ii & 
2330: 30 78 30 30 34 30 7d 20 7b 6c 61 70 70 65 6e 64  0x0040} {lappend
2340: 20 61 20 73 65 76 65 6e 20 3b 20 6c 61 70 70 65   a seven ; lappe
2350: 6e 64 20 62 20 6a 65 74 20 20 20 7d 0a 20 20 20  nd b jet   }.   
2360: 20 69 66 20 7b 24 69 69 20 26 20 30 78 30 30 38   if {$ii & 0x008
2370: 30 7d 20 7b 6c 61 70 70 65 6e 64 20 61 20 65 69  0} {lappend a ei
2380: 67 68 74 20 3b 20 6c 61 70 70 65 6e 64 20 62 20  ght ; lappend b 
2390: 62 61 69 72 74 20 7d 0a 20 20 20 20 69 66 20 7b  bairt }.    if {
23a0: 24 69 69 20 26 20 30 78 30 31 30 30 7d 20 7b 6c  $ii & 0x0100} {l
23b0: 61 70 70 65 6e 64 20 61 20 6e 69 6e 65 20 20 3b  append a nine  ;
23c0: 20 6c 61 70 70 65 6e 64 20 62 20 67 6f 77 20 20   lappend b gow  
23d0: 20 7d 0a 20 20 20 20 69 66 20 7b 24 69 69 20 26   }.    if {$ii &
23e0: 20 30 78 30 32 30 30 7d 20 7b 6c 61 70 70 65 6e   0x0200} {lappen
23f0: 64 20 61 20 74 65 6e 20 20 20 3b 20 6c 61 70 70  d a ten   ; lapp
2400: 65 6e 64 20 62 20 73 69 70 20 20 20 7d 0a 20 20  end b sip   }.  
2410: 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45    execsql { INSE
2420: 52 54 20 49 4e 54 4f 20 66 74 20 56 41 4c 55 45  RT INTO ft VALUE
2430: 53 28 24 61 2c 20 24 62 29 20 7d 0a 20 20 7d 0a  S($a, $b) }.  }.
2440: 20 20 65 78 65 63 73 71 6c 20 43 4f 4d 4d 49 54    execsql COMMIT
2450: 0a 7d 20 7b 7d 0a 66 6f 72 65 61 63 68 20 7b 74  .} {}.foreach {t
2460: 6e 20 73 71 6c 20 72 65 73 75 6c 74 7d 20 7b 0a  n sql result} {.
2470: 20 20 31 20 22 53 45 4c 45 43 54 20 63 6f 75 6e    1 "SELECT coun
2480: 74 28 2a 29 20 46 52 4f 4d 20 66 74 22 20 7b 31  t(*) FROM ft" {1
2490: 30 32 33 7d 0a 0a 20 20 32 20 22 53 45 4c 45 43  023}..  2 "SELEC
24a0: 54 20 61 20 46 52 4f 4d 20 66 74 20 57 48 45 52  T a FROM ft WHER
24b0: 45 20 61 20 4d 41 54 43 48 20 27 6f 6e 65 20 74  E a MATCH 'one t
24c0: 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66 69  wo three four fi
24d0: 76 65 20 73 69 78 20 73 65 76 65 6e 20 65 69 67  ve six seven eig
24e0: 68 74 27 22 20 7b 0a 20 20 20 20 20 7b 6f 6e 65  ht'" {.     {one
24f0: 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20   two three four 
2500: 66 69 76 65 20 73 69 78 20 73 65 76 65 6e 20 65  five six seven e
2510: 69 67 68 74 7d 0a 20 20 20 20 20 7b 6f 6e 65 20  ight}.     {one 
2520: 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66  two three four f
2530: 69 76 65 20 73 69 78 20 73 65 76 65 6e 20 65 69  ive six seven ei
2540: 67 68 74 20 6e 69 6e 65 7d 0a 20 20 20 20 20 7b  ght nine}.     {
2550: 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f  one two three fo
2560: 75 72 20 66 69 76 65 20 73 69 78 20 73 65 76 65  ur five six seve
2570: 6e 20 65 69 67 68 74 20 74 65 6e 7d 0a 20 20 20  n eight ten}.   
2580: 20 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65    {one two three
2590: 20 66 6f 75 72 20 66 69 76 65 20 73 69 78 20 73   four five six s
25a0: 65 76 65 6e 20 65 69 67 68 74 20 6e 69 6e 65 20  even eight nine 
25b0: 74 65 6e 7d 0a 20 20 7d 0a 0a 20 20 33 20 7b 53  ten}.  }..  3 {S
25c0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c 20  ELECT count(*), 
25d0: 73 75 6d 28 64 6f 63 69 64 29 20 46 52 4f 4d 20  sum(docid) FROM 
25e0: 66 74 20 57 48 45 52 45 20 61 20 4d 41 54 43 48  ft WHERE a MATCH
25f0: 20 27 6f 2a 27 7d 20 7b 0a 20 20 20 20 35 31 32   'o*'} {.    512
2600: 20 32 36 32 31 34 34 0a 20 20 7d 0a 0a 20 20 34   262144.  }..  4
2610: 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   {SELECT count(*
2620: 29 2c 20 73 75 6d 28 64 6f 63 69 64 29 20 46 52  ), sum(docid) FR
2630: 4f 4d 20 66 74 20 57 48 45 52 45 20 61 20 4d 41  OM ft WHERE a MA
2640: 54 43 48 20 27 22 74 77 6f 20 74 68 72 65 65 20  TCH '"two three 
2650: 66 6f 75 72 22 27 7d 20 7b 0a 20 20 20 20 31 32  four"'} {.    12
2660: 38 20 36 36 33 36 38 0a 20 20 7d 0a 7d 20 7b 0a  8 66368.  }.} {.
2670: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6e 6f    set result [no
2680: 72 6d 61 6c 5f 6c 69 73 74 20 24 72 65 73 75 6c  rmal_list $resul
2690: 74 5d 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74  t].  do_select_t
26a0: 65 73 74 20 66 74 73 33 5f 6d 61 6c 6c 6f 63 2d  est fts3_malloc-
26b0: 33 2e 24 74 6e 20 24 73 71 6c 20 24 72 65 73 75  3.$tn $sql $resu
26c0: 6c 74 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74  lt.}..do_test ft
26d0: 73 33 5f 6d 61 6c 6c 6f 63 2d 34 2e 30 20 7b 0a  s3_malloc-4.0 {.
26e0: 20 20 65 78 65 63 73 71 6c 20 7b 20 44 45 4c 45    execsql { DELE
26f0: 54 45 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45  TE FROM ft WHERE
2700: 20 64 6f 63 69 64 3e 3d 33 32 20 7d 0a 7d 20 7b   docid>=32 }.} {
2710: 7d 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 73 71  }.foreach {tn sq
2720: 6c 7d 20 7b 0a 20 20 31 20 22 44 45 4c 45 54 45  l} {.  1 "DELETE
2730: 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20 66   FROM ft WHERE f
2740: 74 20 4d 41 54 43 48 20 27 6f 6e 65 27 22 0a 20  t MATCH 'one'". 
2750: 20 32 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20   2 "DELETE FROM 
2760: 66 74 20 57 48 45 52 45 20 66 74 20 4d 41 54 43  ft WHERE ft MATC
2770: 48 20 27 74 68 72 65 65 27 22 0a 20 20 33 20 22  H 'three'".  3 "
2780: 44 45 4c 45 54 45 20 46 52 4f 4d 20 66 74 20 57  DELETE FROM ft W
2790: 48 45 52 45 20 66 74 20 4d 41 54 43 48 20 27 66  HERE ft MATCH 'f
27a0: 69 76 65 27 22 0a 7d 20 7b 0a 20 20 64 6f 5f 77  ive'".} {.  do_w
27b0: 72 69 74 65 5f 74 65 73 74 20 66 74 73 33 5f 6d  rite_test fts3_m
27c0: 61 6c 6c 6f 63 2d 34 2e 31 2e 24 74 6e 20 66 74  alloc-4.1.$tn ft
27d0: 5f 63 6f 6e 74 65 6e 74 20 24 73 71 6c 0a 7d 0a  _content $sql.}.
27e0: 64 6f 5f 74 65 73 74 20 66 74 73 33 5f 6d 61 6c  do_test fts3_mal
27f0: 6c 6f 63 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63  loc-4.2 {.  exec
2800: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 61 20 46  sql { SELECT a F
2810: 52 4f 4d 20 66 74 20 7d 0a 7d 20 7b 74 77 6f 20  ROM ft }.} {two 
2820: 66 6f 75 72 20 7b 74 77 6f 20 66 6f 75 72 7d 7d  four {two four}}
2830: 0a 0a 64 6f 5f 77 72 69 74 65 5f 74 65 73 74 20  ..do_write_test 
2840: 66 74 73 33 5f 6d 61 6c 6c 6f 63 2d 35 2e 31 20  fts3_malloc-5.1 
2850: 66 74 5f 63 6f 6e 74 65 6e 74 20 7b 0a 20 20 49  ft_content {.  I
2860: 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 20 56 41  NSERT INTO ft VA
2870: 4c 55 45 53 28 27 73 68 6f 72 74 20 61 6c 6f 6e  LUES('short alon
2880: 67 65 72 74 6f 6b 65 6e 20 72 65 61 6c 6c 79 71  gertoken reallyq
2890: 75 69 74 65 61 6c 6f 74 6c 6f 6e 67 65 72 69 6d  uitealotlongerim
28a0: 65 61 6e 69 74 20 61 6e 64 74 68 69 73 74 6f 6b  eanit andthistok
28b0: 65 6e 69 73 6a 75 73 74 73 6f 6c 6f 6e 67 74 68  enisjustsolongth
28c0: 61 74 6f 6e 65 6d 69 67 68 74 62 65 66 6f 72 67  atonemightbeforg
28d0: 69 76 65 6e 66 6f 72 69 6d 61 67 69 6e 69 6e 67  ivenforimagining
28e0: 74 68 61 74 69 74 77 61 73 6d 65 72 65 6c 79 61  thatitwasmerelya
28f0: 63 6f 6e 74 72 69 76 65 64 65 78 61 6d 70 6c 65  contrivedexample
2900: 61 6e 64 6e 6f 74 61 72 65 61 6c 74 6f 6b 65 6e  andnotarealtoken
2910: 27 2c 20 27 63 79 6e 69 63 73 21 27 29 0a 7d 0a  ', 'cynics!').}.
2920: 64 6f 5f 74 65 73 74 20 66 74 73 33 5f 6d 61 6c  do_test fts3_mal
2930: 6c 6f 63 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63  loc-5.2 {.  exec
2940: 73 71 6c 20 7b 20 43 52 45 41 54 45 20 56 49 52  sql { CREATE VIR
2950: 54 55 41 4c 20 54 41 42 4c 45 20 66 74 38 20 55  TUAL TABLE ft8 U
2960: 53 49 4e 47 20 66 74 73 33 28 78 2c 20 74 6f 6b  SING fts3(x, tok
2970: 65 6e 69 7a 65 20 70 6f 72 74 65 72 29 20 7d 0a  enize porter) }.
2980: 7d 20 7b 7d 0a 0a 64 6f 5f 77 72 69 74 65 5f 74  } {}..do_write_t
2990: 65 73 74 20 66 74 73 33 5f 6d 61 6c 6c 6f 63 2d  est fts3_malloc-
29a0: 35 2e 33 20 66 74 5f 63 6f 6e 74 65 6e 74 20 7b  5.3 ft_content {
29b0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66  .  INSERT INTO f
29c0: 74 38 20 56 41 4c 55 45 53 28 27 73 68 6f 72 74  t8 VALUES('short
29d0: 20 61 6c 6f 6e 67 65 72 74 6f 6b 65 6e 20 72 65   alongertoken re
29e0: 61 6c 6c 79 71 75 69 74 65 61 6c 6f 74 6c 6f 6e  allyquitealotlon
29f0: 67 65 72 69 6d 65 61 6e 69 74 20 61 6e 64 74 68  gerimeanit andth
2a00: 69 73 74 6f 6b 65 6e 69 73 6a 75 73 74 73 6f 6c  istokenisjustsol
2a10: 6f 6e 67 74 68 61 74 6f 6e 65 6d 69 67 68 74 62  ongthatonemightb
2a20: 65 66 6f 72 67 69 76 65 6e 66 6f 72 69 6d 61 67  eforgivenforimag
2a30: 69 6e 69 6e 67 74 68 61 74 69 74 77 61 73 6d 65  iningthatitwasme
2a40: 72 65 6c 79 61 63 6f 6e 74 72 69 76 65 64 65 78  relyacontrivedex
2a50: 61 6d 70 6c 65 61 6e 64 6e 6f 74 61 72 65 61 6c  ampleandnotareal
2a60: 74 6f 6b 65 6e 27 29 0a 7d 0a 0a 0a 66 69 6e 69  token').}...fini
2a70: 73 68 5f 74 65 73 74 0a                          sh_test.