/ Hex Artifact Content
Login

Artifact 5e745b2b6348499d9ef8d59015de3182072c564c:


0000: 23 20 32 30 30 36 20 53 65 70 74 65 6d 62 65 72  # 2006 September
0010: 20 39 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f   9.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 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 2a 2a 2a 0a 23 20 54 68 69  **********.# Thi
0170: 73 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  s file implement
0180: 73 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  s regression tes
0190: 74 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69  ts for SQLite li
01a0: 62 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f  brary.  The.# fo
01b0: 63 75 73 20 6f 66 20 74 68 69 73 20 73 63 72 69  cus of this scri
01c0: 70 74 20 69 73 20 74 65 73 74 69 6e 67 20 74 68  pt is testing th
01d0: 65 20 46 54 53 33 20 6d 6f 64 75 6c 65 2e 0a 23  e FTS3 module..#
01e0: 0a 23 20 24 49 64 3a 20 66 74 73 33 65 78 70 72  .# $Id: fts3expr
01f0: 2e 74 65 73 74 2c 76 20 31 2e 39 20 32 30 30 39  .test,v 1.9 2009
0200: 2f 30 37 2f 32 38 20 31 36 3a 34 34 3a 32 36 20  /07/28 16:44:26 
0210: 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70 20  danielk1977 Exp 
0220: 24 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72  $.#..set testdir
0230: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24   [file dirname $
0240: 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74  argv0].source $t
0250: 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63  estdir/tester.tc
0260: 6c 0a 0a 23 20 49 66 20 53 51 4c 49 54 45 5f 45  l..# If SQLITE_E
0270: 4e 41 42 4c 45 5f 46 54 53 33 20 69 73 20 64 65  NABLE_FTS3 is de
0280: 66 69 6e 65 64 2c 20 6f 6d 69 74 20 74 68 69 73  fined, omit this
0290: 20 66 69 6c 65 2e 0a 69 66 63 61 70 61 62 6c 65   file..ifcapable
02a0: 20 21 66 74 73 33 20 7b 0a 20 20 66 69 6e 69 73   !fts3 {.  finis
02b0: 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a  h_test.  return.
02c0: 7d 0a 0a 73 65 74 20 73 71 6c 69 74 65 5f 66 74  }..set sqlite_ft
02d0: 73 33 5f 65 6e 61 62 6c 65 5f 70 61 72 65 6e 74  s3_enable_parent
02e0: 68 65 73 65 73 20 31 0a 0a 70 72 6f 63 20 74 65  heses 1..proc te
02f0: 73 74 5f 66 74 73 33 65 78 70 72 20 7b 65 78 70  st_fts3expr {exp
0300: 72 7d 20 7b 0a 20 20 64 62 20 6f 6e 65 20 7b 53  r} {.  db one {S
0310: 45 4c 45 43 54 20 66 74 73 33 5f 65 78 70 72 74  ELECT fts3_exprt
0320: 65 73 74 28 27 73 69 6d 70 6c 65 27 2c 20 24 65  est('simple', $e
0330: 78 70 72 2c 20 27 61 27 2c 20 27 62 27 2c 20 27  xpr, 'a', 'b', '
0340: 63 27 29 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 66  c')}.}.do_test f
0350: 74 73 33 65 78 70 72 2d 31 2e 30 20 7b 0a 20 20  ts3expr-1.0 {.  
0360: 74 65 73 74 5f 66 74 73 33 65 78 70 72 20 22 61  test_fts3expr "a
0370: 62 63 64 22 0a 7d 20 7b 50 48 52 41 53 45 20 33  bcd".} {PHRASE 3
0380: 20 30 20 61 62 63 64 7d 0a 64 6f 5f 74 65 73 74   0 abcd}.do_test
0390: 20 66 74 73 33 65 78 70 72 2d 31 2e 31 20 7b 0a   fts3expr-1.1 {.
03a0: 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 20    test_fts3expr 
03b0: 22 20 74 61 67 20 22 0a 7d 20 7b 50 48 52 41 53  " tag ".} {PHRAS
03c0: 45 20 33 20 30 20 74 61 67 7d 0a 0a 64 6f 5f 74  E 3 0 tag}..do_t
03d0: 65 73 74 20 66 74 73 33 65 78 70 72 2d 31 2e 32  est fts3expr-1.2
03e0: 20 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78   {.  test_fts3ex
03f0: 70 72 20 22 61 62 20 41 4e 44 20 63 64 22 0a 7d  pr "ab AND cd".}
0400: 20 7b 41 4e 44 20 7b 50 48 52 41 53 45 20 33 20   {AND {PHRASE 3 
0410: 30 20 61 62 7d 20 7b 50 48 52 41 53 45 20 33 20  0 ab} {PHRASE 3 
0420: 30 20 63 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 66  0 cd}}.do_test f
0430: 74 73 33 65 78 70 72 2d 31 2e 32 2e 31 20 7b 0a  ts3expr-1.2.1 {.
0440: 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 20    test_fts3expr 
0450: 22 61 62 20 63 64 22 0a 7d 20 7b 41 4e 44 20 7b  "ab cd".} {AND {
0460: 50 48 52 41 53 45 20 33 20 30 20 61 62 7d 20 7b  PHRASE 3 0 ab} {
0470: 50 48 52 41 53 45 20 33 20 30 20 63 64 7d 7d 0a  PHRASE 3 0 cd}}.
0480: 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70 72  do_test fts3expr
0490: 2d 31 2e 33 20 7b 0a 20 20 74 65 73 74 5f 66 74  -1.3 {.  test_ft
04a0: 73 33 65 78 70 72 20 22 61 62 20 4f 52 20 63 64  s3expr "ab OR cd
04b0: 22 0a 7d 20 7b 4f 52 20 7b 50 48 52 41 53 45 20  ".} {OR {PHRASE 
04c0: 33 20 30 20 61 62 7d 20 7b 50 48 52 41 53 45 20  3 0 ab} {PHRASE 
04d0: 33 20 30 20 63 64 7d 7d 0a 64 6f 5f 74 65 73 74  3 0 cd}}.do_test
04e0: 20 66 74 73 33 65 78 70 72 2d 31 2e 34 20 7b 0a   fts3expr-1.4 {.
04f0: 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 20    test_fts3expr 
0500: 22 61 62 20 4e 4f 54 20 63 64 22 0a 7d 20 7b 4e  "ab NOT cd".} {N
0510: 4f 54 20 7b 50 48 52 41 53 45 20 33 20 30 20 61  OT {PHRASE 3 0 a
0520: 62 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 63  b} {PHRASE 3 0 c
0530: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33  d}}.do_test fts3
0540: 65 78 70 72 2d 31 2e 35 20 7b 0a 20 20 74 65 73  expr-1.5 {.  tes
0550: 74 5f 66 74 73 33 65 78 70 72 20 22 61 62 20 4e  t_fts3expr "ab N
0560: 45 41 52 20 63 64 22 0a 7d 20 7b 4e 45 41 52 2f  EAR cd".} {NEAR/
0570: 31 30 20 7b 50 48 52 41 53 45 20 33 20 30 20 61  10 {PHRASE 3 0 a
0580: 62 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 63  b} {PHRASE 3 0 c
0590: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33  d}}.do_test fts3
05a0: 65 78 70 72 2d 31 2e 36 2e 31 20 7b 0a 20 20 74  expr-1.6.1 {.  t
05b0: 65 73 74 5f 66 74 73 33 65 78 70 72 20 22 61 62  est_fts3expr "ab
05c0: 20 4e 45 41 52 2f 35 20 63 64 22 0a 7d 20 7b 4e   NEAR/5 cd".} {N
05d0: 45 41 52 2f 35 20 7b 50 48 52 41 53 45 20 33 20  EAR/5 {PHRASE 3 
05e0: 30 20 61 62 7d 20 7b 50 48 52 41 53 45 20 33 20  0 ab} {PHRASE 3 
05f0: 30 20 63 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 66  0 cd}}.do_test f
0600: 74 73 33 65 78 70 72 2d 31 2e 36 2e 32 20 7b 0a  ts3expr-1.6.2 {.
0610: 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 20    test_fts3expr 
0620: 22 61 62 20 4e 45 41 52 2f 38 37 36 35 34 33 32  "ab NEAR/8765432
0630: 31 20 63 64 22 0a 7d 20 7b 4e 45 41 52 2f 38 37  1 cd".} {NEAR/87
0640: 36 35 34 33 32 31 20 7b 50 48 52 41 53 45 20 33  654321 {PHRASE 3
0650: 20 30 20 61 62 7d 20 7b 50 48 52 41 53 45 20 33   0 ab} {PHRASE 3
0660: 20 30 20 63 64 7d 7d 0a 64 6f 5f 74 65 73 74 20   0 cd}}.do_test 
0670: 66 74 73 33 65 78 70 72 2d 31 2e 36 2e 33 20 7b  fts3expr-1.6.3 {
0680: 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72  .  test_fts3expr
0690: 20 22 61 62 20 4e 45 41 52 2f 37 36 35 34 33 32   "ab NEAR/765432
06a0: 31 20 63 64 22 0a 7d 20 7b 4e 45 41 52 2f 37 36  1 cd".} {NEAR/76
06b0: 35 34 33 32 31 20 7b 50 48 52 41 53 45 20 33 20  54321 {PHRASE 3 
06c0: 30 20 61 62 7d 20 7b 50 48 52 41 53 45 20 33 20  0 ab} {PHRASE 3 
06d0: 30 20 63 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 66  0 cd}}.do_test f
06e0: 74 73 33 65 78 70 72 2d 31 2e 36 2e 34 20 7b 0a  ts3expr-1.6.4 {.
06f0: 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 20    test_fts3expr 
0700: 22 61 62 20 4e 45 41 52 2f 36 35 34 33 32 31 20  "ab NEAR/654321 
0710: 63 64 22 0a 7d 20 7b 4e 45 41 52 2f 36 35 34 33  cd".} {NEAR/6543
0720: 32 31 20 7b 50 48 52 41 53 45 20 33 20 30 20 61  21 {PHRASE 3 0 a
0730: 62 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 63  b} {PHRASE 3 0 c
0740: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33  d}}.do_test fts3
0750: 65 78 70 72 2d 31 2e 36 2e 35 20 7b 0a 20 20 74  expr-1.6.5 {.  t
0760: 65 73 74 5f 66 74 73 33 65 78 70 72 20 22 61 62  est_fts3expr "ab
0770: 20 4e 45 41 52 2f 35 34 33 32 31 20 63 64 22 0a   NEAR/54321 cd".
0780: 7d 20 7b 4e 45 41 52 2f 35 34 33 32 31 20 7b 50  } {NEAR/54321 {P
0790: 48 52 41 53 45 20 33 20 30 20 61 62 7d 20 7b 50  HRASE 3 0 ab} {P
07a0: 48 52 41 53 45 20 33 20 30 20 63 64 7d 7d 0a 64  HRASE 3 0 cd}}.d
07b0: 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70 72 2d  o_test fts3expr-
07c0: 31 2e 36 2e 36 20 7b 0a 20 20 74 65 73 74 5f 66  1.6.6 {.  test_f
07d0: 74 73 33 65 78 70 72 20 22 61 62 20 4e 45 41 52  ts3expr "ab NEAR
07e0: 2f 34 33 32 31 20 63 64 22 0a 7d 20 7b 4e 45 41  /4321 cd".} {NEA
07f0: 52 2f 34 33 32 31 20 7b 50 48 52 41 53 45 20 33  R/4321 {PHRASE 3
0800: 20 30 20 61 62 7d 20 7b 50 48 52 41 53 45 20 33   0 ab} {PHRASE 3
0810: 20 30 20 63 64 7d 7d 0a 64 6f 5f 74 65 73 74 20   0 cd}}.do_test 
0820: 66 74 73 33 65 78 70 72 2d 31 2e 36 2e 37 20 7b  fts3expr-1.6.7 {
0830: 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72  .  test_fts3expr
0840: 20 22 61 62 20 4e 45 41 52 2f 33 32 31 20 63 64   "ab NEAR/321 cd
0850: 22 0a 7d 20 7b 4e 45 41 52 2f 33 32 31 20 7b 50  ".} {NEAR/321 {P
0860: 48 52 41 53 45 20 33 20 30 20 61 62 7d 20 7b 50  HRASE 3 0 ab} {P
0870: 48 52 41 53 45 20 33 20 30 20 63 64 7d 7d 0a 64  HRASE 3 0 cd}}.d
0880: 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70 72 2d  o_test fts3expr-
0890: 31 2e 36 2e 38 20 7b 0a 20 20 74 65 73 74 5f 66  1.6.8 {.  test_f
08a0: 74 73 33 65 78 70 72 20 22 61 62 20 4e 45 41 52  ts3expr "ab NEAR
08b0: 2f 32 31 20 63 64 22 0a 7d 20 7b 4e 45 41 52 2f  /21 cd".} {NEAR/
08c0: 32 31 20 7b 50 48 52 41 53 45 20 33 20 30 20 61  21 {PHRASE 3 0 a
08d0: 62 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 63  b} {PHRASE 3 0 c
08e0: 64 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73  d}}..do_test fts
08f0: 33 65 78 70 72 2d 31 2e 37 20 7b 0a 20 20 74 65  3expr-1.7 {.  te
0900: 73 74 5f 66 74 73 33 65 78 70 72 20 7b 22 6f 6e  st_fts3expr {"on
0910: 65 20 74 77 6f 20 74 68 72 65 65 22 7d 0a 7d 20  e two three"}.} 
0920: 7b 50 48 52 41 53 45 20 33 20 30 20 6f 6e 65 20  {PHRASE 3 0 one 
0930: 74 77 6f 20 74 68 72 65 65 7d 0a 64 6f 5f 74 65  two three}.do_te
0940: 73 74 20 66 74 73 33 65 78 70 72 2d 31 2e 38 2e  st fts3expr-1.8.
0950: 31 20 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65  1 {.  test_fts3e
0960: 78 70 72 20 7b 7a 65 72 6f 20 22 6f 6e 65 20 74  xpr {zero "one t
0970: 77 6f 20 74 68 72 65 65 22 20 66 6f 75 72 7d 0a  wo three" four}.
0980: 7d 20 7b 41 4e 44 20 7b 41 4e 44 20 7b 50 48 52  } {AND {AND {PHR
0990: 41 53 45 20 33 20 30 20 7a 65 72 6f 7d 20 7b 50  ASE 3 0 zero} {P
09a0: 48 52 41 53 45 20 33 20 30 20 6f 6e 65 20 74 77  HRASE 3 0 one tw
09b0: 6f 20 74 68 72 65 65 7d 7d 20 7b 50 48 52 41 53  o three}} {PHRAS
09c0: 45 20 33 20 30 20 66 6f 75 72 7d 7d 0a 64 6f 5f  E 3 0 four}}.do_
09d0: 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 31 2e  test fts3expr-1.
09e0: 38 2e 32 20 7b 0a 20 20 74 65 73 74 5f 66 74 73  8.2 {.  test_fts
09f0: 33 65 78 70 72 20 7b 7a 65 72 6f 20 41 4e 44 20  3expr {zero AND 
0a00: 22 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 22 20  "one two three" 
0a10: 66 6f 75 72 7d 0a 7d 20 7b 41 4e 44 20 7b 41 4e  four}.} {AND {AN
0a20: 44 20 7b 50 48 52 41 53 45 20 33 20 30 20 7a 65  D {PHRASE 3 0 ze
0a30: 72 6f 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20  ro} {PHRASE 3 0 
0a40: 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 7d 7d 20  one two three}} 
0a50: 7b 50 48 52 41 53 45 20 33 20 30 20 66 6f 75 72  {PHRASE 3 0 four
0a60: 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65  }}.do_test fts3e
0a70: 78 70 72 2d 31 2e 38 2e 33 20 7b 0a 20 20 74 65  xpr-1.8.3 {.  te
0a80: 73 74 5f 66 74 73 33 65 78 70 72 20 7b 7a 65 72  st_fts3expr {zer
0a90: 6f 20 22 6f 6e 65 20 74 77 6f 20 74 68 72 65 65  o "one two three
0aa0: 22 20 41 4e 44 20 66 6f 75 72 7d 0a 7d 20 7b 41  " AND four}.} {A
0ab0: 4e 44 20 7b 41 4e 44 20 7b 50 48 52 41 53 45 20  ND {AND {PHRASE 
0ac0: 33 20 30 20 7a 65 72 6f 7d 20 7b 50 48 52 41 53  3 0 zero} {PHRAS
0ad0: 45 20 33 20 30 20 6f 6e 65 20 74 77 6f 20 74 68  E 3 0 one two th
0ae0: 72 65 65 7d 7d 20 7b 50 48 52 41 53 45 20 33 20  ree}} {PHRASE 3 
0af0: 30 20 66 6f 75 72 7d 7d 0a 64 6f 5f 74 65 73 74  0 four}}.do_test
0b00: 20 66 74 73 33 65 78 70 72 2d 31 2e 38 2e 34 20   fts3expr-1.8.4 
0b10: 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78 70  {.  test_fts3exp
0b20: 72 20 7b 7a 65 72 6f 20 41 4e 44 20 22 6f 6e 65  r {zero AND "one
0b30: 20 74 77 6f 20 74 68 72 65 65 22 20 41 4e 44 20   two three" AND 
0b40: 66 6f 75 72 7d 0a 7d 20 7b 41 4e 44 20 7b 41 4e  four}.} {AND {AN
0b50: 44 20 7b 50 48 52 41 53 45 20 33 20 30 20 7a 65  D {PHRASE 3 0 ze
0b60: 72 6f 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20  ro} {PHRASE 3 0 
0b70: 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 7d 7d 20  one two three}} 
0b80: 7b 50 48 52 41 53 45 20 33 20 30 20 66 6f 75 72  {PHRASE 3 0 four
0b90: 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65  }}.do_test fts3e
0ba0: 78 70 72 2d 31 2e 39 2e 31 20 7b 0a 20 20 74 65  xpr-1.9.1 {.  te
0bb0: 73 74 5f 66 74 73 33 65 78 70 72 20 7b 22 6f 6e  st_fts3expr {"on
0bc0: 65 2a 20 74 77 6f 20 74 68 72 65 65 22 7d 0a 7d  e* two three"}.}
0bd0: 20 7b 50 48 52 41 53 45 20 33 20 30 20 6f 6e 65   {PHRASE 3 0 one
0be0: 2b 20 74 77 6f 20 74 68 72 65 65 7d 0a 64 6f 5f  + two three}.do_
0bf0: 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 31 2e  test fts3expr-1.
0c00: 39 2e 32 20 7b 0a 20 20 74 65 73 74 5f 66 74 73  9.2 {.  test_fts
0c10: 33 65 78 70 72 20 7b 22 6f 6e 65 20 74 77 6f 2a  3expr {"one two*
0c20: 20 74 68 72 65 65 22 7d 0a 7d 20 7b 50 48 52 41   three"}.} {PHRA
0c30: 53 45 20 33 20 30 20 6f 6e 65 20 74 77 6f 2b 20  SE 3 0 one two+ 
0c40: 74 68 72 65 65 7d 0a 64 6f 5f 74 65 73 74 20 66  three}.do_test f
0c50: 74 73 33 65 78 70 72 2d 31 2e 39 2e 33 20 7b 0a  ts3expr-1.9.3 {.
0c60: 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 20    test_fts3expr 
0c70: 7b 22 6f 6e 65 2a 20 74 77 6f 2a 20 74 68 72 65  {"one* two* thre
0c80: 65 22 7d 0a 7d 20 7b 50 48 52 41 53 45 20 33 20  e"}.} {PHRASE 3 
0c90: 30 20 6f 6e 65 2b 20 74 77 6f 2b 20 74 68 72 65  0 one+ two+ thre
0ca0: 65 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65  e}.do_test fts3e
0cb0: 78 70 72 2d 31 2e 39 2e 34 20 7b 0a 20 20 74 65  xpr-1.9.4 {.  te
0cc0: 73 74 5f 66 74 73 33 65 78 70 72 20 7b 22 6f 6e  st_fts3expr {"on
0cd0: 65 20 74 77 6f 20 74 68 72 65 65 2a 22 7d 0a 7d  e two three*"}.}
0ce0: 20 7b 50 48 52 41 53 45 20 33 20 30 20 6f 6e 65   {PHRASE 3 0 one
0cf0: 20 74 77 6f 20 74 68 72 65 65 2b 7d 0a 64 6f 5f   two three+}.do_
0d00: 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 31 2e  test fts3expr-1.
0d10: 39 2e 35 20 7b 0a 20 20 74 65 73 74 5f 66 74 73  9.5 {.  test_fts
0d20: 33 65 78 70 72 20 7b 22 6f 6e 65 2a 20 74 77 6f  3expr {"one* two
0d30: 20 74 68 72 65 65 2a 22 7d 0a 7d 20 7b 50 48 52   three*"}.} {PHR
0d40: 41 53 45 20 33 20 30 20 6f 6e 65 2b 20 74 77 6f  ASE 3 0 one+ two
0d50: 20 74 68 72 65 65 2b 7d 0a 64 6f 5f 74 65 73 74   three+}.do_test
0d60: 20 66 74 73 33 65 78 70 72 2d 31 2e 39 2e 36 20   fts3expr-1.9.6 
0d70: 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78 70  {.  test_fts3exp
0d80: 72 20 7b 22 6f 6e 65 20 74 77 6f 2a 20 74 68 72  r {"one two* thr
0d90: 65 65 2a 22 7d 0a 7d 20 7b 50 48 52 41 53 45 20  ee*"}.} {PHRASE 
0da0: 33 20 30 20 6f 6e 65 20 74 77 6f 2b 20 74 68 72  3 0 one two+ thr
0db0: 65 65 2b 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73  ee+}.do_test fts
0dc0: 33 65 78 70 72 2d 31 2e 39 2e 37 20 7b 0a 20 20  3expr-1.9.7 {.  
0dd0: 74 65 73 74 5f 66 74 73 33 65 78 70 72 20 7b 22  test_fts3expr {"
0de0: 6f 6e 65 2a 20 74 77 6f 2a 20 74 68 72 65 65 2a  one* two* three*
0df0: 22 7d 0a 7d 20 7b 50 48 52 41 53 45 20 33 20 30  "}.} {PHRASE 3 0
0e00: 20 6f 6e 65 2b 20 74 77 6f 2b 20 74 68 72 65 65   one+ two+ three
0e10: 2b 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73 33  +}..do_test fts3
0e20: 65 78 70 72 2d 31 2e 31 30 20 7b 0a 20 20 74 65  expr-1.10 {.  te
0e30: 73 74 5f 66 74 73 33 65 78 70 72 20 7b 6f 6e 65  st_fts3expr {one
0e40: 2a 20 74 77 6f 7d 0a 7d 20 7b 41 4e 44 20 7b 50  * two}.} {AND {P
0e50: 48 52 41 53 45 20 33 20 30 20 6f 6e 65 2b 7d 20  HRASE 3 0 one+} 
0e60: 7b 50 48 52 41 53 45 20 33 20 30 20 74 77 6f 7d  {PHRASE 3 0 two}
0e70: 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78  }.do_test fts3ex
0e80: 70 72 2d 31 2e 31 31 20 7b 0a 20 20 74 65 73 74  pr-1.11 {.  test
0e90: 5f 66 74 73 33 65 78 70 72 20 7b 6f 6e 65 20 74  _fts3expr {one t
0ea0: 77 6f 2a 7d 0a 7d 20 7b 41 4e 44 20 7b 50 48 52  wo*}.} {AND {PHR
0eb0: 41 53 45 20 33 20 30 20 6f 6e 65 7d 20 7b 50 48  ASE 3 0 one} {PH
0ec0: 52 41 53 45 20 33 20 30 20 74 77 6f 2b 7d 7d 0a  RASE 3 0 two+}}.
0ed0: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70  .do_test fts3exp
0ee0: 72 2d 31 2e 31 34 20 7b 0a 20 20 74 65 73 74 5f  r-1.14 {.  test_
0ef0: 66 74 73 33 65 78 70 72 20 7b 61 3a 6f 6e 65 20  fts3expr {a:one 
0f00: 74 77 6f 7d 0a 7d 20 7b 41 4e 44 20 7b 50 48 52  two}.} {AND {PHR
0f10: 41 53 45 20 30 20 30 20 6f 6e 65 7d 20 7b 50 48  ASE 0 0 one} {PH
0f20: 52 41 53 45 20 33 20 30 20 74 77 6f 7d 7d 0a 64  RASE 3 0 two}}.d
0f30: 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70 72 2d  o_test fts3expr-
0f40: 31 2e 31 35 2e 31 20 7b 0a 20 20 74 65 73 74 5f  1.15.1 {.  test_
0f50: 66 74 73 33 65 78 70 72 20 7b 6f 6e 65 20 62 3a  fts3expr {one b:
0f60: 74 77 6f 7d 0a 7d 20 7b 41 4e 44 20 7b 50 48 52  two}.} {AND {PHR
0f70: 41 53 45 20 33 20 30 20 6f 6e 65 7d 20 7b 50 48  ASE 3 0 one} {PH
0f80: 52 41 53 45 20 31 20 30 20 74 77 6f 7d 7d 0a 64  RASE 1 0 two}}.d
0f90: 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70 72 2d  o_test fts3expr-
0fa0: 31 2e 31 35 2e 32 20 7b 0a 20 20 74 65 73 74 5f  1.15.2 {.  test_
0fb0: 66 74 73 33 65 78 70 72 20 7b 6f 6e 65 20 42 3a  fts3expr {one B:
0fc0: 74 77 6f 7d 0a 7d 20 7b 41 4e 44 20 7b 50 48 52  two}.} {AND {PHR
0fd0: 41 53 45 20 33 20 30 20 6f 6e 65 7d 20 7b 50 48  ASE 3 0 one} {PH
0fe0: 52 41 53 45 20 31 20 30 20 74 77 6f 7d 7d 0a 0a  RASE 1 0 two}}..
0ff0: 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70 72  do_test fts3expr
1000: 2d 31 2e 31 36 20 7b 0a 20 20 74 65 73 74 5f 66  -1.16 {.  test_f
1010: 74 73 33 65 78 70 72 20 7b 6f 6e 65 20 41 4e 44  ts3expr {one AND
1020: 20 74 77 6f 20 41 4e 44 20 74 68 72 65 65 20 41   two AND three A
1030: 4e 44 20 66 6f 75 72 20 41 4e 44 20 66 69 76 65  ND four AND five
1040: 7d 0a 7d 20 5b 6c 69 73 74 20 41 4e 44 20 5c 0a  }.} [list AND \.
1050: 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 41 4e          [list AN
1060: 44 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  D \.            
1070: 20 20 5b 6c 69 73 74 20 41 4e 44 20 5c 0a 20 20    [list AND \.  
1080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1090: 20 20 5b 6c 69 73 74 20 41 4e 44 20 7b 50 48 52    [list AND {PHR
10a0: 41 53 45 20 33 20 30 20 6f 6e 65 7d 20 7b 50 48  ASE 3 0 one} {PH
10b0: 52 41 53 45 20 33 20 30 20 74 77 6f 7d 5d 20 5c  RASE 3 0 two}] \
10c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10d0: 20 20 20 20 20 7b 50 48 52 41 53 45 20 33 20 30       {PHRASE 3 0
10e0: 20 74 68 72 65 65 7d 20 5c 0a 20 20 20 20 20 20   three} \.      
10f0: 20 20 20 20 20 20 20 20 5d 20 5c 0a 20 20 20 20          ] \.    
1100: 20 20 20 20 20 20 20 20 20 20 7b 50 48 52 41 53            {PHRAS
1110: 45 20 33 20 30 20 66 6f 75 72 7d 20 5c 0a 20 20  E 3 0 four} \.  
1120: 20 20 20 20 20 20 5d 20 5c 0a 20 20 20 20 20 20        ] \.      
1130: 20 20 7b 50 48 52 41 53 45 20 33 20 30 20 66 69    {PHRASE 3 0 fi
1140: 76 65 7d 20 5c 0a 20 20 5d 0a 64 6f 5f 74 65 73  ve} \.  ].do_tes
1150: 74 20 66 74 73 33 65 78 70 72 2d 31 2e 31 37 20  t fts3expr-1.17 
1160: 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78 70  {.  test_fts3exp
1170: 72 20 7b 28 6f 6e 65 20 41 4e 44 20 74 77 6f 29  r {(one AND two)
1180: 20 41 4e 44 20 28 28 74 68 72 65 65 20 41 4e 44   AND ((three AND
1190: 20 66 6f 75 72 29 20 41 4e 44 20 66 69 76 65 29   four) AND five)
11a0: 7d 0a 7d 20 5b 6c 69 73 74 20 41 4e 44 20 5c 0a  }.} [list AND \.
11b0: 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 41 4e          [list AN
11c0: 44 20 7b 50 48 52 41 53 45 20 33 20 30 20 6f 6e  D {PHRASE 3 0 on
11d0: 65 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 74  e} {PHRASE 3 0 t
11e0: 77 6f 7d 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b  wo}] \.        [
11f0: 6c 69 73 74 20 41 4e 44 20 5c 0a 20 20 20 20 20  list AND \.     
1200: 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 41           [list A
1210: 4e 44 20 7b 50 48 52 41 53 45 20 33 20 30 20 74  ND {PHRASE 3 0 t
1220: 68 72 65 65 7d 20 7b 50 48 52 41 53 45 20 33 20  hree} {PHRASE 3 
1230: 30 20 66 6f 75 72 7d 5d 20 5c 0a 20 20 20 20 20  0 four}] \.     
1240: 20 20 20 20 20 20 20 20 7b 50 48 52 41 53 45 20          {PHRASE 
1250: 33 20 30 20 66 69 76 65 7d 20 5c 0a 20 20 20 20  3 0 five} \.    
1260: 20 20 20 20 5d 20 5c 0a 20 20 5d 0a 64 6f 5f 74      ] \.  ].do_t
1270: 65 73 74 20 66 74 73 33 65 78 70 72 2d 31 2e 31  est fts3expr-1.1
1280: 38 20 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65  8 {.  test_fts3e
1290: 78 70 72 20 7b 28 6f 6e 65 20 41 4e 44 20 74 77  xpr {(one AND tw
12a0: 6f 29 20 4f 52 20 28 28 74 68 72 65 65 20 41 4e  o) OR ((three AN
12b0: 44 20 66 6f 75 72 29 20 41 4e 44 20 66 69 76 65  D four) AND five
12c0: 29 7d 0a 7d 20 5b 6c 69 73 74 20 4f 52 20 5c 0a  )}.} [list OR \.
12d0: 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 41 4e          [list AN
12e0: 44 20 7b 50 48 52 41 53 45 20 33 20 30 20 6f 6e  D {PHRASE 3 0 on
12f0: 65 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 74  e} {PHRASE 3 0 t
1300: 77 6f 7d 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b  wo}] \.        [
1310: 6c 69 73 74 20 41 4e 44 20 5c 0a 20 20 20 20 20  list AND \.     
1320: 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 41           [list A
1330: 4e 44 20 7b 50 48 52 41 53 45 20 33 20 30 20 74  ND {PHRASE 3 0 t
1340: 68 72 65 65 7d 20 7b 50 48 52 41 53 45 20 33 20  hree} {PHRASE 3 
1350: 30 20 66 6f 75 72 7d 5d 20 5c 0a 20 20 20 20 20  0 four}] \.     
1360: 20 20 20 20 20 20 20 20 7b 50 48 52 41 53 45 20          {PHRASE 
1370: 33 20 30 20 66 69 76 65 7d 20 5c 0a 20 20 20 20  3 0 five} \.    
1380: 20 20 20 20 5d 20 5c 0a 20 20 5d 0a 64 6f 5f 74      ] \.  ].do_t
1390: 65 73 74 20 66 74 73 33 65 78 70 72 2d 31 2e 31  est fts3expr-1.1
13a0: 39 20 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65  9 {.  test_fts3e
13b0: 78 70 72 20 7b 28 6f 6e 65 20 41 4e 44 20 74 77  xpr {(one AND tw
13c0: 6f 29 20 41 4e 44 20 28 28 74 68 72 65 65 20 41  o) AND ((three A
13d0: 4e 44 20 66 6f 75 72 29 20 4f 52 20 66 69 76 65  ND four) OR five
13e0: 29 7d 0a 7d 20 5b 6c 69 73 74 20 41 4e 44 20 5c  )}.} [list AND \
13f0: 0a 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 41  .        [list A
1400: 4e 44 20 7b 50 48 52 41 53 45 20 33 20 30 20 6f  ND {PHRASE 3 0 o
1410: 6e 65 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20  ne} {PHRASE 3 0 
1420: 74 77 6f 7d 5d 20 5c 0a 20 20 20 20 20 20 20 20  two}] \.        
1430: 5b 6c 69 73 74 20 4f 52 20 5c 0a 20 20 20 20 20  [list OR \.     
1440: 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 41           [list A
1450: 4e 44 20 7b 50 48 52 41 53 45 20 33 20 30 20 74  ND {PHRASE 3 0 t
1460: 68 72 65 65 7d 20 7b 50 48 52 41 53 45 20 33 20  hree} {PHRASE 3 
1470: 30 20 66 6f 75 72 7d 5d 20 5c 0a 20 20 20 20 20  0 four}] \.     
1480: 20 20 20 20 20 20 20 20 7b 50 48 52 41 53 45 20          {PHRASE 
1490: 33 20 30 20 66 69 76 65 7d 20 5c 0a 20 20 20 20  3 0 five} \.    
14a0: 20 20 20 20 5d 20 5c 0a 20 20 5d 0a 64 6f 5f 74      ] \.  ].do_t
14b0: 65 73 74 20 66 74 73 33 65 78 70 72 2d 31 2e 32  est fts3expr-1.2
14c0: 30 20 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65  0 {.  test_fts3e
14d0: 78 70 72 20 7b 28 6f 6e 65 20 4f 52 20 74 77 6f  xpr {(one OR two
14e0: 29 20 41 4e 44 20 28 28 74 68 72 65 65 20 4f 52  ) AND ((three OR
14f0: 20 66 6f 75 72 29 20 41 4e 44 20 66 69 76 65 29   four) AND five)
1500: 7d 0a 7d 20 5b 6c 69 73 74 20 41 4e 44 20 5c 0a  }.} [list AND \.
1510: 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 4f 52          [list OR
1520: 20 7b 50 48 52 41 53 45 20 33 20 30 20 6f 6e 65   {PHRASE 3 0 one
1530: 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 74 77  } {PHRASE 3 0 tw
1540: 6f 7d 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 6c  o}] \.        [l
1550: 69 73 74 20 41 4e 44 20 5c 0a 20 20 20 20 20 20  ist AND \.      
1560: 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 4f 52          [list OR
1570: 20 7b 50 48 52 41 53 45 20 33 20 30 20 74 68 72   {PHRASE 3 0 thr
1580: 65 65 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20  ee} {PHRASE 3 0 
1590: 66 6f 75 72 7d 5d 20 5c 0a 20 20 20 20 20 20 20  four}] \.       
15a0: 20 20 20 20 20 20 7b 50 48 52 41 53 45 20 33 20        {PHRASE 3 
15b0: 30 20 66 69 76 65 7d 20 5c 0a 20 20 20 20 20 20  0 five} \.      
15c0: 20 20 5d 20 5c 0a 20 20 5d 0a 64 6f 5f 74 65 73    ] \.  ].do_tes
15d0: 74 20 66 74 73 33 65 78 70 72 2d 31 2e 32 31 20  t fts3expr-1.21 
15e0: 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78 70  {.  test_fts3exp
15f0: 72 20 7b 28 6f 6e 65 20 4f 52 20 74 77 6f 29 20  r {(one OR two) 
1600: 41 4e 44 20 28 28 74 68 72 65 65 20 4e 4f 54 20  AND ((three NOT 
1610: 66 6f 75 72 29 20 41 4e 44 20 66 69 76 65 29 7d  four) AND five)}
1620: 0a 7d 20 5b 6c 69 73 74 20 41 4e 44 20 5c 0a 20  .} [list AND \. 
1630: 20 20 20 20 20 20 20 5b 6c 69 73 74 20 4f 52 20         [list OR 
1640: 7b 50 48 52 41 53 45 20 33 20 30 20 6f 6e 65 7d  {PHRASE 3 0 one}
1650: 20 7b 50 48 52 41 53 45 20 33 20 30 20 74 77 6f   {PHRASE 3 0 two
1660: 7d 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 6c 69  }] \.        [li
1670: 73 74 20 41 4e 44 20 5c 0a 20 20 20 20 20 20 20  st AND \.       
1680: 20 20 20 20 20 20 20 5b 6c 69 73 74 20 4e 4f 54         [list NOT
1690: 20 7b 50 48 52 41 53 45 20 33 20 30 20 74 68 72   {PHRASE 3 0 thr
16a0: 65 65 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20  ee} {PHRASE 3 0 
16b0: 66 6f 75 72 7d 5d 20 5c 0a 20 20 20 20 20 20 20  four}] \.       
16c0: 20 20 20 20 20 20 7b 50 48 52 41 53 45 20 33 20        {PHRASE 3 
16d0: 30 20 66 69 76 65 7d 20 5c 0a 20 20 20 20 20 20  0 five} \.      
16e0: 20 20 5d 20 5c 0a 20 20 5d 0a 64 6f 5f 74 65 73    ] \.  ].do_tes
16f0: 74 20 66 74 73 33 65 78 70 72 2d 31 2e 32 32 20  t fts3expr-1.22 
1700: 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78 70  {.  test_fts3exp
1710: 72 20 7b 28 6f 6e 65 20 4f 52 20 74 77 6f 29 20  r {(one OR two) 
1720: 4e 4f 54 20 28 28 74 68 72 65 65 20 4f 52 20 66  NOT ((three OR f
1730: 6f 75 72 29 20 41 4e 44 20 66 69 76 65 29 7d 0a  our) AND five)}.
1740: 7d 20 5b 6c 69 73 74 20 4e 4f 54 20 5c 0a 20 20  } [list NOT \.  
1750: 20 20 20 20 20 20 5b 6c 69 73 74 20 4f 52 20 7b        [list OR {
1760: 50 48 52 41 53 45 20 33 20 30 20 6f 6e 65 7d 20  PHRASE 3 0 one} 
1770: 7b 50 48 52 41 53 45 20 33 20 30 20 74 77 6f 7d  {PHRASE 3 0 two}
1780: 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 6c 69 73  ] \.        [lis
1790: 74 20 41 4e 44 20 5c 0a 20 20 20 20 20 20 20 20  t AND \.        
17a0: 20 20 20 20 20 20 5b 6c 69 73 74 20 4f 52 20 7b        [list OR {
17b0: 50 48 52 41 53 45 20 33 20 30 20 74 68 72 65 65  PHRASE 3 0 three
17c0: 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 66 6f  } {PHRASE 3 0 fo
17d0: 75 72 7d 5d 20 5c 0a 20 20 20 20 20 20 20 20 20  ur}] \.         
17e0: 20 20 20 20 7b 50 48 52 41 53 45 20 33 20 30 20      {PHRASE 3 0 
17f0: 66 69 76 65 7d 20 5c 0a 20 20 20 20 20 20 20 20  five} \.        
1800: 5d 20 5c 0a 20 20 5d 0a 64 6f 5f 74 65 73 74 20  ] \.  ].do_test 
1810: 66 74 73 33 65 78 70 72 2d 31 2e 32 33 20 7b 0a  fts3expr-1.23 {.
1820: 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 20    test_fts3expr 
1830: 7b 28 28 28 28 28 6f 6e 65 20 4f 52 20 74 77 6f  {(((((one OR two
1840: 29 29 29 29 29 20 4e 4f 54 20 28 28 28 28 28 74  ))))) NOT (((((t
1850: 68 72 65 65 20 4f 52 20 66 6f 75 72 29 29 29 20  hree OR four))) 
1860: 41 4e 44 20 66 69 76 65 29 29 7d 0a 7d 20 5b 6c  AND five))}.} [l
1870: 69 73 74 20 4e 4f 54 20 5c 0a 20 20 20 20 20 20  ist NOT \.      
1880: 20 20 5b 6c 69 73 74 20 4f 52 20 7b 50 48 52 41    [list OR {PHRA
1890: 53 45 20 33 20 30 20 6f 6e 65 7d 20 7b 50 48 52  SE 3 0 one} {PHR
18a0: 41 53 45 20 33 20 30 20 74 77 6f 7d 5d 20 5c 0a  ASE 3 0 two}] \.
18b0: 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 41 4e          [list AN
18c0: 44 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  D \.            
18d0: 20 20 5b 6c 69 73 74 20 4f 52 20 7b 50 48 52 41    [list OR {PHRA
18e0: 53 45 20 33 20 30 20 74 68 72 65 65 7d 20 7b 50  SE 3 0 three} {P
18f0: 48 52 41 53 45 20 33 20 30 20 66 6f 75 72 7d 5d  HRASE 3 0 four}]
1900: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
1910: 7b 50 48 52 41 53 45 20 33 20 30 20 66 69 76 65  {PHRASE 3 0 five
1920: 7d 20 5c 0a 20 20 20 20 20 20 20 20 5d 20 5c 0a  } \.        ] \.
1930: 20 20 5d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33    ].do_test fts3
1940: 65 78 70 72 2d 31 2e 32 34 20 7b 0a 20 20 74 65  expr-1.24 {.  te
1950: 73 74 5f 66 74 73 33 65 78 70 72 20 7b 6f 6e 65  st_fts3expr {one
1960: 20 4e 45 41 52 20 74 77 6f 7d 0a 7d 20 5b 6c 69   NEAR two}.} [li
1970: 73 74 20 4e 45 41 52 2f 31 30 20 7b 50 48 52 41  st NEAR/10 {PHRA
1980: 53 45 20 33 20 30 20 6f 6e 65 7d 20 7b 50 48 52  SE 3 0 one} {PHR
1990: 41 53 45 20 33 20 30 20 74 77 6f 7d 5d 0a 64 6f  ASE 3 0 two}].do
19a0: 5f 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 31  _test fts3expr-1
19b0: 2e 32 35 20 7b 0a 20 20 74 65 73 74 5f 66 74 73  .25 {.  test_fts
19c0: 33 65 78 70 72 20 7b 28 6f 6e 65 20 4e 45 41 52  3expr {(one NEAR
19d0: 20 74 77 6f 29 7d 0a 7d 20 5b 6c 69 73 74 20 4e   two)}.} [list N
19e0: 45 41 52 2f 31 30 20 7b 50 48 52 41 53 45 20 33  EAR/10 {PHRASE 3
19f0: 20 30 20 6f 6e 65 7d 20 7b 50 48 52 41 53 45 20   0 one} {PHRASE 
1a00: 33 20 30 20 74 77 6f 7d 5d 0a 64 6f 5f 74 65 73  3 0 two}].do_tes
1a10: 74 20 66 74 73 33 65 78 70 72 2d 31 2e 32 36 20  t fts3expr-1.26 
1a20: 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78 70  {.  test_fts3exp
1a30: 72 20 7b 28 28 28 28 28 28 6f 6e 65 20 4e 45 41  r {((((((one NEA
1a40: 52 20 74 77 6f 29 29 29 29 29 29 7d 0a 7d 20 5b  R two))))))}.} [
1a50: 6c 69 73 74 20 4e 45 41 52 2f 31 30 20 7b 50 48  list NEAR/10 {PH
1a60: 52 41 53 45 20 33 20 30 20 6f 6e 65 7d 20 7b 50  RASE 3 0 one} {P
1a70: 48 52 41 53 45 20 33 20 30 20 74 77 6f 7d 5d 0a  HRASE 3 0 two}].
1a80: 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70 72  do_test fts3expr
1a90: 2d 31 2e 32 37 20 7b 0a 20 20 74 65 73 74 5f 66  -1.27 {.  test_f
1aa0: 74 73 33 65 78 70 72 20 7b 28 6f 6e 65 20 4e 45  ts3expr {(one NE
1ab0: 41 52 20 74 77 6f 29 20 4f 52 20 28 28 74 68 72  AR two) OR ((thr
1ac0: 65 65 20 4f 52 20 66 6f 75 72 29 20 41 4e 44 20  ee OR four) AND 
1ad0: 66 69 76 65 29 7d 0a 7d 20 5b 6c 69 73 74 20 4f  five)}.} [list O
1ae0: 52 20 5c 0a 20 20 20 20 20 20 20 20 5b 6c 69 73  R \.        [lis
1af0: 74 20 4e 45 41 52 2f 31 30 20 7b 50 48 52 41 53  t NEAR/10 {PHRAS
1b00: 45 20 33 20 30 20 6f 6e 65 7d 20 7b 50 48 52 41  E 3 0 one} {PHRA
1b10: 53 45 20 33 20 30 20 74 77 6f 7d 5d 20 5c 0a 20  SE 3 0 two}] \. 
1b20: 20 20 20 20 20 20 20 5b 6c 69 73 74 20 41 4e 44         [list AND
1b30: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
1b40: 20 5b 6c 69 73 74 20 4f 52 20 7b 50 48 52 41 53   [list OR {PHRAS
1b50: 45 20 33 20 30 20 74 68 72 65 65 7d 20 7b 50 48  E 3 0 three} {PH
1b60: 52 41 53 45 20 33 20 30 20 66 6f 75 72 7d 5d 20  RASE 3 0 four}] 
1b70: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  \.             {
1b80: 50 48 52 41 53 45 20 33 20 30 20 66 69 76 65 7d  PHRASE 3 0 five}
1b90: 20 5c 0a 20 20 20 20 20 20 20 20 5d 20 5c 0a 20   \.        ] \. 
1ba0: 20 5d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65   ].do_test fts3e
1bb0: 78 70 72 2d 31 2e 32 38 20 7b 0a 20 20 74 65 73  xpr-1.28 {.  tes
1bc0: 74 5f 66 74 73 33 65 78 70 72 20 7b 28 6f 6e 65  t_fts3expr {(one
1bd0: 20 4e 45 41 52 2f 33 32 31 20 74 77 6f 29 20 4f   NEAR/321 two) O
1be0: 52 20 28 28 74 68 72 65 65 20 4f 52 20 66 6f 75  R ((three OR fou
1bf0: 72 29 20 41 4e 44 20 66 69 76 65 29 7d 0a 7d 20  r) AND five)}.} 
1c00: 5b 6c 69 73 74 20 4f 52 20 5c 0a 20 20 20 20 20  [list OR \.     
1c10: 20 20 20 5b 6c 69 73 74 20 4e 45 41 52 2f 33 32     [list NEAR/32
1c20: 31 20 7b 50 48 52 41 53 45 20 33 20 30 20 6f 6e  1 {PHRASE 3 0 on
1c30: 65 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 74  e} {PHRASE 3 0 t
1c40: 77 6f 7d 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b  wo}] \.        [
1c50: 6c 69 73 74 20 41 4e 44 20 5c 0a 20 20 20 20 20  list AND \.     
1c60: 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 4f           [list O
1c70: 52 20 7b 50 48 52 41 53 45 20 33 20 30 20 74 68  R {PHRASE 3 0 th
1c80: 72 65 65 7d 20 7b 50 48 52 41 53 45 20 33 20 30  ree} {PHRASE 3 0
1c90: 20 66 6f 75 72 7d 5d 20 5c 0a 20 20 20 20 20 20   four}] \.      
1ca0: 20 20 20 20 20 20 20 7b 50 48 52 41 53 45 20 33         {PHRASE 3
1cb0: 20 30 20 66 69 76 65 7d 20 5c 0a 20 20 20 20 20   0 five} \.     
1cc0: 20 20 20 5d 20 5c 0a 20 20 5d 0a 0a 70 72 6f 63     ] \.  ]..proc
1cd0: 20 73 74 72 69 70 5f 70 68 72 61 73 65 5f 64 61   strip_phrase_da
1ce0: 74 61 20 7b 4c 7d 20 7b 0a 20 20 69 66 20 7b 5b  ta {L} {.  if {[
1cf0: 6c 69 6e 64 65 78 20 24 4c 20 30 5d 20 65 71 20  lindex $L 0] eq 
1d00: 22 50 48 52 41 53 45 22 7d 20 7b 0a 20 20 20 20  "PHRASE"} {.    
1d10: 72 65 74 75 72 6e 20 5b 6c 72 61 6e 67 65 20 24  return [lrange $
1d20: 4c 20 33 20 65 6e 64 5d 0a 20 20 7d 0a 20 20 72  L 3 end].  }.  r
1d30: 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c 0a 20 20  eturn [list \.  
1d40: 20 20 5b 6c 69 6e 64 65 78 20 24 4c 20 30 5d 20    [lindex $L 0] 
1d50: 5c 0a 20 20 20 20 5b 73 74 72 69 70 5f 70 68 72  \.    [strip_phr
1d60: 61 73 65 5f 64 61 74 61 20 5b 6c 69 6e 64 65 78  ase_data [lindex
1d70: 20 24 4c 20 31 5d 5d 20 5c 0a 20 20 20 20 5b 73   $L 1]] \.    [s
1d80: 74 72 69 70 5f 70 68 72 61 73 65 5f 64 61 74 61  trip_phrase_data
1d90: 20 5b 6c 69 6e 64 65 78 20 24 4c 20 32 5d 5d 20   [lindex $L 2]] 
1da0: 5c 0a 20 20 5d 0a 7d 0a 70 72 6f 63 20 74 65 73  \.  ].}.proc tes
1db0: 74 5f 66 74 73 33 65 78 70 72 32 20 7b 65 78 70  t_fts3expr2 {exp
1dc0: 72 7d 20 7b 0a 20 20 73 74 72 69 70 5f 70 68 72  r} {.  strip_phr
1dd0: 61 73 65 5f 64 61 74 61 20 5b 0a 20 20 20 20 64  ase_data [.    d
1de0: 62 20 6f 6e 65 20 7b 53 45 4c 45 43 54 20 66 74  b one {SELECT ft
1df0: 73 33 5f 65 78 70 72 74 65 73 74 28 27 73 69 6d  s3_exprtest('sim
1e00: 70 6c 65 27 2c 20 24 65 78 70 72 2c 20 27 61 27  ple', $expr, 'a'
1e10: 2c 20 27 62 27 2c 20 27 63 27 29 7d 0a 20 20 5d  , 'b', 'c')}.  ]
1e20: 0a 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65  .}.do_test fts3e
1e30: 78 70 72 2d 32 2e 31 20 7b 0a 20 20 74 65 73 74  xpr-2.1 {.  test
1e40: 5f 66 74 73 33 65 78 70 72 32 20 22 61 62 20 4f  _fts3expr2 "ab O
1e50: 52 20 63 64 20 41 4e 44 20 65 66 22 0a 7d 20 7b  R cd AND ef".} {
1e60: 4f 52 20 61 62 20 7b 41 4e 44 20 63 64 20 65 66  OR ab {AND cd ef
1e70: 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65  }}.do_test fts3e
1e80: 78 70 72 2d 32 2e 32 20 7b 0a 20 20 74 65 73 74  xpr-2.2 {.  test
1e90: 5f 66 74 73 33 65 78 70 72 32 20 22 63 64 20 41  _fts3expr2 "cd A
1ea0: 4e 44 20 65 66 20 4f 52 20 61 62 22 0a 7d 20 7b  ND ef OR ab".} {
1eb0: 4f 52 20 7b 41 4e 44 20 63 64 20 65 66 7d 20 61  OR {AND cd ef} a
1ec0: 62 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65  b}.do_test fts3e
1ed0: 78 70 72 2d 32 2e 33 20 7b 0a 20 20 74 65 73 74  xpr-2.3 {.  test
1ee0: 5f 66 74 73 33 65 78 70 72 32 20 22 61 62 20 41  _fts3expr2 "ab A
1ef0: 4e 44 20 63 64 20 41 4e 44 20 65 66 20 4f 52 20  ND cd AND ef OR 
1f00: 67 68 22 0a 7d 20 7b 4f 52 20 7b 41 4e 44 20 7b  gh".} {OR {AND {
1f10: 41 4e 44 20 61 62 20 63 64 7d 20 65 66 7d 20 67  AND ab cd} ef} g
1f20: 68 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65  h}.do_test fts3e
1f30: 78 70 72 2d 32 2e 34 20 7b 0a 20 20 74 65 73 74  xpr-2.4 {.  test
1f40: 5f 66 74 73 33 65 78 70 72 32 20 22 61 62 20 41  _fts3expr2 "ab A
1f50: 4e 44 20 63 64 20 4f 52 20 65 66 20 41 4e 44 20  ND cd OR ef AND 
1f60: 67 68 22 0a 7d 20 7b 4f 52 20 7b 41 4e 44 20 61  gh".} {OR {AND a
1f70: 62 20 63 64 7d 20 7b 41 4e 44 20 65 66 20 67 68  b cd} {AND ef gh
1f80: 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65  }}.do_test fts3e
1f90: 78 70 72 2d 32 2e 35 20 7b 0a 20 20 74 65 73 74  xpr-2.5 {.  test
1fa0: 5f 66 74 73 33 65 78 70 72 32 20 22 61 62 20 63  _fts3expr2 "ab c
1fb0: 64 22 0a 7d 20 7b 41 4e 44 20 61 62 20 63 64 7d  d".} {AND ab cd}
1fc0: 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78  ..do_test fts3ex
1fd0: 70 72 2d 33 2e 31 20 7b 0a 20 20 74 65 73 74 5f  pr-3.1 {.  test_
1fe0: 66 74 73 33 65 78 70 72 32 20 22 28 61 62 20 4f  fts3expr2 "(ab O
1ff0: 52 20 63 64 29 20 41 4e 44 20 65 66 22 0a 7d 20  R cd) AND ef".} 
2000: 7b 41 4e 44 20 7b 4f 52 20 61 62 20 63 64 7d 20  {AND {OR ab cd} 
2010: 65 66 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33  ef}.do_test fts3
2020: 65 78 70 72 2d 33 2e 32 20 7b 0a 20 20 74 65 73  expr-3.2 {.  tes
2030: 74 5f 66 74 73 33 65 78 70 72 32 20 22 65 66 20  t_fts3expr2 "ef 
2040: 41 4e 44 20 28 61 62 20 4f 52 20 63 64 29 22 0a  AND (ab OR cd)".
2050: 7d 20 7b 41 4e 44 20 65 66 20 7b 4f 52 20 61 62  } {AND ef {OR ab
2060: 20 63 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74   cd}}.do_test ft
2070: 73 33 65 78 70 72 2d 33 2e 33 20 7b 0a 20 20 74  s3expr-3.3 {.  t
2080: 65 73 74 5f 66 74 73 33 65 78 70 72 32 20 22 28  est_fts3expr2 "(
2090: 61 62 20 4f 52 20 63 64 29 22 0a 7d 20 7b 4f 52  ab OR cd)".} {OR
20a0: 20 61 62 20 63 64 7d 0a 64 6f 5f 74 65 73 74 20   ab cd}.do_test 
20b0: 66 74 73 33 65 78 70 72 2d 33 2e 34 20 7b 0a 20  fts3expr-3.4 {. 
20c0: 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 32 20   test_fts3expr2 
20d0: 22 28 28 28 61 62 20 4f 52 20 63 64 29 29 29 22  "(((ab OR cd)))"
20e0: 0a 7d 20 7b 4f 52 20 61 62 20 63 64 7d 0a 0a 64  .} {OR ab cd}..d
20f0: 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70 72 2d  o_test fts3expr-
2100: 33 2e 35 20 7b 0a 20 20 74 65 73 74 5f 66 74 73  3.5 {.  test_fts
2110: 33 65 78 70 72 32 20 22 6f 6e 65 20 41 4e 44 20  3expr2 "one AND 
2120: 28 74 77 6f 20 4e 45 41 52 20 74 68 72 65 65 29  (two NEAR three)
2130: 22 0a 7d 20 7b 41 4e 44 20 6f 6e 65 20 7b 4e 45  ".} {AND one {NE
2140: 41 52 2f 31 30 20 74 77 6f 20 74 68 72 65 65 7d  AR/10 two three}
2150: 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78  }.do_test fts3ex
2160: 70 72 2d 33 2e 36 20 7b 0a 20 20 74 65 73 74 5f  pr-3.6 {.  test_
2170: 66 74 73 33 65 78 70 72 32 20 22 6f 6e 65 20 28  fts3expr2 "one (
2180: 74 77 6f 20 4e 45 41 52 20 74 68 72 65 65 29 22  two NEAR three)"
2190: 0a 7d 20 7b 41 4e 44 20 6f 6e 65 20 7b 4e 45 41  .} {AND one {NEA
21a0: 52 2f 31 30 20 74 77 6f 20 74 68 72 65 65 7d 7d  R/10 two three}}
21b0: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70  .do_test fts3exp
21c0: 72 2d 33 2e 37 20 7b 0a 20 20 74 65 73 74 5f 66  r-3.7 {.  test_f
21d0: 74 73 33 65 78 70 72 32 20 22 28 74 77 6f 20 4e  ts3expr2 "(two N
21e0: 45 41 52 20 74 68 72 65 65 29 20 6f 6e 65 22 0a  EAR three) one".
21f0: 7d 20 7b 41 4e 44 20 7b 4e 45 41 52 2f 31 30 20  } {AND {NEAR/10 
2200: 74 77 6f 20 74 68 72 65 65 7d 20 6f 6e 65 7d 0a  two three} one}.
2210: 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70 72  do_test fts3expr
2220: 2d 33 2e 38 20 7b 0a 20 20 74 65 73 74 5f 66 74  -3.8 {.  test_ft
2230: 73 33 65 78 70 72 32 20 22 28 74 77 6f 20 4e 45  s3expr2 "(two NE
2240: 41 52 20 74 68 72 65 65 29 20 41 4e 44 20 6f 6e  AR three) AND on
2250: 65 22 0a 7d 20 7b 41 4e 44 20 7b 4e 45 41 52 2f  e".} {AND {NEAR/
2260: 31 30 20 74 77 6f 20 74 68 72 65 65 7d 20 6f 6e  10 two three} on
2270: 65 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65  e}.do_test fts3e
2280: 78 70 72 2d 33 2e 39 20 7b 0a 20 20 74 65 73 74  xpr-3.9 {.  test
2290: 5f 66 74 73 33 65 78 70 72 32 20 22 28 74 77 6f  _fts3expr2 "(two
22a0: 20 4e 45 41 52 20 74 68 72 65 65 29 20 28 66 6f   NEAR three) (fo
22b0: 75 72 20 66 69 76 65 29 22 0a 7d 20 7b 41 4e 44  ur five)".} {AND
22c0: 20 7b 4e 45 41 52 2f 31 30 20 74 77 6f 20 74 68   {NEAR/10 two th
22d0: 72 65 65 7d 20 7b 41 4e 44 20 66 6f 75 72 20 66  ree} {AND four f
22e0: 69 76 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74  ive}}.do_test ft
22f0: 73 33 65 78 70 72 2d 33 2e 31 30 20 7b 0a 20 20  s3expr-3.10 {.  
2300: 74 65 73 74 5f 66 74 73 33 65 78 70 72 32 20 22  test_fts3expr2 "
2310: 28 74 77 6f 20 4e 45 41 52 20 74 68 72 65 65 29  (two NEAR three)
2320: 20 41 4e 44 20 28 66 6f 75 72 20 66 69 76 65 29   AND (four five)
2330: 22 0a 7d 20 7b 41 4e 44 20 7b 4e 45 41 52 2f 31  ".} {AND {NEAR/1
2340: 30 20 74 77 6f 20 74 68 72 65 65 7d 20 7b 41 4e  0 two three} {AN
2350: 44 20 66 6f 75 72 20 66 69 76 65 7d 7d 0a 64 6f  D four five}}.do
2360: 5f 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 33  _test fts3expr-3
2370: 2e 31 31 20 7b 0a 20 20 74 65 73 74 5f 66 74 73  .11 {.  test_fts
2380: 33 65 78 70 72 32 20 22 28 74 77 6f 20 4e 45 41  3expr2 "(two NEA
2390: 52 20 74 68 72 65 65 29 20 28 66 6f 75 72 20 4e  R three) (four N
23a0: 45 41 52 20 66 69 76 65 29 22 0a 7d 20 7b 41 4e  EAR five)".} {AN
23b0: 44 20 7b 4e 45 41 52 2f 31 30 20 74 77 6f 20 74  D {NEAR/10 two t
23c0: 68 72 65 65 7d 20 7b 4e 45 41 52 2f 31 30 20 66  hree} {NEAR/10 f
23d0: 6f 75 72 20 66 69 76 65 7d 7d 0a 64 6f 5f 74 65  our five}}.do_te
23e0: 73 74 20 66 74 73 33 65 78 70 72 2d 33 2e 31 32  st fts3expr-3.12
23f0: 20 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78   {.  test_fts3ex
2400: 70 72 32 20 22 28 74 77 6f 20 4e 45 41 52 20 74  pr2 "(two NEAR t
2410: 68 72 65 65 29 20 4f 52 20 28 66 6f 75 72 20 4e  hree) OR (four N
2420: 45 41 52 20 66 69 76 65 29 22 0a 7d 20 7b 4f 52  EAR five)".} {OR
2430: 20 7b 4e 45 41 52 2f 31 30 20 74 77 6f 20 74 68   {NEAR/10 two th
2440: 72 65 65 7d 20 7b 4e 45 41 52 2f 31 30 20 66 6f  ree} {NEAR/10 fo
2450: 75 72 20 66 69 76 65 7d 7d 0a 0a 64 6f 5f 74 65  ur five}}..do_te
2460: 73 74 20 66 74 73 33 65 78 70 72 2d 33 2e 31 33  st fts3expr-3.13
2470: 20 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78   {.  test_fts3ex
2480: 70 72 32 20 22 28 74 77 6f 20 4e 45 41 52 2f 31  pr2 "(two NEAR/1
2490: 61 20 74 68 72 65 65 29 22 0a 7d 20 7b 41 4e 44  a three)".} {AND
24a0: 20 7b 41 4e 44 20 7b 41 4e 44 20 74 77 6f 20 6e   {AND {AND two n
24b0: 65 61 72 7d 20 31 61 7d 20 74 68 72 65 65 7d 0a  ear} 1a} three}.
24c0: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70  .do_test fts3exp
24d0: 72 2d 33 2e 31 34 20 7b 0a 20 20 74 65 73 74 5f  r-3.14 {.  test_
24e0: 66 74 73 33 65 78 70 72 32 20 22 28 74 77 6f 20  fts3expr2 "(two 
24f0: 4e 45 41 52 2f 2f 20 74 68 72 65 65 29 22 0a 7d  NEAR// three)".}
2500: 20 7b 41 4e 44 20 7b 41 4e 44 20 74 77 6f 20 6e   {AND {AND two n
2510: 65 61 72 7d 20 74 68 72 65 65 7d 0a 64 6f 5f 74  ear} three}.do_t
2520: 65 73 74 20 66 74 73 33 65 78 70 72 2d 33 2e 31  est fts3expr-3.1
2530: 35 20 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65  5 {.  test_fts3e
2540: 78 70 72 32 20 22 28 74 77 6f 20 4e 45 41 52 2f  xpr2 "(two NEAR/
2550: 3a 20 74 68 72 65 65 29 22 0a 7d 20 7b 41 4e 44  : three)".} {AND
2560: 20 7b 41 4e 44 20 74 77 6f 20 6e 65 61 72 7d 20   {AND two near} 
2570: 74 68 72 65 65 7d 0a 0a 64 6f 5f 74 65 73 74 20  three}..do_test 
2580: 66 74 73 33 65 78 70 72 2d 33 2e 31 36 20 7b 0a  fts3expr-3.16 {.
2590: 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 32    test_fts3expr2
25a0: 20 22 28 74 77 6f 20 4e 45 41 52 20 74 68 72 65   "(two NEAR thre
25b0: 65 29 4f 52 28 66 6f 75 72 20 4e 45 41 52 20 66  e)OR(four NEAR f
25c0: 69 76 65 29 22 0a 7d 20 7b 4f 52 20 7b 4e 45 41  ive)".} {OR {NEA
25d0: 52 2f 31 30 20 74 77 6f 20 74 68 72 65 65 7d 20  R/10 two three} 
25e0: 7b 4e 45 41 52 2f 31 30 20 66 6f 75 72 20 66 69  {NEAR/10 four fi
25f0: 76 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73  ve}}.do_test fts
2600: 33 65 78 70 72 2d 33 2e 31 37 20 7b 0a 20 20 74  3expr-3.17 {.  t
2610: 65 73 74 5f 66 74 73 33 65 78 70 72 32 20 22 28  est_fts3expr2 "(
2620: 74 77 6f 20 4e 45 41 52 20 74 68 72 65 65 29 4f  two NEAR three)O
2630: 52 5c 22 66 6f 75 72 20 66 69 76 65 5c 22 22 0a  R\"four five\"".
2640: 7d 20 7b 4f 52 20 7b 4e 45 41 52 2f 31 30 20 74  } {OR {NEAR/10 t
2650: 77 6f 20 74 68 72 65 65 7d 20 7b 66 6f 75 72 20  wo three} {four 
2660: 66 69 76 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 66  five}}.do_test f
2670: 74 73 33 65 78 70 72 2d 33 2e 31 38 20 7b 0a 20  ts3expr-3.18 {. 
2680: 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 32 20   test_fts3expr2 
2690: 22 6f 6e 65 20 5c 75 30 30 38 30 77 6f 22 0a 7d  "one \u0080wo".}
26a0: 20 22 41 4e 44 20 6f 6e 65 20 5c 75 30 30 38 30   "AND one \u0080
26b0: 77 6f 22 0a 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  wo"....#--------
26c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2700: 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .# The following
2710: 20 74 65 73 74 73 2c 20 66 74 73 33 65 78 70 72   tests, fts3expr
2720: 2d 34 2e 2a 2c 20 74 65 73 74 20 74 68 65 20 70  -4.*, test the p
2730: 61 72 73 65 72 73 20 72 65 73 70 6f 6e 73 65 20  arsers response 
2740: 74 6f 20 73 79 6e 74 61 78 0a 23 20 65 72 72 6f  to syntax.# erro
2750: 72 73 20 69 6e 20 71 75 65 72 79 20 65 78 70 72  rs in query expr
2760: 65 73 73 69 6f 6e 73 2e 20 54 68 69 73 20 69 73  essions. This is
2770: 20 64 6f 6e 65 20 75 73 69 6e 67 20 61 20 72 65   done using a re
2780: 61 6c 20 66 74 73 33 20 74 61 62 6c 65 20 61 6e  al fts3 table an
2790: 64 0a 23 20 4d 41 54 43 48 20 63 6c 61 75 73 65  d.# MATCH clause
27a0: 73 2c 20 6e 6f 74 20 74 68 65 20 70 61 72 73 65  s, not the parse
27b0: 72 20 74 65 73 74 20 69 6e 74 65 72 66 61 63 65  r test interface
27c0: 2e 0a 23 20 0a 64 6f 5f 74 65 73 74 20 66 74 73  ..# .do_test fts
27d0: 33 65 78 70 72 2d 34 2e 31 20 7b 0a 20 20 65 78  3expr-4.1 {.  ex
27e0: 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 56  ecsql { CREATE V
27f0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31 20  IRTUAL TABLE t1 
2800: 55 53 49 4e 47 20 66 74 73 33 28 61 2c 20 62 2c  USING fts3(a, b,
2810: 20 63 29 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 4d 69   c) }.} {}..# Mi
2820: 73 6d 61 74 63 68 65 64 20 70 61 72 65 6e 74 68  smatched parenth
2830: 65 73 69 73 3a 0a 64 6f 5f 74 65 73 74 20 66 74  esis:.do_test ft
2840: 73 33 65 78 70 72 2d 34 2e 32 2e 31 20 7b 0a 20  s3expr-4.2.1 {. 
2850: 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c 45   catchsql { SELE
2860: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
2870: 52 45 20 74 31 20 4d 41 54 43 48 20 27 65 78 61  RE t1 MATCH 'exa
2880: 6d 70 6c 65 20 41 4e 44 20 28 68 65 6c 6c 6f 20  mple AND (hello 
2890: 4f 52 20 77 6f 72 6c 64 29 29 27 20 7d 0a 7d 20  OR world))' }.} 
28a0: 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 4d 41  {1 {malformed MA
28b0: 54 43 48 20 65 78 70 72 65 73 73 69 6f 6e 3a 20  TCH expression: 
28c0: 5b 65 78 61 6d 70 6c 65 20 41 4e 44 20 28 68 65  [example AND (he
28d0: 6c 6c 6f 20 4f 52 20 77 6f 72 6c 64 29 29 5d 7d  llo OR world))]}
28e0: 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78  }.do_test fts3ex
28f0: 70 72 2d 34 2e 32 2e 32 20 7b 0a 20 20 63 61 74  pr-4.2.2 {.  cat
2900: 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a  chsql { SELECT *
2910: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74   FROM t1 WHERE t
2920: 31 20 4d 41 54 43 48 20 27 65 78 61 6d 70 6c 65  1 MATCH 'example
2930: 20 41 4e 44 20 28 68 65 6c 6c 6f 20 4f 52 20 77   AND (hello OR w
2940: 6f 72 6c 64 27 20 7d 0a 7d 20 7b 31 20 7b 6d 61  orld' }.} {1 {ma
2950: 6c 66 6f 72 6d 65 64 20 4d 41 54 43 48 20 65 78  lformed MATCH ex
2960: 70 72 65 73 73 69 6f 6e 3a 20 5b 65 78 61 6d 70  pression: [examp
2970: 6c 65 20 41 4e 44 20 28 68 65 6c 6c 6f 20 4f 52  le AND (hello OR
2980: 20 77 6f 72 6c 64 5d 7d 7d 0a 64 6f 5f 74 65 73   world]}}.do_tes
2990: 74 20 66 74 73 33 65 78 70 72 2d 34 2e 32 2e 33  t fts3expr-4.2.3
29a0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20   {.  catchsql { 
29b0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
29c0: 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20   WHERE t1 MATCH 
29d0: 27 28 68 65 6c 6c 6f 27 20 7d 0a 7d 20 7b 31 20  '(hello' }.} {1 
29e0: 7b 6d 61 6c 66 6f 72 6d 65 64 20 4d 41 54 43 48  {malformed MATCH
29f0: 20 65 78 70 72 65 73 73 69 6f 6e 3a 20 5b 28 68   expression: [(h
2a00: 65 6c 6c 6f 5d 7d 7d 0a 64 6f 5f 74 65 73 74 20  ello]}}.do_test 
2a10: 66 74 73 33 65 78 70 72 2d 34 2e 32 2e 34 20 7b  fts3expr-4.2.4 {
2a20: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45  .  catchsql { SE
2a30: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
2a40: 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 28  HERE t1 MATCH '(
2a50: 27 20 7d 0a 7d 20 7b 31 20 7b 6d 61 6c 66 6f 72  ' }.} {1 {malfor
2a60: 6d 65 64 20 4d 41 54 43 48 20 65 78 70 72 65 73  med MATCH expres
2a70: 73 69 6f 6e 3a 20 5b 28 5d 7d 7d 0a 64 6f 5f 74  sion: [(]}}.do_t
2a80: 65 73 74 20 66 74 73 33 65 78 70 72 2d 34 2e 32  est fts3expr-4.2
2a90: 2e 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .5 {.  catchsql 
2aa0: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
2ab0: 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54 43  t1 WHERE t1 MATC
2ac0: 48 20 27 29 27 20 7d 0a 7d 20 7b 31 20 7b 6d 61  H ')' }.} {1 {ma
2ad0: 6c 66 6f 72 6d 65 64 20 4d 41 54 43 48 20 65 78  lformed MATCH ex
2ae0: 70 72 65 73 73 69 6f 6e 3a 20 5b 29 5d 7d 7d 0a  pression: [)]}}.
2af0: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70  .do_test fts3exp
2b00: 72 2d 34 2e 32 2e 36 20 7b 0a 20 20 63 61 74 63  r-4.2.6 {.  catc
2b10: 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20  hsql { SELECT * 
2b20: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31  FROM t1 WHERE t1
2b30: 20 4d 41 54 43 48 20 27 65 78 61 6d 70 6c 65 20   MATCH 'example 
2b40: 28 68 65 6c 6c 6f 20 77 6f 72 6c 64 27 20 7d 0a  (hello world' }.
2b50: 7d 20 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20  } {1 {malformed 
2b60: 4d 41 54 43 48 20 65 78 70 72 65 73 73 69 6f 6e  MATCH expression
2b70: 3a 20 5b 65 78 61 6d 70 6c 65 20 28 68 65 6c 6c  : [example (hell
2b80: 6f 20 77 6f 72 6c 64 5d 7d 7d 0a 0a 23 20 55 6e  o world]}}..# Un
2b90: 74 65 72 6d 69 6e 61 74 65 64 20 71 75 6f 74 61  terminated quota
2ba0: 74 69 6f 6e 20 6d 61 72 6b 73 3a 0a 64 6f 5f 74  tion marks:.do_t
2bb0: 65 73 74 20 66 74 73 33 65 78 70 72 2d 34 2e 33  est fts3expr-4.3
2bc0: 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .1 {.  catchsql 
2bd0: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
2be0: 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54 43  t1 WHERE t1 MATC
2bf0: 48 20 27 65 78 61 6d 70 6c 65 20 4f 52 20 22 68  H 'example OR "h
2c00: 65 6c 6c 6f 20 77 6f 72 6c 64 27 20 7d 0a 7d 20  ello world' }.} 
2c10: 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 4d 41  {1 {malformed MA
2c20: 54 43 48 20 65 78 70 72 65 73 73 69 6f 6e 3a 20  TCH expression: 
2c30: 5b 65 78 61 6d 70 6c 65 20 4f 52 20 22 68 65 6c  [example OR "hel
2c40: 6c 6f 20 77 6f 72 6c 64 5d 7d 7d 0a 64 6f 5f 74  lo world]}}.do_t
2c50: 65 73 74 20 66 74 73 33 65 78 70 72 2d 34 2e 33  est fts3expr-4.3
2c60: 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .2 {.  catchsql 
2c70: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
2c80: 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54 43  t1 WHERE t1 MATC
2c90: 48 20 27 65 78 61 6d 70 6c 65 20 4f 52 20 68 65  H 'example OR he
2ca0: 6c 6c 6f 20 77 6f 72 6c 64 22 27 20 7d 0a 7d 20  llo world"' }.} 
2cb0: 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 4d 41  {1 {malformed MA
2cc0: 54 43 48 20 65 78 70 72 65 73 73 69 6f 6e 3a 20  TCH expression: 
2cd0: 5b 65 78 61 6d 70 6c 65 20 4f 52 20 68 65 6c 6c  [example OR hell
2ce0: 6f 20 77 6f 72 6c 64 22 5d 7d 7d 0a 0a 23 20 42  o world"]}}..# B
2cf0: 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73 20  inary operators 
2d00: 77 69 74 68 6f 75 74 20 74 68 65 20 72 65 71 75  without the requ
2d10: 69 72 65 64 20 6f 70 65 72 61 6e 64 73 2e 0a 64  ired operands..d
2d20: 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70 72 2d  o_test fts3expr-
2d30: 34 2e 34 2e 31 20 7b 0a 20 20 63 61 74 63 68 73  4.4.1 {.  catchs
2d40: 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52  ql { SELECT * FR
2d50: 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20 4d  OM t1 WHERE t1 M
2d60: 41 54 43 48 20 27 4f 52 20 68 65 6c 6c 6f 20 77  ATCH 'OR hello w
2d70: 6f 72 6c 64 27 20 7d 0a 7d 20 7b 31 20 7b 6d 61  orld' }.} {1 {ma
2d80: 6c 66 6f 72 6d 65 64 20 4d 41 54 43 48 20 65 78  lformed MATCH ex
2d90: 70 72 65 73 73 69 6f 6e 3a 20 5b 4f 52 20 68 65  pression: [OR he
2da0: 6c 6c 6f 20 77 6f 72 6c 64 5d 7d 7d 0a 64 6f 5f  llo world]}}.do_
2db0: 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 34 2e  test fts3expr-4.
2dc0: 34 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  4.2 {.  catchsql
2dd0: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
2de0: 20 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54   t1 WHERE t1 MAT
2df0: 43 48 20 27 68 65 6c 6c 6f 20 77 6f 72 6c 64 20  CH 'hello world 
2e00: 4f 52 27 20 7d 0a 7d 20 7b 31 20 7b 6d 61 6c 66  OR' }.} {1 {malf
2e10: 6f 72 6d 65 64 20 4d 41 54 43 48 20 65 78 70 72  ormed MATCH expr
2e20: 65 73 73 69 6f 6e 3a 20 5b 68 65 6c 6c 6f 20 77  ession: [hello w
2e30: 6f 72 6c 64 20 4f 52 5d 7d 7d 0a 64 6f 5f 74 65  orld OR]}}.do_te
2e40: 73 74 20 66 74 73 33 65 78 70 72 2d 34 2e 34 2e  st fts3expr-4.4.
2e50: 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  3 {.  catchsql {
2e60: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2e70: 31 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48  1 WHERE t1 MATCH
2e80: 20 27 6f 6e 65 20 28 68 65 6c 6c 6f 20 77 6f 72   'one (hello wor
2e90: 6c 64 20 4f 52 29 20 74 77 6f 27 20 7d 0a 7d 20  ld OR) two' }.} 
2ea0: 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20 4d 41  {1 {malformed MA
2eb0: 54 43 48 20 65 78 70 72 65 73 73 69 6f 6e 3a 20  TCH expression: 
2ec0: 5b 6f 6e 65 20 28 68 65 6c 6c 6f 20 77 6f 72 6c  [one (hello worl
2ed0: 64 20 4f 52 29 20 74 77 6f 5d 7d 7d 0a 64 6f 5f  d OR) two]}}.do_
2ee0: 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 34 2e  test fts3expr-4.
2ef0: 34 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  4.4 {.  catchsql
2f00: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
2f10: 20 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54   t1 WHERE t1 MAT
2f20: 43 48 20 27 6f 6e 65 20 28 4f 52 20 68 65 6c 6c  CH 'one (OR hell
2f30: 6f 20 77 6f 72 6c 64 29 20 74 77 6f 27 20 7d 0a  o world) two' }.
2f40: 7d 20 7b 31 20 7b 6d 61 6c 66 6f 72 6d 65 64 20  } {1 {malformed 
2f50: 4d 41 54 43 48 20 65 78 70 72 65 73 73 69 6f 6e  MATCH expression
2f60: 3a 20 5b 6f 6e 65 20 28 4f 52 20 68 65 6c 6c 6f  : [one (OR hello
2f70: 20 77 6f 72 6c 64 29 20 74 77 6f 5d 7d 7d 0a 0a   world) two]}}..
2f80: 23 20 4e 45 41 52 20 6f 70 65 72 61 74 6f 72 73  # NEAR operators
2f90: 20 77 69 74 68 20 73 6f 6d 65 74 68 69 6e 67 20   with something 
2fa0: 6f 74 68 65 72 20 74 68 61 6e 20 70 68 72 61 73  other than phras
2fb0: 65 73 20 61 73 20 61 72 67 75 6d 65 6e 74 73 2e  es as arguments.
2fc0: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70  .do_test fts3exp
2fd0: 72 2d 34 2e 35 2e 31 20 7b 0a 20 20 63 61 74 63  r-4.5.1 {.  catc
2fe0: 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20  hsql { SELECT * 
2ff0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31  FROM t1 WHERE t1
3000: 20 4d 41 54 43 48 20 27 28 68 65 6c 6c 6f 20 4f   MATCH '(hello O
3010: 52 20 77 6f 72 6c 64 29 20 4e 45 41 52 20 6f 6e  R world) NEAR on
3020: 65 27 20 7d 0a 7d 20 7b 31 20 7b 6d 61 6c 66 6f  e' }.} {1 {malfo
3030: 72 6d 65 64 20 4d 41 54 43 48 20 65 78 70 72 65  rmed MATCH expre
3040: 73 73 69 6f 6e 3a 20 5b 28 68 65 6c 6c 6f 20 4f  ssion: [(hello O
3050: 52 20 77 6f 72 6c 64 29 20 4e 45 41 52 20 6f 6e  R world) NEAR on
3060: 65 5d 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73  e]}}.do_test fts
3070: 33 65 78 70 72 2d 34 2e 35 2e 32 20 7b 0a 20 20  3expr-4.5.2 {.  
3080: 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43  catchsql { SELEC
3090: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
30a0: 45 20 74 31 20 4d 41 54 43 48 20 27 6f 6e 65 20  E t1 MATCH 'one 
30b0: 4e 45 41 52 20 28 68 65 6c 6c 6f 20 4f 52 20 77  NEAR (hello OR w
30c0: 6f 72 6c 64 29 27 20 7d 0a 7d 20 7b 31 20 7b 6d  orld)' }.} {1 {m
30d0: 61 6c 66 6f 72 6d 65 64 20 4d 41 54 43 48 20 65  alformed MATCH e
30e0: 78 70 72 65 73 73 69 6f 6e 3a 20 5b 6f 6e 65 20  xpression: [one 
30f0: 4e 45 41 52 20 28 68 65 6c 6c 6f 20 4f 52 20 77  NEAR (hello OR w
3100: 6f 72 6c 64 29 5d 7d 7d 0a 0a 23 2d 2d 2d 2d 2d  orld)]}}..#-----
3110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3150: 2d 2d 2d 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77  ---.# The follow
3160: 69 6e 67 20 4f 4f 4d 20 74 65 73 74 73 20 61 72  ing OOM tests ar
3170: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 63 6f  e designed to co
3180: 76 65 72 20 63 61 73 65 73 20 69 6e 20 66 74 73  ver cases in fts
3190: 33 5f 65 78 70 72 2e 63 2e 0a 23 20 0a 73 6f 75  3_expr.c..# .sou
31a0: 72 63 65 20 24 74 65 73 74 64 69 72 2f 6d 61 6c  rce $testdir/mal
31b0: 6c 6f 63 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a 64  loc_common.tcl.d
31c0: 6f 5f 6d 61 6c 6c 6f 63 5f 74 65 73 74 20 66 74  o_malloc_test ft
31d0: 73 33 65 78 70 72 2d 6d 61 6c 6c 6f 63 2d 31 20  s3expr-malloc-1 
31e0: 2d 73 71 6c 62 6f 64 79 20 7b 0a 20 20 53 45 4c  -sqlbody {.  SEL
31f0: 45 43 54 20 66 74 73 33 5f 65 78 70 72 74 65 73  ECT fts3_exprtes
3200: 74 28 27 73 69 6d 70 6c 65 27 2c 20 27 61 20 62  t('simple', 'a b
3210: 20 63 20 22 64 20 65 20 66 22 27 2c 20 27 61 27   c "d e f"', 'a'
3220: 2c 20 27 62 27 2c 20 27 63 27 29 0a 7d 0a 64 6f  , 'b', 'c').}.do
3230: 5f 6d 61 6c 6c 6f 63 5f 74 65 73 74 20 66 74 73  _malloc_test fts
3240: 33 65 78 70 72 2d 6d 61 6c 6c 6f 63 2d 32 20 2d  3expr-malloc-2 -
3250: 74 63 6c 70 72 65 70 20 7b 0a 20 20 73 65 74 20  tclprep {.  set 
3260: 73 71 6c 69 74 65 5f 66 74 73 33 5f 65 6e 61 62  sqlite_fts3_enab
3270: 6c 65 5f 70 61 72 65 6e 74 68 65 73 65 73 20 30  le_parentheses 0
3280: 0a 7d 20 2d 73 71 6c 62 6f 64 79 20 7b 0a 20 20  .} -sqlbody {.  
3290: 53 45 4c 45 43 54 20 66 74 73 33 5f 65 78 70 72  SELECT fts3_expr
32a0: 74 65 73 74 28 27 73 69 6d 70 6c 65 27 2c 20 27  test('simple', '
32b0: 61 20 2d 62 27 2c 20 27 61 27 2c 20 27 62 27 2c  a -b', 'a', 'b',
32c0: 20 27 63 27 29 0a 7d 20 2d 63 6c 65 61 6e 75 70   'c').} -cleanup
32d0: 20 7b 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f   {.  set sqlite_
32e0: 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61 72 65  fts3_enable_pare
32f0: 6e 74 68 65 73 65 73 20 31 0a 7d 0a 0a 23 2d 2d  ntheses 1.}..#--
3300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3340: 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 20 66 6f 6c  ------.# The fol
3350: 6c 6f 77 69 6e 67 20 74 65 73 74 73 20 61 72 65  lowing tests are
3360: 20 6e 6f 74 20 76 65 72 79 20 69 6d 70 6f 72 74   not very import
3370: 61 6e 74 2e 20 54 68 65 79 20 63 6f 76 65 72 20  ant. They cover 
3380: 65 72 72 6f 72 20 68 61 6e 64 6c 69 6e 67 0a 23  error handling.#
3390: 20 63 61 73 65 73 20 69 6e 20 74 68 65 20 74 65   cases in the te
33a0: 73 74 20 63 6f 64 65 2c 20 77 68 69 63 68 20 6d  st code, which m
33b0: 61 6b 65 73 20 74 65 73 74 20 63 6f 76 65 72 61  akes test covera
33c0: 67 65 20 65 61 73 69 65 72 20 74 6f 20 6d 65 61  ge easier to mea
33d0: 73 75 72 65 2e 0a 23 20 0a 64 6f 5f 74 65 73 74  sure..# .do_test
33e0: 20 66 74 73 33 65 78 70 72 2d 35 2e 31 20 7b 0a   fts3expr-5.1 {.
33f0: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c    catchsql { SEL
3400: 45 43 54 20 66 74 73 33 5f 65 78 70 72 74 65 73  ECT fts3_exprtes
3410: 74 28 27 73 69 6d 70 6c 65 27 2c 20 27 61 20 62  t('simple', 'a b
3420: 27 29 20 7d 0a 7d 20 7b 31 20 7b 55 73 61 67 65  ') }.} {1 {Usage
3430: 3a 20 66 74 73 33 5f 65 78 70 72 74 65 73 74 28  : fts3_exprtest(
3440: 74 6f 6b 65 6e 69 7a 65 72 2c 20 65 78 70 72 2c  tokenizer, expr,
3450: 20 63 6f 6c 31 2c 20 2e 2e 2e 7d 7d 0a 64 6f 5f   col1, ...}}.do_
3460: 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 35 2e  test fts3expr-5.
3470: 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  2 {.  catchsql {
3480: 20 53 45 4c 45 43 54 20 66 74 73 33 5f 65 78 70   SELECT fts3_exp
3490: 72 74 65 73 74 28 27 64 6f 65 73 6e 6f 74 65 78  rtest('doesnotex
34a0: 69 73 74 27 2c 20 27 61 20 62 27 2c 20 27 63 27  ist', 'a b', 'c'
34b0: 29 20 7d 0a 7d 20 7b 31 20 7b 4e 6f 20 73 75 63  ) }.} {1 {No suc
34c0: 68 20 74 6f 6b 65 6e 69 7a 65 72 20 6d 6f 64 75  h tokenizer modu
34d0: 6c 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73  le}}.do_test fts
34e0: 33 65 78 70 72 2d 35 2e 33 20 7b 0a 20 20 63 61  3expr-5.3 {.  ca
34f0: 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  tchsql { SELECT 
3500: 66 74 73 33 5f 65 78 70 72 74 65 73 74 28 27 73  fts3_exprtest('s
3510: 69 6d 70 6c 65 27 2c 20 27 61 20 62 20 4f 52 27  imple', 'a b OR'
3520: 2c 20 27 63 27 29 20 7d 0a 7d 20 7b 31 20 7b 45  , 'c') }.} {1 {E
3530: 72 72 6f 72 20 70 61 72 73 69 6e 67 20 65 78 70  rror parsing exp
3540: 72 65 73 73 69 6f 6e 7d 7d 0a 0a 23 2d 2d 2d 2d  ression}}..#----
3550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3590: 2d 2d 2d 2d 0a 23 20 54 68 65 20 6e 65 78 74 20  ----.# The next 
35a0: 73 65 74 20 6f 66 20 74 65 73 74 73 20 76 65 72  set of tests ver
35b0: 69 66 69 65 73 20 74 68 61 74 20 74 68 69 6e 67  ifies that thing
35c0: 73 20 61 63 74 75 61 6c 6c 79 20 77 6f 72 6b 20  s actually work 
35d0: 61 73 20 74 68 65 79 20 61 72 65 0a 23 20 73 75  as they are.# su
35e0: 70 70 6f 73 65 64 20 74 6f 20 77 68 65 6e 20 75  pposed to when u
35f0: 73 69 6e 67 20 74 68 65 20 6e 65 77 20 73 79 6e  sing the new syn
3600: 74 61 78 2e 0a 23 20 0a 64 6f 5f 74 65 73 74 20  tax..# .do_test 
3610: 66 74 73 33 65 78 70 72 2d 36 2e 31 20 7b 0a 20  fts3expr-6.1 {. 
3620: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
3630: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
3640: 42 4c 45 20 74 31 20 55 53 49 4e 47 20 66 74 73  BLE t1 USING fts
3650: 33 28 61 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 20  3(a);.  }.  for 
3660: 7b 73 65 74 20 69 69 20 31 7d 20 7b 24 69 69 20  {set ii 1} {$ii 
3670: 3c 20 33 32 7d 20 7b 69 6e 63 72 20 69 69 7d 20  < 32} {incr ii} 
3680: 7b 0a 20 20 20 20 73 65 74 20 76 20 5b 6c 69 73  {.    set v [lis
3690: 74 5d 0a 20 20 20 20 69 66 20 7b 24 69 69 20 26  t].    if {$ii &
36a0: 20 31 7d 20 20 7b 20 6c 61 70 70 65 6e 64 20 76   1}  { lappend v
36b0: 20 6f 6e 65 20 7d 0a 20 20 20 20 69 66 20 7b 24   one }.    if {$
36c0: 69 69 20 26 20 32 7d 20 20 7b 20 6c 61 70 70 65  ii & 2}  { lappe
36d0: 6e 64 20 76 20 74 77 6f 20 7d 0a 20 20 20 20 69  nd v two }.    i
36e0: 66 20 7b 24 69 69 20 26 20 34 7d 20 20 7b 20 6c  f {$ii & 4}  { l
36f0: 61 70 70 65 6e 64 20 76 20 74 68 72 65 65 20 7d  append v three }
3700: 0a 20 20 20 20 69 66 20 7b 24 69 69 20 26 20 38  .    if {$ii & 8
3710: 7d 20 20 7b 20 6c 61 70 70 65 6e 64 20 76 20 66  }  { lappend v f
3720: 6f 75 72 20 7d 0a 20 20 20 20 69 66 20 7b 24 69  our }.    if {$i
3730: 69 20 26 20 31 36 7d 20 7b 20 6c 61 70 70 65 6e  i & 16} { lappen
3740: 64 20 76 20 66 69 76 65 20 7d 0a 20 20 20 20 65  d v five }.    e
3750: 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20  xecsql { INSERT 
3760: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 24  INTO t1 VALUES($
3770: 76 29 20 7d 0a 20 20 7d 0a 0a 20 20 65 78 65 63  v) }.  }..  exec
3780: 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69  sql {SELECT rowi
3790: 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  d FROM t1 WHERE 
37a0: 74 31 20 4d 41 54 43 48 20 27 66 69 76 65 20 66  t1 MATCH 'five f
37b0: 6f 75 72 20 6f 6e 65 27 20 4f 52 44 45 52 20 42  our one' ORDER B
37c0: 59 20 72 6f 77 69 64 7d 0a 7d 20 7b 32 35 20 32  Y rowid}.} {25 2
37d0: 37 20 32 39 20 33 31 7d 0a 0a 66 6f 72 65 61 63  7 29 31}..foreac
37e0: 68 20 7b 69 64 20 65 78 70 72 20 72 65 73 7d 20  h {id expr res} 
37f0: 7b 0a 0a 20 20 32 20 22 66 69 76 65 20 66 6f 75  {..  2 "five fou
3800: 72 20 4e 4f 54 20 6f 6e 65 22 20 7b 32 34 20 32  r NOT one" {24 2
3810: 36 20 32 38 20 33 30 7d 0a 0a 20 20 33 20 22 66  6 28 30}..  3 "f
3820: 69 76 65 20 41 4e 44 20 66 6f 75 72 20 4f 52 20  ive AND four OR 
3830: 6f 6e 65 22 20 0a 20 20 20 20 20 20 7b 31 20 33  one" .      {1 3
3840: 20 35 20 37 20 39 20 31 31 20 31 33 20 31 35 20   5 7 9 11 13 15 
3850: 31 37 20 31 39 20 32 31 20 32 33 20 32 34 20 32  17 19 21 23 24 2
3860: 35 20 32 36 20 32 37 20 32 38 20 32 39 20 33 30  5 26 27 28 29 30
3870: 20 33 31 7d 0a 0a 20 20 34 20 22 66 69 76 65 20   31}..  4 "five 
3880: 41 4e 44 20 28 66 6f 75 72 20 4f 52 20 6f 6e 65  AND (four OR one
3890: 29 22 20 7b 31 37 20 31 39 20 32 31 20 32 33 20  )" {17 19 21 23 
38a0: 32 34 20 32 35 20 32 36 20 32 37 20 32 38 20 32  24 25 26 27 28 2
38b0: 39 20 33 30 20 33 31 7d 0a 0a 20 20 35 20 22 66  9 30 31}..  5 "f
38c0: 69 76 65 20 4e 4f 54 20 28 66 6f 75 72 20 4f 52  ive NOT (four OR
38d0: 20 6f 6e 65 29 22 20 7b 31 36 20 31 38 20 32 30   one)" {16 18 20
38e0: 20 32 32 7d 0a 0a 20 20 36 20 22 28 66 69 76 65   22}..  6 "(five
38f0: 20 4e 4f 54 20 28 66 6f 75 72 20 4f 52 20 6f 6e   NOT (four OR on
3900: 65 29 29 20 4f 52 20 28 66 69 76 65 20 41 4e 44  e)) OR (five AND
3910: 20 28 66 6f 75 72 20 4f 52 20 6f 6e 65 29 29 22   (four OR one))"
3920: 0a 20 20 20 20 20 20 7b 31 36 20 31 37 20 31 38  .      {16 17 18
3930: 20 31 39 20 32 30 20 32 31 20 32 32 20 32 33 20   19 20 21 22 23 
3940: 32 34 20 32 35 20 32 36 20 32 37 20 32 38 20 32  24 25 26 27 28 2
3950: 39 20 33 30 20 33 31 7d 0a 0a 20 20 37 20 22 28  9 30 31}..  7 "(
3960: 66 69 76 65 20 4f 52 20 6f 6e 65 29 20 41 4e 44  five OR one) AND
3970: 20 74 77 6f 20 41 4e 44 20 74 68 72 65 65 22 20   two AND three" 
3980: 7b 37 20 31 35 20 32 32 20 32 33 20 33 30 20 33  {7 15 22 23 30 3
3990: 31 7d 0a 0a 20 20 38 20 22 66 69 76 65 20 4f 52  1}..  8 "five OR
39a0: 20 6f 6e 65 20 41 4e 44 20 74 77 6f 20 41 4e 44   one AND two AND
39b0: 20 74 68 72 65 65 22 20 0a 20 20 20 20 7b 37 20   three" .    {7 
39c0: 31 35 20 31 36 20 31 37 20 31 38 20 31 39 20 32  15 16 17 18 19 2
39d0: 30 20 32 31 20 32 32 20 32 33 20 32 34 20 32 35  0 21 22 23 24 25
39e0: 20 32 36 20 32 37 20 32 38 20 32 39 20 33 30 20   26 27 28 29 30 
39f0: 33 31 7d 0a 0a 20 20 39 20 22 66 69 76 65 20 4f  31}..  9 "five O
3a00: 52 20 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 22  R one two three"
3a10: 20 0a 20 20 20 20 7b 37 20 31 35 20 31 36 20 31   .    {7 15 16 1
3a20: 37 20 31 38 20 31 39 20 32 30 20 32 31 20 32 32  7 18 19 20 21 22
3a30: 20 32 33 20 32 34 20 32 35 20 32 36 20 32 37 20   23 24 25 26 27 
3a40: 32 38 20 32 39 20 33 30 20 33 31 7d 0a 0a 20 20  28 29 30 31}..  
3a50: 31 30 20 22 66 69 76 65 20 4f 52 20 5c 22 6f 6e  10 "five OR \"on
3a60: 65 20 74 77 6f 20 74 68 72 65 65 5c 22 22 20 0a  e two three\"" .
3a70: 20 20 20 20 7b 37 20 31 35 20 31 36 20 31 37 20      {7 15 16 17 
3a80: 31 38 20 31 39 20 32 30 20 32 31 20 32 32 20 32  18 19 20 21 22 2
3a90: 33 20 32 34 20 32 35 20 32 36 20 32 37 20 32 38  3 24 25 26 27 28
3aa0: 20 32 39 20 33 30 20 33 31 7d 0a 0a 20 20 31 31   29 30 31}..  11
3ab0: 20 22 6f 6e 65 20 74 77 6f 20 4f 52 20 66 6f 75   "one two OR fou
3ac0: 72 20 66 69 76 65 20 4e 4f 54 20 74 68 72 65 65  r five NOT three
3ad0: 22 20 7b 33 20 37 20 31 31 20 31 35 20 31 39 20  " {3 7 11 15 19 
3ae0: 32 33 20 32 34 20 32 35 20 32 36 20 32 37 20 33  23 24 25 26 27 3
3af0: 31 7d 0a 0a 20 20 31 32 20 22 28 6f 6e 65 20 74  1}..  12 "(one t
3b00: 77 6f 20 4f 52 20 66 6f 75 72 20 66 69 76 65 29  wo OR four five)
3b10: 20 4e 4f 54 20 74 68 72 65 65 22 20 7b 33 20 31   NOT three" {3 1
3b20: 31 20 31 39 20 32 34 20 32 35 20 32 36 20 32 37  1 19 24 25 26 27
3b30: 7d 0a 0a 20 20 31 33 20 22 28 28 28 28 28 28 6f  }..  13 "((((((o
3b40: 6e 65 20 74 77 6f 20 4f 52 20 66 6f 75 72 20 66  ne two OR four f
3b50: 69 76 65 29 29 29 29 29 29 20 4e 4f 54 20 74 68  ive)))))) NOT th
3b60: 72 65 65 22 20 7b 33 20 31 31 20 31 39 20 32 34  ree" {3 11 19 24
3b70: 20 32 35 20 32 36 20 32 37 7d 0a 0a 7d 20 7b 0a   25 26 27}..} {.
3b80: 20 20 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78    do_test fts3ex
3b90: 70 72 2d 36 2e 31 2e 24 69 64 20 7b 0a 20 20 20  pr-6.1.$id {.   
3ba0: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
3bb0: 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 20  T rowid FROM t1 
3bc0: 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 24  WHERE t1 MATCH $
3bd0: 65 78 70 72 20 4f 52 44 45 52 20 42 59 20 72 6f  expr ORDER BY ro
3be0: 77 69 64 20 7d 0a 20 20 7d 20 24 72 65 73 0a 7d  wid }.  } $res.}
3bf0: 0a 0a 73 65 74 20 73 71 6c 69 74 65 5f 66 74 73  ..set sqlite_fts
3c00: 33 5f 65 6e 61 62 6c 65 5f 70 61 72 65 6e 74 68  3_enable_parenth
3c10: 65 73 65 73 20 30 0a 66 6f 72 65 61 63 68 20 7b  eses 0.foreach {
3c20: 69 64 20 65 78 70 72 20 72 65 73 7d 20 7b 0a 20  id expr res} {. 
3c30: 20 31 20 22 6f 6e 65 20 2d 74 77 6f 20 74 68 72   1 "one -two thr
3c40: 65 65 22 20 20 7b 35 20 31 33 20 32 31 20 32 39  ee"  {5 13 21 29
3c50: 7d 0a 20 20 32 20 22 2d 74 77 6f 20 6f 6e 65 20  }.  2 "-two one 
3c60: 74 68 72 65 65 22 20 20 7b 35 20 31 33 20 32 31  three"  {5 13 21
3c70: 20 32 39 7d 0a 20 20 33 20 22 6f 6e 65 20 74 68   29}.  3 "one th
3c80: 72 65 65 20 2d 74 77 6f 22 20 20 7b 35 20 31 33  ree -two"  {5 13
3c90: 20 32 31 20 32 39 7d 0a 20 20 34 20 22 2d 6f 6e   21 29}.  4 "-on
3ca0: 65 20 2d 74 77 6f 20 74 68 72 65 65 22 20 7b 34  e -two three" {4
3cb0: 20 31 32 20 32 30 20 32 38 7d 0a 20 20 35 20 22   12 20 28}.  5 "
3cc0: 74 68 72 65 65 20 2d 6f 6e 65 20 2d 74 77 6f 22  three -one -two"
3cd0: 20 7b 34 20 31 32 20 32 30 20 32 38 7d 0a 20 20   {4 12 20 28}.  
3ce0: 36 20 22 2d 6f 6e 65 20 74 68 72 65 65 20 2d 74  6 "-one three -t
3cf0: 77 6f 22 20 7b 34 20 31 32 20 32 30 20 32 38 7d  wo" {4 12 20 28}
3d00: 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 66  .} {.  do_test f
3d10: 74 73 33 65 78 70 72 2d 36 2e 32 2e 24 69 64 20  ts3expr-6.2.$id 
3d20: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  {.    execsql { 
3d30: 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f  SELECT rowid FRO
3d40: 4d 20 74 31 20 57 48 45 52 45 20 74 31 20 4d 41  M t1 WHERE t1 MA
3d50: 54 43 48 20 24 65 78 70 72 20 4f 52 44 45 52 20  TCH $expr ORDER 
3d60: 42 59 20 72 6f 77 69 64 20 7d 0a 20 20 7d 20 24  BY rowid }.  } $
3d70: 72 65 73 0a 7d 0a 73 65 74 20 73 71 6c 69 74 65  res.}.set sqlite
3d80: 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61 72  _fts3_enable_par
3d90: 65 6e 74 68 65 73 65 73 20 31 0a 0a 64 6f 5f 74  entheses 1..do_t
3da0: 65 73 74 20 66 74 73 33 65 78 70 72 2d 37 2e 31  est fts3expr-7.1
3db0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3dc0: 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41     CREATE VIRTUA
3dd0: 4c 20 54 41 42 4c 45 20 74 65 73 74 20 55 53 49  L TABLE test USI
3de0: 4e 47 20 66 74 73 33 20 28 6b 65 79 77 6f 72 64  NG fts3 (keyword
3df0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
3e00: 54 4f 20 74 65 73 74 20 56 41 4c 55 45 53 20 28  TO test VALUES (
3e10: 27 61 62 63 27 29 3b 0a 20 20 20 20 53 45 4c 45  'abc');.    SELE
3e20: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 20 57  CT * FROM test W
3e30: 48 45 52 45 20 6b 65 79 77 6f 72 64 20 4d 41 54  HERE keyword MAT
3e40: 43 48 20 27 22 22 27 3b 0a 20 20 7d 0a 7d 20 7b  CH '""';.  }.} {
3e50: 7d 0a 0a 0a 73 65 74 20 73 71 6c 69 74 65 5f 66  }...set sqlite_f
3e60: 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61 72 65 6e  ts3_enable_paren
3e70: 74 68 65 73 65 73 20 30 0a 66 69 6e 69 73 68 5f  theses 0.finish_
3e80: 74 65 73 74 0a                                   test.