/ Hex Artifact Content
Login

Artifact 000f05df771e203187ceac49ad21c303c720b783:


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 36 20 32 30 30 39  .test,v 1.6 2009
0200: 2f 30 31 2f 30 31 20 31 34 3a 30 36 3a 31 33 20  /01/01 14:06:13 
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 20 7b 0a 20 20 74 65 73 74 5f 66 74  1.15 {.  test_ft
0f50: 73 33 65 78 70 72 20 7b 6f 6e 65 20 62 3a 74 77  s3expr {one b:tw
0f60: 6f 7d 0a 7d 20 7b 41 4e 44 20 7b 50 48 52 41 53  o}.} {AND {PHRAS
0f70: 45 20 33 20 30 20 6f 6e 65 7d 20 7b 50 48 52 41  E 3 0 one} {PHRA
0f80: 53 45 20 31 20 30 20 74 77 6f 7d 7d 0a 0a 64 6f  SE 1 0 two}}..do
0f90: 5f 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 31  _test fts3expr-1
0fa0: 2e 31 36 20 7b 0a 20 20 74 65 73 74 5f 66 74 73  .16 {.  test_fts
0fb0: 33 65 78 70 72 20 7b 6f 6e 65 20 41 4e 44 20 74  3expr {one AND t
0fc0: 77 6f 20 41 4e 44 20 74 68 72 65 65 20 41 4e 44  wo AND three AND
0fd0: 20 66 6f 75 72 20 41 4e 44 20 66 69 76 65 7d 0a   four AND five}.
0fe0: 7d 20 5b 6c 69 73 74 20 41 4e 44 20 5c 0a 20 20  } [list AND \.  
0ff0: 20 20 20 20 20 20 5b 6c 69 73 74 20 41 4e 44 20        [list AND 
1000: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
1010: 5b 6c 69 73 74 20 41 4e 44 20 5c 0a 20 20 20 20  [list AND \.    
1020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1030: 5b 6c 69 73 74 20 41 4e 44 20 7b 50 48 52 41 53  [list AND {PHRAS
1040: 45 20 33 20 30 20 6f 6e 65 7d 20 7b 50 48 52 41  E 3 0 one} {PHRA
1050: 53 45 20 33 20 30 20 74 77 6f 7d 5d 20 5c 0a 20  SE 3 0 two}] \. 
1060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1070: 20 20 20 7b 50 48 52 41 53 45 20 33 20 30 20 74     {PHRASE 3 0 t
1080: 68 72 65 65 7d 20 5c 0a 20 20 20 20 20 20 20 20  hree} \.        
1090: 20 20 20 20 20 20 5d 20 5c 0a 20 20 20 20 20 20        ] \.      
10a0: 20 20 20 20 20 20 20 20 7b 50 48 52 41 53 45 20          {PHRASE 
10b0: 33 20 30 20 66 6f 75 72 7d 20 5c 0a 20 20 20 20  3 0 four} \.    
10c0: 20 20 20 20 5d 20 5c 0a 20 20 20 20 20 20 20 20      ] \.        
10d0: 7b 50 48 52 41 53 45 20 33 20 30 20 66 69 76 65  {PHRASE 3 0 five
10e0: 7d 20 5c 0a 20 20 5d 0a 64 6f 5f 74 65 73 74 20  } \.  ].do_test 
10f0: 66 74 73 33 65 78 70 72 2d 31 2e 31 37 20 7b 0a  fts3expr-1.17 {.
1100: 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 20    test_fts3expr 
1110: 7b 28 6f 6e 65 20 41 4e 44 20 74 77 6f 29 20 41  {(one AND two) A
1120: 4e 44 20 28 28 74 68 72 65 65 20 41 4e 44 20 66  ND ((three AND f
1130: 6f 75 72 29 20 41 4e 44 20 66 69 76 65 29 7d 0a  our) AND five)}.
1140: 7d 20 5b 6c 69 73 74 20 41 4e 44 20 5c 0a 20 20  } [list AND \.  
1150: 20 20 20 20 20 20 5b 6c 69 73 74 20 41 4e 44 20        [list AND 
1160: 7b 50 48 52 41 53 45 20 33 20 30 20 6f 6e 65 7d  {PHRASE 3 0 one}
1170: 20 7b 50 48 52 41 53 45 20 33 20 30 20 74 77 6f   {PHRASE 3 0 two
1180: 7d 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 6c 69  }] \.        [li
1190: 73 74 20 41 4e 44 20 5c 0a 20 20 20 20 20 20 20  st AND \.       
11a0: 20 20 20 20 20 20 20 5b 6c 69 73 74 20 41 4e 44         [list AND
11b0: 20 7b 50 48 52 41 53 45 20 33 20 30 20 74 68 72   {PHRASE 3 0 thr
11c0: 65 65 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20  ee} {PHRASE 3 0 
11d0: 66 6f 75 72 7d 5d 20 5c 0a 20 20 20 20 20 20 20  four}] \.       
11e0: 20 20 20 20 20 20 7b 50 48 52 41 53 45 20 33 20        {PHRASE 3 
11f0: 30 20 66 69 76 65 7d 20 5c 0a 20 20 20 20 20 20  0 five} \.      
1200: 20 20 5d 20 5c 0a 20 20 5d 0a 64 6f 5f 74 65 73    ] \.  ].do_tes
1210: 74 20 66 74 73 33 65 78 70 72 2d 31 2e 31 38 20  t fts3expr-1.18 
1220: 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78 70  {.  test_fts3exp
1230: 72 20 7b 28 6f 6e 65 20 41 4e 44 20 74 77 6f 29  r {(one AND two)
1240: 20 4f 52 20 28 28 74 68 72 65 65 20 41 4e 44 20   OR ((three AND 
1250: 66 6f 75 72 29 20 41 4e 44 20 66 69 76 65 29 7d  four) AND five)}
1260: 0a 7d 20 5b 6c 69 73 74 20 4f 52 20 5c 0a 20 20  .} [list OR \.  
1270: 20 20 20 20 20 20 5b 6c 69 73 74 20 41 4e 44 20        [list AND 
1280: 7b 50 48 52 41 53 45 20 33 20 30 20 6f 6e 65 7d  {PHRASE 3 0 one}
1290: 20 7b 50 48 52 41 53 45 20 33 20 30 20 74 77 6f   {PHRASE 3 0 two
12a0: 7d 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 6c 69  }] \.        [li
12b0: 73 74 20 41 4e 44 20 5c 0a 20 20 20 20 20 20 20  st AND \.       
12c0: 20 20 20 20 20 20 20 5b 6c 69 73 74 20 41 4e 44         [list AND
12d0: 20 7b 50 48 52 41 53 45 20 33 20 30 20 74 68 72   {PHRASE 3 0 thr
12e0: 65 65 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20  ee} {PHRASE 3 0 
12f0: 66 6f 75 72 7d 5d 20 5c 0a 20 20 20 20 20 20 20  four}] \.       
1300: 20 20 20 20 20 20 7b 50 48 52 41 53 45 20 33 20        {PHRASE 3 
1310: 30 20 66 69 76 65 7d 20 5c 0a 20 20 20 20 20 20  0 five} \.      
1320: 20 20 5d 20 5c 0a 20 20 5d 0a 64 6f 5f 74 65 73    ] \.  ].do_tes
1330: 74 20 66 74 73 33 65 78 70 72 2d 31 2e 31 39 20  t fts3expr-1.19 
1340: 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78 70  {.  test_fts3exp
1350: 72 20 7b 28 6f 6e 65 20 41 4e 44 20 74 77 6f 29  r {(one AND two)
1360: 20 41 4e 44 20 28 28 74 68 72 65 65 20 41 4e 44   AND ((three AND
1370: 20 66 6f 75 72 29 20 4f 52 20 66 69 76 65 29 7d   four) OR five)}
1380: 0a 7d 20 5b 6c 69 73 74 20 41 4e 44 20 5c 0a 20  .} [list AND \. 
1390: 20 20 20 20 20 20 20 5b 6c 69 73 74 20 41 4e 44         [list AND
13a0: 20 7b 50 48 52 41 53 45 20 33 20 30 20 6f 6e 65   {PHRASE 3 0 one
13b0: 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 74 77  } {PHRASE 3 0 tw
13c0: 6f 7d 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 6c  o}] \.        [l
13d0: 69 73 74 20 4f 52 20 5c 0a 20 20 20 20 20 20 20  ist OR \.       
13e0: 20 20 20 20 20 20 20 5b 6c 69 73 74 20 41 4e 44         [list AND
13f0: 20 7b 50 48 52 41 53 45 20 33 20 30 20 74 68 72   {PHRASE 3 0 thr
1400: 65 65 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20  ee} {PHRASE 3 0 
1410: 66 6f 75 72 7d 5d 20 5c 0a 20 20 20 20 20 20 20  four}] \.       
1420: 20 20 20 20 20 20 7b 50 48 52 41 53 45 20 33 20        {PHRASE 3 
1430: 30 20 66 69 76 65 7d 20 5c 0a 20 20 20 20 20 20  0 five} \.      
1440: 20 20 5d 20 5c 0a 20 20 5d 0a 64 6f 5f 74 65 73    ] \.  ].do_tes
1450: 74 20 66 74 73 33 65 78 70 72 2d 31 2e 32 30 20  t fts3expr-1.20 
1460: 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78 70  {.  test_fts3exp
1470: 72 20 7b 28 6f 6e 65 20 4f 52 20 74 77 6f 29 20  r {(one OR two) 
1480: 41 4e 44 20 28 28 74 68 72 65 65 20 4f 52 20 66  AND ((three OR f
1490: 6f 75 72 29 20 41 4e 44 20 66 69 76 65 29 7d 0a  our) AND five)}.
14a0: 7d 20 5b 6c 69 73 74 20 41 4e 44 20 5c 0a 20 20  } [list AND \.  
14b0: 20 20 20 20 20 20 5b 6c 69 73 74 20 4f 52 20 7b        [list OR {
14c0: 50 48 52 41 53 45 20 33 20 30 20 6f 6e 65 7d 20  PHRASE 3 0 one} 
14d0: 7b 50 48 52 41 53 45 20 33 20 30 20 74 77 6f 7d  {PHRASE 3 0 two}
14e0: 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 6c 69 73  ] \.        [lis
14f0: 74 20 41 4e 44 20 5c 0a 20 20 20 20 20 20 20 20  t AND \.        
1500: 20 20 20 20 20 20 5b 6c 69 73 74 20 4f 52 20 7b        [list OR {
1510: 50 48 52 41 53 45 20 33 20 30 20 74 68 72 65 65  PHRASE 3 0 three
1520: 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 66 6f  } {PHRASE 3 0 fo
1530: 75 72 7d 5d 20 5c 0a 20 20 20 20 20 20 20 20 20  ur}] \.         
1540: 20 20 20 20 7b 50 48 52 41 53 45 20 33 20 30 20      {PHRASE 3 0 
1550: 66 69 76 65 7d 20 5c 0a 20 20 20 20 20 20 20 20  five} \.        
1560: 5d 20 5c 0a 20 20 5d 0a 64 6f 5f 74 65 73 74 20  ] \.  ].do_test 
1570: 66 74 73 33 65 78 70 72 2d 31 2e 32 31 20 7b 0a  fts3expr-1.21 {.
1580: 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 20    test_fts3expr 
1590: 7b 28 6f 6e 65 20 4f 52 20 74 77 6f 29 20 41 4e  {(one OR two) AN
15a0: 44 20 28 28 74 68 72 65 65 20 4e 4f 54 20 66 6f  D ((three NOT fo
15b0: 75 72 29 20 41 4e 44 20 66 69 76 65 29 7d 0a 7d  ur) AND five)}.}
15c0: 20 5b 6c 69 73 74 20 41 4e 44 20 5c 0a 20 20 20   [list AND \.   
15d0: 20 20 20 20 20 5b 6c 69 73 74 20 4f 52 20 7b 50       [list OR {P
15e0: 48 52 41 53 45 20 33 20 30 20 6f 6e 65 7d 20 7b  HRASE 3 0 one} {
15f0: 50 48 52 41 53 45 20 33 20 30 20 74 77 6f 7d 5d  PHRASE 3 0 two}]
1600: 20 5c 0a 20 20 20 20 20 20 20 20 5b 6c 69 73 74   \.        [list
1610: 20 41 4e 44 20 5c 0a 20 20 20 20 20 20 20 20 20   AND \.         
1620: 20 20 20 20 20 5b 6c 69 73 74 20 4e 4f 54 20 7b       [list NOT {
1630: 50 48 52 41 53 45 20 33 20 30 20 74 68 72 65 65  PHRASE 3 0 three
1640: 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 66 6f  } {PHRASE 3 0 fo
1650: 75 72 7d 5d 20 5c 0a 20 20 20 20 20 20 20 20 20  ur}] \.         
1660: 20 20 20 20 7b 50 48 52 41 53 45 20 33 20 30 20      {PHRASE 3 0 
1670: 66 69 76 65 7d 20 5c 0a 20 20 20 20 20 20 20 20  five} \.        
1680: 5d 20 5c 0a 20 20 5d 0a 64 6f 5f 74 65 73 74 20  ] \.  ].do_test 
1690: 66 74 73 33 65 78 70 72 2d 31 2e 32 32 20 7b 0a  fts3expr-1.22 {.
16a0: 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 20    test_fts3expr 
16b0: 7b 28 6f 6e 65 20 4f 52 20 74 77 6f 29 20 4e 4f  {(one OR two) NO
16c0: 54 20 28 28 74 68 72 65 65 20 4f 52 20 66 6f 75  T ((three OR fou
16d0: 72 29 20 41 4e 44 20 66 69 76 65 29 7d 0a 7d 20  r) AND five)}.} 
16e0: 5b 6c 69 73 74 20 4e 4f 54 20 5c 0a 20 20 20 20  [list NOT \.    
16f0: 20 20 20 20 5b 6c 69 73 74 20 4f 52 20 7b 50 48      [list OR {PH
1700: 52 41 53 45 20 33 20 30 20 6f 6e 65 7d 20 7b 50  RASE 3 0 one} {P
1710: 48 52 41 53 45 20 33 20 30 20 74 77 6f 7d 5d 20  HRASE 3 0 two}] 
1720: 5c 0a 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20  \.        [list 
1730: 41 4e 44 20 5c 0a 20 20 20 20 20 20 20 20 20 20  AND \.          
1740: 20 20 20 20 5b 6c 69 73 74 20 4f 52 20 7b 50 48      [list OR {PH
1750: 52 41 53 45 20 33 20 30 20 74 68 72 65 65 7d 20  RASE 3 0 three} 
1760: 7b 50 48 52 41 53 45 20 33 20 30 20 66 6f 75 72  {PHRASE 3 0 four
1770: 7d 5d 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20  }] \.           
1780: 20 20 7b 50 48 52 41 53 45 20 33 20 30 20 66 69    {PHRASE 3 0 fi
1790: 76 65 7d 20 5c 0a 20 20 20 20 20 20 20 20 5d 20  ve} \.        ] 
17a0: 5c 0a 20 20 5d 0a 64 6f 5f 74 65 73 74 20 66 74  \.  ].do_test ft
17b0: 73 33 65 78 70 72 2d 31 2e 32 33 20 7b 0a 20 20  s3expr-1.23 {.  
17c0: 74 65 73 74 5f 66 74 73 33 65 78 70 72 20 7b 28  test_fts3expr {(
17d0: 28 28 28 28 6f 6e 65 20 4f 52 20 74 77 6f 29 29  ((((one OR two))
17e0: 29 29 29 20 4e 4f 54 20 28 28 28 28 28 74 68 72  ))) NOT (((((thr
17f0: 65 65 20 4f 52 20 66 6f 75 72 29 29 29 20 41 4e  ee OR four))) AN
1800: 44 20 66 69 76 65 29 29 7d 0a 7d 20 5b 6c 69 73  D five))}.} [lis
1810: 74 20 4e 4f 54 20 5c 0a 20 20 20 20 20 20 20 20  t NOT \.        
1820: 5b 6c 69 73 74 20 4f 52 20 7b 50 48 52 41 53 45  [list OR {PHRASE
1830: 20 33 20 30 20 6f 6e 65 7d 20 7b 50 48 52 41 53   3 0 one} {PHRAS
1840: 45 20 33 20 30 20 74 77 6f 7d 5d 20 5c 0a 20 20  E 3 0 two}] \.  
1850: 20 20 20 20 20 20 5b 6c 69 73 74 20 41 4e 44 20        [list AND 
1860: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
1870: 5b 6c 69 73 74 20 4f 52 20 7b 50 48 52 41 53 45  [list OR {PHRASE
1880: 20 33 20 30 20 74 68 72 65 65 7d 20 7b 50 48 52   3 0 three} {PHR
1890: 41 53 45 20 33 20 30 20 66 6f 75 72 7d 5d 20 5c  ASE 3 0 four}] \
18a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 50  .             {P
18b0: 48 52 41 53 45 20 33 20 30 20 66 69 76 65 7d 20  HRASE 3 0 five} 
18c0: 5c 0a 20 20 20 20 20 20 20 20 5d 20 5c 0a 20 20  \.        ] \.  
18d0: 5d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78  ].do_test fts3ex
18e0: 70 72 2d 31 2e 32 34 20 7b 0a 20 20 74 65 73 74  pr-1.24 {.  test
18f0: 5f 66 74 73 33 65 78 70 72 20 7b 6f 6e 65 20 4e  _fts3expr {one N
1900: 45 41 52 20 74 77 6f 7d 0a 7d 20 5b 6c 69 73 74  EAR two}.} [list
1910: 20 4e 45 41 52 2f 31 30 20 7b 50 48 52 41 53 45   NEAR/10 {PHRASE
1920: 20 33 20 30 20 6f 6e 65 7d 20 7b 50 48 52 41 53   3 0 one} {PHRAS
1930: 45 20 33 20 30 20 74 77 6f 7d 5d 0a 64 6f 5f 74  E 3 0 two}].do_t
1940: 65 73 74 20 66 74 73 33 65 78 70 72 2d 31 2e 32  est fts3expr-1.2
1950: 35 20 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65  5 {.  test_fts3e
1960: 78 70 72 20 7b 28 6f 6e 65 20 4e 45 41 52 20 74  xpr {(one NEAR t
1970: 77 6f 29 7d 0a 7d 20 5b 6c 69 73 74 20 4e 45 41  wo)}.} [list NEA
1980: 52 2f 31 30 20 7b 50 48 52 41 53 45 20 33 20 30  R/10 {PHRASE 3 0
1990: 20 6f 6e 65 7d 20 7b 50 48 52 41 53 45 20 33 20   one} {PHRASE 3 
19a0: 30 20 74 77 6f 7d 5d 0a 64 6f 5f 74 65 73 74 20  0 two}].do_test 
19b0: 66 74 73 33 65 78 70 72 2d 31 2e 32 36 20 7b 0a  fts3expr-1.26 {.
19c0: 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 20    test_fts3expr 
19d0: 7b 28 28 28 28 28 28 6f 6e 65 20 4e 45 41 52 20  {((((((one NEAR 
19e0: 74 77 6f 29 29 29 29 29 29 7d 0a 7d 20 5b 6c 69  two))))))}.} [li
19f0: 73 74 20 4e 45 41 52 2f 31 30 20 7b 50 48 52 41  st NEAR/10 {PHRA
1a00: 53 45 20 33 20 30 20 6f 6e 65 7d 20 7b 50 48 52  SE 3 0 one} {PHR
1a10: 41 53 45 20 33 20 30 20 74 77 6f 7d 5d 0a 64 6f  ASE 3 0 two}].do
1a20: 5f 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 31  _test fts3expr-1
1a30: 2e 32 37 20 7b 0a 20 20 74 65 73 74 5f 66 74 73  .27 {.  test_fts
1a40: 33 65 78 70 72 20 7b 28 6f 6e 65 20 4e 45 41 52  3expr {(one NEAR
1a50: 20 74 77 6f 29 20 4f 52 20 28 28 74 68 72 65 65   two) OR ((three
1a60: 20 4f 52 20 66 6f 75 72 29 20 41 4e 44 20 66 69   OR four) AND fi
1a70: 76 65 29 7d 0a 7d 20 5b 6c 69 73 74 20 4f 52 20  ve)}.} [list OR 
1a80: 5c 0a 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20  \.        [list 
1a90: 4e 45 41 52 2f 31 30 20 7b 50 48 52 41 53 45 20  NEAR/10 {PHRASE 
1aa0: 33 20 30 20 6f 6e 65 7d 20 7b 50 48 52 41 53 45  3 0 one} {PHRASE
1ab0: 20 33 20 30 20 74 77 6f 7d 5d 20 5c 0a 20 20 20   3 0 two}] \.   
1ac0: 20 20 20 20 20 5b 6c 69 73 74 20 41 4e 44 20 5c       [list AND \
1ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
1ae0: 6c 69 73 74 20 4f 52 20 7b 50 48 52 41 53 45 20  list OR {PHRASE 
1af0: 33 20 30 20 74 68 72 65 65 7d 20 7b 50 48 52 41  3 0 three} {PHRA
1b00: 53 45 20 33 20 30 20 66 6f 75 72 7d 5d 20 5c 0a  SE 3 0 four}] \.
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 50 48               {PH
1b20: 52 41 53 45 20 33 20 30 20 66 69 76 65 7d 20 5c  RASE 3 0 five} \
1b30: 0a 20 20 20 20 20 20 20 20 5d 20 5c 0a 20 20 5d  .        ] \.  ]
1b40: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70  .do_test fts3exp
1b50: 72 2d 31 2e 32 38 20 7b 0a 20 20 74 65 73 74 5f  r-1.28 {.  test_
1b60: 66 74 73 33 65 78 70 72 20 7b 28 6f 6e 65 20 4e  fts3expr {(one N
1b70: 45 41 52 2f 33 32 31 20 74 77 6f 29 20 4f 52 20  EAR/321 two) OR 
1b80: 28 28 74 68 72 65 65 20 4f 52 20 66 6f 75 72 29  ((three OR four)
1b90: 20 41 4e 44 20 66 69 76 65 29 7d 0a 7d 20 5b 6c   AND five)}.} [l
1ba0: 69 73 74 20 4f 52 20 5c 0a 20 20 20 20 20 20 20  ist OR \.       
1bb0: 20 5b 6c 69 73 74 20 4e 45 41 52 2f 33 32 31 20   [list NEAR/321 
1bc0: 7b 50 48 52 41 53 45 20 33 20 30 20 6f 6e 65 7d  {PHRASE 3 0 one}
1bd0: 20 7b 50 48 52 41 53 45 20 33 20 30 20 74 77 6f   {PHRASE 3 0 two
1be0: 7d 5d 20 5c 0a 20 20 20 20 20 20 20 20 5b 6c 69  }] \.        [li
1bf0: 73 74 20 41 4e 44 20 5c 0a 20 20 20 20 20 20 20  st AND \.       
1c00: 20 20 20 20 20 20 20 5b 6c 69 73 74 20 4f 52 20         [list OR 
1c10: 7b 50 48 52 41 53 45 20 33 20 30 20 74 68 72 65  {PHRASE 3 0 thre
1c20: 65 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 66  e} {PHRASE 3 0 f
1c30: 6f 75 72 7d 5d 20 5c 0a 20 20 20 20 20 20 20 20  our}] \.        
1c40: 20 20 20 20 20 7b 50 48 52 41 53 45 20 33 20 30       {PHRASE 3 0
1c50: 20 66 69 76 65 7d 20 5c 0a 20 20 20 20 20 20 20   five} \.       
1c60: 20 5d 20 5c 0a 20 20 5d 0a 0a 70 72 6f 63 20 73   ] \.  ]..proc s
1c70: 74 72 69 70 5f 70 68 72 61 73 65 5f 64 61 74 61  trip_phrase_data
1c80: 20 7b 4c 7d 20 7b 0a 20 20 69 66 20 7b 5b 6c 69   {L} {.  if {[li
1c90: 6e 64 65 78 20 24 4c 20 30 5d 20 65 71 20 22 50  ndex $L 0] eq "P
1ca0: 48 52 41 53 45 22 7d 20 7b 0a 20 20 20 20 72 65  HRASE"} {.    re
1cb0: 74 75 72 6e 20 5b 6c 72 61 6e 67 65 20 24 4c 20  turn [lrange $L 
1cc0: 33 20 65 6e 64 5d 0a 20 20 7d 0a 20 20 72 65 74  3 end].  }.  ret
1cd0: 75 72 6e 20 5b 6c 69 73 74 20 5c 0a 20 20 20 20  urn [list \.    
1ce0: 5b 6c 69 6e 64 65 78 20 24 4c 20 30 5d 20 5c 0a  [lindex $L 0] \.
1cf0: 20 20 20 20 5b 73 74 72 69 70 5f 70 68 72 61 73      [strip_phras
1d00: 65 5f 64 61 74 61 20 5b 6c 69 6e 64 65 78 20 24  e_data [lindex $
1d10: 4c 20 31 5d 5d 20 5c 0a 20 20 20 20 5b 73 74 72  L 1]] \.    [str
1d20: 69 70 5f 70 68 72 61 73 65 5f 64 61 74 61 20 5b  ip_phrase_data [
1d30: 6c 69 6e 64 65 78 20 24 4c 20 32 5d 5d 20 5c 0a  lindex $L 2]] \.
1d40: 20 20 5d 0a 7d 0a 70 72 6f 63 20 74 65 73 74 5f    ].}.proc test_
1d50: 66 74 73 33 65 78 70 72 32 20 7b 65 78 70 72 7d  fts3expr2 {expr}
1d60: 20 7b 0a 20 20 73 74 72 69 70 5f 70 68 72 61 73   {.  strip_phras
1d70: 65 5f 64 61 74 61 20 5b 0a 20 20 20 20 64 62 20  e_data [.    db 
1d80: 6f 6e 65 20 7b 53 45 4c 45 43 54 20 66 74 73 33  one {SELECT fts3
1d90: 5f 65 78 70 72 74 65 73 74 28 27 73 69 6d 70 6c  _exprtest('simpl
1da0: 65 27 2c 20 24 65 78 70 72 2c 20 27 61 27 2c 20  e', $expr, 'a', 
1db0: 27 62 27 2c 20 27 63 27 29 7d 0a 20 20 5d 0a 7d  'b', 'c')}.  ].}
1dc0: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70  .do_test fts3exp
1dd0: 72 2d 32 2e 31 20 7b 0a 20 20 74 65 73 74 5f 66  r-2.1 {.  test_f
1de0: 74 73 33 65 78 70 72 32 20 22 61 62 20 4f 52 20  ts3expr2 "ab OR 
1df0: 63 64 20 41 4e 44 20 65 66 22 0a 7d 20 7b 4f 52  cd AND ef".} {OR
1e00: 20 61 62 20 7b 41 4e 44 20 63 64 20 65 66 7d 7d   ab {AND cd ef}}
1e10: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70  .do_test fts3exp
1e20: 72 2d 32 2e 32 20 7b 0a 20 20 74 65 73 74 5f 66  r-2.2 {.  test_f
1e30: 74 73 33 65 78 70 72 32 20 22 63 64 20 41 4e 44  ts3expr2 "cd AND
1e40: 20 65 66 20 4f 52 20 61 62 22 0a 7d 20 7b 4f 52   ef OR ab".} {OR
1e50: 20 7b 41 4e 44 20 63 64 20 65 66 7d 20 61 62 7d   {AND cd ef} ab}
1e60: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70  .do_test fts3exp
1e70: 72 2d 32 2e 33 20 7b 0a 20 20 74 65 73 74 5f 66  r-2.3 {.  test_f
1e80: 74 73 33 65 78 70 72 32 20 22 61 62 20 41 4e 44  ts3expr2 "ab AND
1e90: 20 63 64 20 41 4e 44 20 65 66 20 4f 52 20 67 68   cd AND ef OR gh
1ea0: 22 0a 7d 20 7b 4f 52 20 7b 41 4e 44 20 7b 41 4e  ".} {OR {AND {AN
1eb0: 44 20 61 62 20 63 64 7d 20 65 66 7d 20 67 68 7d  D ab cd} ef} gh}
1ec0: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70  .do_test fts3exp
1ed0: 72 2d 32 2e 34 20 7b 0a 20 20 74 65 73 74 5f 66  r-2.4 {.  test_f
1ee0: 74 73 33 65 78 70 72 32 20 22 61 62 20 41 4e 44  ts3expr2 "ab AND
1ef0: 20 63 64 20 4f 52 20 65 66 20 41 4e 44 20 67 68   cd OR ef AND gh
1f00: 22 0a 7d 20 7b 4f 52 20 7b 41 4e 44 20 61 62 20  ".} {OR {AND ab 
1f10: 63 64 7d 20 7b 41 4e 44 20 65 66 20 67 68 7d 7d  cd} {AND ef gh}}
1f20: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70  .do_test fts3exp
1f30: 72 2d 32 2e 35 20 7b 0a 20 20 74 65 73 74 5f 66  r-2.5 {.  test_f
1f40: 74 73 33 65 78 70 72 32 20 22 61 62 20 63 64 22  ts3expr2 "ab cd"
1f50: 0a 7d 20 7b 41 4e 44 20 61 62 20 63 64 7d 0a 0a  .} {AND ab cd}..
1f60: 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70 72  do_test fts3expr
1f70: 2d 33 2e 31 20 7b 0a 20 20 74 65 73 74 5f 66 74  -3.1 {.  test_ft
1f80: 73 33 65 78 70 72 32 20 22 28 61 62 20 4f 52 20  s3expr2 "(ab OR 
1f90: 63 64 29 20 41 4e 44 20 65 66 22 0a 7d 20 7b 41  cd) AND ef".} {A
1fa0: 4e 44 20 7b 4f 52 20 61 62 20 63 64 7d 20 65 66  ND {OR ab cd} ef
1fb0: 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78  }.do_test fts3ex
1fc0: 70 72 2d 33 2e 32 20 7b 0a 20 20 74 65 73 74 5f  pr-3.2 {.  test_
1fd0: 66 74 73 33 65 78 70 72 32 20 22 65 66 20 41 4e  fts3expr2 "ef AN
1fe0: 44 20 28 61 62 20 4f 52 20 63 64 29 22 0a 7d 20  D (ab OR cd)".} 
1ff0: 7b 41 4e 44 20 65 66 20 7b 4f 52 20 61 62 20 63  {AND ef {OR ab c
2000: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33  d}}.do_test fts3
2010: 65 78 70 72 2d 33 2e 33 20 7b 0a 20 20 74 65 73  expr-3.3 {.  tes
2020: 74 5f 66 74 73 33 65 78 70 72 32 20 22 28 61 62  t_fts3expr2 "(ab
2030: 20 4f 52 20 63 64 29 22 0a 7d 20 7b 4f 52 20 61   OR cd)".} {OR a
2040: 62 20 63 64 7d 0a 64 6f 5f 74 65 73 74 20 66 74  b cd}.do_test ft
2050: 73 33 65 78 70 72 2d 33 2e 34 20 7b 0a 20 20 74  s3expr-3.4 {.  t
2060: 65 73 74 5f 66 74 73 33 65 78 70 72 32 20 22 28  est_fts3expr2 "(
2070: 28 28 61 62 20 4f 52 20 63 64 29 29 29 22 0a 7d  ((ab OR cd)))".}
2080: 20 7b 4f 52 20 61 62 20 63 64 7d 0a 0a 64 6f 5f   {OR ab cd}..do_
2090: 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 33 2e  test fts3expr-3.
20a0: 35 20 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65  5 {.  test_fts3e
20b0: 78 70 72 32 20 22 6f 6e 65 20 41 4e 44 20 28 74  xpr2 "one AND (t
20c0: 77 6f 20 4e 45 41 52 20 74 68 72 65 65 29 22 0a  wo NEAR three)".
20d0: 7d 20 7b 41 4e 44 20 6f 6e 65 20 7b 4e 45 41 52  } {AND one {NEAR
20e0: 2f 31 30 20 74 77 6f 20 74 68 72 65 65 7d 7d 0a  /10 two three}}.
20f0: 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70 72  do_test fts3expr
2100: 2d 33 2e 36 20 7b 0a 20 20 74 65 73 74 5f 66 74  -3.6 {.  test_ft
2110: 73 33 65 78 70 72 32 20 22 6f 6e 65 20 28 74 77  s3expr2 "one (tw
2120: 6f 20 4e 45 41 52 20 74 68 72 65 65 29 22 0a 7d  o NEAR three)".}
2130: 20 7b 41 4e 44 20 6f 6e 65 20 7b 4e 45 41 52 2f   {AND one {NEAR/
2140: 31 30 20 74 77 6f 20 74 68 72 65 65 7d 7d 0a 64  10 two three}}.d
2150: 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70 72 2d  o_test fts3expr-
2160: 33 2e 37 20 7b 0a 20 20 74 65 73 74 5f 66 74 73  3.7 {.  test_fts
2170: 33 65 78 70 72 32 20 22 28 74 77 6f 20 4e 45 41  3expr2 "(two NEA
2180: 52 20 74 68 72 65 65 29 20 6f 6e 65 22 0a 7d 20  R three) one".} 
2190: 7b 41 4e 44 20 7b 4e 45 41 52 2f 31 30 20 74 77  {AND {NEAR/10 tw
21a0: 6f 20 74 68 72 65 65 7d 20 6f 6e 65 7d 0a 64 6f  o three} one}.do
21b0: 5f 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 33  _test fts3expr-3
21c0: 2e 38 20 7b 0a 20 20 74 65 73 74 5f 66 74 73 33  .8 {.  test_fts3
21d0: 65 78 70 72 32 20 22 28 74 77 6f 20 4e 45 41 52  expr2 "(two NEAR
21e0: 20 74 68 72 65 65 29 20 41 4e 44 20 6f 6e 65 22   three) AND one"
21f0: 0a 7d 20 7b 41 4e 44 20 7b 4e 45 41 52 2f 31 30  .} {AND {NEAR/10
2200: 20 74 77 6f 20 74 68 72 65 65 7d 20 6f 6e 65 7d   two three} one}
2210: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70  .do_test fts3exp
2220: 72 2d 33 2e 39 20 7b 0a 20 20 74 65 73 74 5f 66  r-3.9 {.  test_f
2230: 74 73 33 65 78 70 72 32 20 22 28 74 77 6f 20 4e  ts3expr2 "(two N
2240: 45 41 52 20 74 68 72 65 65 29 20 28 66 6f 75 72  EAR three) (four
2250: 20 66 69 76 65 29 22 0a 7d 20 7b 41 4e 44 20 7b   five)".} {AND {
2260: 4e 45 41 52 2f 31 30 20 74 77 6f 20 74 68 72 65  NEAR/10 two thre
2270: 65 7d 20 7b 41 4e 44 20 66 6f 75 72 20 66 69 76  e} {AND four fiv
2280: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33  e}}.do_test fts3
2290: 65 78 70 72 2d 33 2e 31 30 20 7b 0a 20 20 74 65  expr-3.10 {.  te
22a0: 73 74 5f 66 74 73 33 65 78 70 72 32 20 22 28 74  st_fts3expr2 "(t
22b0: 77 6f 20 4e 45 41 52 20 74 68 72 65 65 29 20 41  wo NEAR three) A
22c0: 4e 44 20 28 66 6f 75 72 20 66 69 76 65 29 22 0a  ND (four five)".
22d0: 7d 20 7b 41 4e 44 20 7b 4e 45 41 52 2f 31 30 20  } {AND {NEAR/10 
22e0: 74 77 6f 20 74 68 72 65 65 7d 20 7b 41 4e 44 20  two three} {AND 
22f0: 66 6f 75 72 20 66 69 76 65 7d 7d 0a 64 6f 5f 74  four five}}.do_t
2300: 65 73 74 20 66 74 73 33 65 78 70 72 2d 33 2e 31  est fts3expr-3.1
2310: 31 20 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65  1 {.  test_fts3e
2320: 78 70 72 32 20 22 28 74 77 6f 20 4e 45 41 52 20  xpr2 "(two NEAR 
2330: 74 68 72 65 65 29 20 28 66 6f 75 72 20 4e 45 41  three) (four NEA
2340: 52 20 66 69 76 65 29 22 0a 7d 20 7b 41 4e 44 20  R five)".} {AND 
2350: 7b 4e 45 41 52 2f 31 30 20 74 77 6f 20 74 68 72  {NEAR/10 two thr
2360: 65 65 7d 20 7b 4e 45 41 52 2f 31 30 20 66 6f 75  ee} {NEAR/10 fou
2370: 72 20 66 69 76 65 7d 7d 0a 64 6f 5f 74 65 73 74  r five}}.do_test
2380: 20 66 74 73 33 65 78 70 72 2d 33 2e 31 32 20 7b   fts3expr-3.12 {
2390: 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72  .  test_fts3expr
23a0: 32 20 22 28 74 77 6f 20 4e 45 41 52 20 74 68 72  2 "(two NEAR thr
23b0: 65 65 29 20 4f 52 20 28 66 6f 75 72 20 4e 45 41  ee) OR (four NEA
23c0: 52 20 66 69 76 65 29 22 0a 7d 20 7b 4f 52 20 7b  R five)".} {OR {
23d0: 4e 45 41 52 2f 31 30 20 74 77 6f 20 74 68 72 65  NEAR/10 two thre
23e0: 65 7d 20 7b 4e 45 41 52 2f 31 30 20 66 6f 75 72  e} {NEAR/10 four
23f0: 20 66 69 76 65 7d 7d 0a 0a 64 6f 5f 74 65 73 74   five}}..do_test
2400: 20 66 74 73 33 65 78 70 72 2d 33 2e 31 33 20 7b   fts3expr-3.13 {
2410: 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78 70 72  .  test_fts3expr
2420: 32 20 22 28 74 77 6f 20 4e 45 41 52 2f 31 61 20  2 "(two NEAR/1a 
2430: 74 68 72 65 65 29 22 0a 7d 20 7b 41 4e 44 20 7b  three)".} {AND {
2440: 41 4e 44 20 7b 41 4e 44 20 74 77 6f 20 6e 65 61  AND {AND two nea
2450: 72 7d 20 31 61 7d 20 74 68 72 65 65 7d 0a 0a 64  r} 1a} three}..d
2460: 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70 72 2d  o_test fts3expr-
2470: 33 2e 31 34 20 7b 0a 20 20 74 65 73 74 5f 66 74  3.14 {.  test_ft
2480: 73 33 65 78 70 72 32 20 22 28 74 77 6f 20 4e 45  s3expr2 "(two NE
2490: 41 52 2f 2f 20 74 68 72 65 65 29 22 0a 7d 20 7b  AR// three)".} {
24a0: 41 4e 44 20 7b 41 4e 44 20 74 77 6f 20 6e 65 61  AND {AND two nea
24b0: 72 7d 20 74 68 72 65 65 7d 0a 64 6f 5f 74 65 73  r} three}.do_tes
24c0: 74 20 66 74 73 33 65 78 70 72 2d 33 2e 31 35 20  t fts3expr-3.15 
24d0: 7b 0a 20 20 74 65 73 74 5f 66 74 73 33 65 78 70  {.  test_fts3exp
24e0: 72 32 20 22 28 74 77 6f 20 4e 45 41 52 2f 3a 20  r2 "(two NEAR/: 
24f0: 74 68 72 65 65 29 22 0a 7d 20 7b 41 4e 44 20 7b  three)".} {AND {
2500: 41 4e 44 20 74 77 6f 20 6e 65 61 72 7d 20 74 68  AND two near} th
2510: 72 65 65 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74  ree}..do_test ft
2520: 73 33 65 78 70 72 2d 33 2e 31 36 20 7b 0a 20 20  s3expr-3.16 {.  
2530: 74 65 73 74 5f 66 74 73 33 65 78 70 72 32 20 22  test_fts3expr2 "
2540: 28 74 77 6f 20 4e 45 41 52 20 74 68 72 65 65 29  (two NEAR three)
2550: 4f 52 28 66 6f 75 72 20 4e 45 41 52 20 66 69 76  OR(four NEAR fiv
2560: 65 29 22 0a 7d 20 7b 4f 52 20 7b 4e 45 41 52 2f  e)".} {OR {NEAR/
2570: 31 30 20 74 77 6f 20 74 68 72 65 65 7d 20 7b 4e  10 two three} {N
2580: 45 41 52 2f 31 30 20 66 6f 75 72 20 66 69 76 65  EAR/10 four five
2590: 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65  }}.do_test fts3e
25a0: 78 70 72 2d 33 2e 31 37 20 7b 0a 20 20 74 65 73  xpr-3.17 {.  tes
25b0: 74 5f 66 74 73 33 65 78 70 72 32 20 22 28 74 77  t_fts3expr2 "(tw
25c0: 6f 20 4e 45 41 52 20 74 68 72 65 65 29 4f 52 5c  o NEAR three)OR\
25d0: 22 66 6f 75 72 20 66 69 76 65 5c 22 22 0a 7d 20  "four five\"".} 
25e0: 7b 4f 52 20 7b 4e 45 41 52 2f 31 30 20 74 77 6f  {OR {NEAR/10 two
25f0: 20 74 68 72 65 65 7d 20 7b 66 6f 75 72 20 66 69   three} {four fi
2600: 76 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73  ve}}.do_test fts
2610: 33 65 78 70 72 2d 33 2e 31 38 20 7b 0a 20 20 74  3expr-3.18 {.  t
2620: 65 73 74 5f 66 74 73 33 65 78 70 72 32 20 22 6f  est_fts3expr2 "o
2630: 6e 65 20 5c 75 30 30 38 30 77 6f 22 0a 7d 20 22  ne \u0080wo".} "
2640: 41 4e 44 20 6f 6e 65 20 5c 75 30 30 38 30 77 6f  AND one \u0080wo
2650: 22 0a 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  "....#----------
2660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
26a0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
26b0: 65 73 74 73 2c 20 66 74 73 33 65 78 70 72 2d 34  ests, fts3expr-4
26c0: 2e 2a 2c 20 74 65 73 74 20 74 68 65 20 70 61 72  .*, test the par
26d0: 73 65 72 73 20 72 65 73 70 6f 6e 73 65 20 74 6f  sers response to
26e0: 20 73 79 6e 74 61 78 0a 23 20 65 72 72 6f 72 73   syntax.# errors
26f0: 20 69 6e 20 71 75 65 72 79 20 65 78 70 72 65 73   in query expres
2700: 73 69 6f 6e 73 2e 20 54 68 69 73 20 69 73 20 64  sions. This is d
2710: 6f 6e 65 20 75 73 69 6e 67 20 61 20 72 65 61 6c  one using a real
2720: 20 66 74 73 33 20 74 61 62 6c 65 20 61 6e 64 0a   fts3 table and.
2730: 23 20 4d 41 54 43 48 20 63 6c 61 75 73 65 73 2c  # MATCH clauses,
2740: 20 6e 6f 74 20 74 68 65 20 70 61 72 73 65 72 20   not the parser 
2750: 74 65 73 74 20 69 6e 74 65 72 66 61 63 65 2e 0a  test interface..
2760: 23 20 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65  # .do_test fts3e
2770: 78 70 72 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63  xpr-4.1 {.  exec
2780: 73 71 6c 20 7b 20 43 52 45 41 54 45 20 56 49 52  sql { CREATE VIR
2790: 54 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53  TUAL TABLE t1 US
27a0: 49 4e 47 20 66 74 73 33 28 61 2c 20 62 2c 20 63  ING fts3(a, b, c
27b0: 29 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 4d 69 73 6d  ) }.} {}..# Mism
27c0: 61 74 63 68 65 64 20 70 61 72 65 6e 74 68 65 73  atched parenthes
27d0: 69 73 3a 0a 64 6f 5f 74 65 73 74 20 66 74 73 33  is:.do_test fts3
27e0: 65 78 70 72 2d 34 2e 32 2e 31 20 7b 0a 20 20 63  expr-4.2.1 {.  c
27f0: 61 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54  atchsql { SELECT
2800: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
2810: 20 74 31 20 4d 41 54 43 48 20 27 65 78 61 6d 70   t1 MATCH 'examp
2820: 6c 65 20 41 4e 44 20 28 68 65 6c 6c 6f 20 4f 52  le AND (hello OR
2830: 20 77 6f 72 6c 64 29 29 27 20 7d 0a 7d 20 7b 31   world))' }.} {1
2840: 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f   {SQL logic erro
2850: 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74  r or missing dat
2860: 61 62 61 73 65 7d 7d 0a 64 6f 5f 74 65 73 74 20  abase}}.do_test 
2870: 66 74 73 33 65 78 70 72 2d 34 2e 32 2e 32 20 7b  fts3expr-4.2.2 {
2880: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45  .  catchsql { SE
2890: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
28a0: 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 65  HERE t1 MATCH 'e
28b0: 78 61 6d 70 6c 65 20 41 4e 44 20 28 68 65 6c 6c  xample AND (hell
28c0: 6f 20 4f 52 20 77 6f 72 6c 64 27 20 7d 0a 7d 20  o OR world' }.} 
28d0: 7b 31 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72  {1 {SQL logic er
28e0: 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64  ror or missing d
28f0: 61 74 61 62 61 73 65 7d 7d 0a 64 6f 5f 74 65 73  atabase}}.do_tes
2900: 74 20 66 74 73 33 65 78 70 72 2d 34 2e 32 2e 33  t fts3expr-4.2.3
2910: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20   {.  catchsql { 
2920: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
2930: 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20   WHERE t1 MATCH 
2940: 27 28 68 65 6c 6c 6f 27 20 7d 0a 7d 20 7b 31 20  '(hello' }.} {1 
2950: 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72  {SQL logic error
2960: 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61   or missing data
2970: 62 61 73 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 66  base}}.do_test f
2980: 74 73 33 65 78 70 72 2d 34 2e 32 2e 34 20 7b 0a  ts3expr-4.2.4 {.
2990: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c    catchsql { SEL
29a0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
29b0: 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 28 27  ERE t1 MATCH '('
29c0: 20 7d 0a 7d 20 7b 31 20 7b 53 51 4c 20 6c 6f 67   }.} {1 {SQL log
29d0: 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73  ic error or miss
29e0: 69 6e 67 20 64 61 74 61 62 61 73 65 7d 7d 0a 64  ing database}}.d
29f0: 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70 72 2d  o_test fts3expr-
2a00: 34 2e 32 2e 35 20 7b 0a 20 20 63 61 74 63 68 73  4.2.5 {.  catchs
2a10: 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52  ql { SELECT * FR
2a20: 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20 4d  OM t1 WHERE t1 M
2a30: 41 54 43 48 20 27 29 27 20 7d 0a 7d 20 7b 31 20  ATCH ')' }.} {1 
2a40: 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72  {SQL logic error
2a50: 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61   or missing data
2a60: 62 61 73 65 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20  base}}..do_test 
2a70: 66 74 73 33 65 78 70 72 2d 34 2e 32 2e 36 20 7b  fts3expr-4.2.6 {
2a80: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45  .  catchsql { SE
2a90: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
2aa0: 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 65  HERE t1 MATCH 'e
2ab0: 78 61 6d 70 6c 65 20 28 68 65 6c 6c 6f 20 77 6f  xample (hello wo
2ac0: 72 6c 64 27 20 7d 0a 7d 20 7b 31 20 7b 53 51 4c  rld' }.} {1 {SQL
2ad0: 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20   logic error or 
2ae0: 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
2af0: 7d 7d 0a 0a 23 20 55 6e 74 65 72 6d 69 6e 61 74  }}..# Unterminat
2b00: 65 64 20 71 75 6f 74 61 74 69 6f 6e 20 6d 61 72  ed quotation mar
2b10: 6b 73 3a 0a 64 6f 5f 74 65 73 74 20 66 74 73 33  ks:.do_test fts3
2b20: 65 78 70 72 2d 34 2e 33 2e 31 20 7b 0a 20 20 63  expr-4.3.1 {.  c
2b30: 61 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54  atchsql { SELECT
2b40: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
2b50: 20 74 31 20 4d 41 54 43 48 20 27 65 78 61 6d 70   t1 MATCH 'examp
2b60: 6c 65 20 4f 52 20 22 68 65 6c 6c 6f 20 77 6f 72  le OR "hello wor
2b70: 6c 64 27 20 7d 0a 7d 20 7b 31 20 7b 53 51 4c 20  ld' }.} {1 {SQL 
2b80: 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d  logic error or m
2b90: 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 7d  issing database}
2ba0: 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78  }.do_test fts3ex
2bb0: 70 72 2d 34 2e 33 2e 32 20 7b 0a 20 20 63 61 74  pr-4.3.2 {.  cat
2bc0: 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a  chsql { SELECT *
2bd0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74   FROM t1 WHERE t
2be0: 31 20 4d 41 54 43 48 20 27 65 78 61 6d 70 6c 65  1 MATCH 'example
2bf0: 20 4f 52 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 22   OR hello world"
2c00: 27 20 7d 0a 7d 20 7b 31 20 7b 53 51 4c 20 6c 6f  ' }.} {1 {SQL lo
2c10: 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73  gic error or mis
2c20: 73 69 6e 67 20 64 61 74 61 62 61 73 65 7d 7d 0a  sing database}}.
2c30: 0a 23 20 42 69 6e 61 72 79 20 6f 70 65 72 61 74  .# Binary operat
2c40: 6f 72 73 20 77 69 74 68 6f 75 74 20 74 68 65 20  ors without the 
2c50: 72 65 71 75 69 72 65 64 20 6f 70 65 72 61 6e 64  required operand
2c60: 73 2e 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65  s..do_test fts3e
2c70: 78 70 72 2d 34 2e 34 2e 31 20 7b 0a 20 20 63 61  xpr-4.4.1 {.  ca
2c80: 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  tchsql { SELECT 
2c90: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
2ca0: 74 31 20 4d 41 54 43 48 20 27 4f 52 20 68 65 6c  t1 MATCH 'OR hel
2cb0: 6c 6f 20 77 6f 72 6c 64 27 20 7d 0a 7d 20 7b 31  lo world' }.} {1
2cc0: 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f   {SQL logic erro
2cd0: 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74  r or missing dat
2ce0: 61 62 61 73 65 7d 7d 0a 64 6f 5f 74 65 73 74 20  abase}}.do_test 
2cf0: 66 74 73 33 65 78 70 72 2d 34 2e 34 2e 32 20 7b  fts3expr-4.4.2 {
2d00: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45  .  catchsql { SE
2d10: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
2d20: 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 68  HERE t1 MATCH 'h
2d30: 65 6c 6c 6f 20 77 6f 72 6c 64 20 4f 52 27 20 7d  ello world OR' }
2d40: 0a 7d 20 7b 31 20 7b 53 51 4c 20 6c 6f 67 69 63  .} {1 {SQL logic
2d50: 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e   error or missin
2d60: 67 20 64 61 74 61 62 61 73 65 7d 7d 0a 64 6f 5f  g database}}.do_
2d70: 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 34 2e  test fts3expr-4.
2d80: 34 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  4.3 {.  catchsql
2d90: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
2da0: 20 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54   t1 WHERE t1 MAT
2db0: 43 48 20 27 6f 6e 65 20 28 68 65 6c 6c 6f 20 77  CH 'one (hello w
2dc0: 6f 72 6c 64 20 4f 52 29 20 74 77 6f 27 20 7d 0a  orld OR) two' }.
2dd0: 7d 20 7b 31 20 7b 53 51 4c 20 6c 6f 67 69 63 20  } {1 {SQL logic 
2de0: 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67  error or missing
2df0: 20 64 61 74 61 62 61 73 65 7d 7d 0a 64 6f 5f 74   database}}.do_t
2e00: 65 73 74 20 66 74 73 33 65 78 70 72 2d 34 2e 34  est fts3expr-4.4
2e10: 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .4 {.  catchsql 
2e20: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
2e30: 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54 43  t1 WHERE t1 MATC
2e40: 48 20 27 6f 6e 65 20 28 4f 52 20 68 65 6c 6c 6f  H 'one (OR hello
2e50: 20 77 6f 72 6c 64 29 20 74 77 6f 27 20 7d 0a 7d   world) two' }.}
2e60: 20 7b 31 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65   {1 {SQL logic e
2e70: 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20  rror or missing 
2e80: 64 61 74 61 62 61 73 65 7d 7d 0a 0a 23 20 4e 45  database}}..# NE
2e90: 41 52 20 6f 70 65 72 61 74 6f 72 73 20 77 69 74  AR operators wit
2ea0: 68 20 73 6f 6d 65 74 68 69 6e 67 20 6f 74 68 65  h something othe
2eb0: 72 20 74 68 61 6e 20 70 68 72 61 73 65 73 20 61  r than phrases a
2ec0: 73 20 61 72 67 75 6d 65 6e 74 73 2e 0a 64 6f 5f  s arguments..do_
2ed0: 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 34 2e  test fts3expr-4.
2ee0: 35 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  5.1 {.  catchsql
2ef0: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
2f00: 20 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54   t1 WHERE t1 MAT
2f10: 43 48 20 27 28 68 65 6c 6c 6f 20 4f 52 20 77 6f  CH '(hello OR wo
2f20: 72 6c 64 29 20 4e 45 41 52 20 6f 6e 65 27 20 7d  rld) NEAR one' }
2f30: 0a 7d 20 7b 31 20 7b 53 51 4c 20 6c 6f 67 69 63  .} {1 {SQL logic
2f40: 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e   error or missin
2f50: 67 20 64 61 74 61 62 61 73 65 7d 7d 0a 64 6f 5f  g database}}.do_
2f60: 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 34 2e  test fts3expr-4.
2f70: 35 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  5.2 {.  catchsql
2f80: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
2f90: 20 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54   t1 WHERE t1 MAT
2fa0: 43 48 20 27 6f 6e 65 20 4e 45 41 52 20 28 68 65  CH 'one NEAR (he
2fb0: 6c 6c 6f 20 4f 52 20 77 6f 72 6c 64 29 27 20 7d  llo OR world)' }
2fc0: 0a 7d 20 7b 31 20 7b 53 51 4c 20 6c 6f 67 69 63  .} {1 {SQL logic
2fd0: 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e   error or missin
2fe0: 67 20 64 61 74 61 62 61 73 65 7d 7d 0a 0a 23 2d  g database}}..#-
2ff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3030: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 20 66 6f  -------.# The fo
3040: 6c 6c 6f 77 69 6e 67 20 4f 4f 4d 20 74 65 73 74  llowing OOM test
3050: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
3060: 6f 20 63 6f 76 65 72 20 63 61 73 65 73 20 69 6e  o cover cases in
3070: 20 66 74 73 33 5f 65 78 70 72 2e 63 2e 0a 23 20   fts3_expr.c..# 
3080: 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72  .source $testdir
3090: 2f 6d 61 6c 6c 6f 63 5f 63 6f 6d 6d 6f 6e 2e 74  /malloc_common.t
30a0: 63 6c 0a 64 6f 5f 6d 61 6c 6c 6f 63 5f 74 65 73  cl.do_malloc_tes
30b0: 74 20 66 74 73 33 65 78 70 72 2d 6d 61 6c 6c 6f  t fts3expr-mallo
30c0: 63 2d 31 20 2d 73 71 6c 62 6f 64 79 20 7b 0a 20  c-1 -sqlbody {. 
30d0: 20 53 45 4c 45 43 54 20 66 74 73 33 5f 65 78 70   SELECT fts3_exp
30e0: 72 74 65 73 74 28 27 73 69 6d 70 6c 65 27 2c 20  rtest('simple', 
30f0: 27 61 20 62 20 63 20 22 64 20 65 20 66 22 27 2c  'a b c "d e f"',
3100: 20 27 61 27 2c 20 27 62 27 2c 20 27 63 27 29 0a   'a', 'b', 'c').
3110: 7d 0a 64 6f 5f 6d 61 6c 6c 6f 63 5f 74 65 73 74  }.do_malloc_test
3120: 20 66 74 73 33 65 78 70 72 2d 6d 61 6c 6c 6f 63   fts3expr-malloc
3130: 2d 32 20 2d 74 63 6c 70 72 65 70 20 7b 0a 20 20  -2 -tclprep {.  
3140: 73 65 74 20 73 71 6c 69 74 65 5f 66 74 73 33 5f  set sqlite_fts3_
3150: 65 6e 61 62 6c 65 5f 70 61 72 65 6e 74 68 65 73  enable_parenthes
3160: 65 73 20 30 0a 7d 20 2d 73 71 6c 62 6f 64 79 20  es 0.} -sqlbody 
3170: 7b 0a 20 20 53 45 4c 45 43 54 20 66 74 73 33 5f  {.  SELECT fts3_
3180: 65 78 70 72 74 65 73 74 28 27 73 69 6d 70 6c 65  exprtest('simple
3190: 27 2c 20 27 61 20 2d 62 27 2c 20 27 61 27 2c 20  ', 'a -b', 'a', 
31a0: 27 62 27 2c 20 27 63 27 29 0a 7d 20 2d 63 6c 65  'b', 'c').} -cle
31b0: 61 6e 75 70 20 7b 0a 20 20 73 65 74 20 73 71 6c  anup {.  set sql
31c0: 69 74 65 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f  ite_fts3_enable_
31d0: 70 61 72 65 6e 74 68 65 73 65 73 20 31 0a 7d 0a  parentheses 1.}.
31e0: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
31f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65  ----------.# The
3230: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73   following tests
3240: 20 61 72 65 20 6e 6f 74 20 76 65 72 79 20 69 6d   are not very im
3250: 70 6f 72 74 61 6e 74 2e 20 54 68 65 79 20 63 6f  portant. They co
3260: 76 65 72 20 65 72 72 6f 72 20 68 61 6e 64 6c 69  ver error handli
3270: 6e 67 0a 23 20 63 61 73 65 73 20 69 6e 20 74 68  ng.# cases in th
3280: 65 20 74 65 73 74 20 63 6f 64 65 2c 20 77 68 69  e test code, whi
3290: 63 68 20 6d 61 6b 65 73 20 74 65 73 74 20 63 6f  ch makes test co
32a0: 76 65 72 61 67 65 20 65 61 73 69 65 72 20 74 6f  verage easier to
32b0: 20 6d 65 61 73 75 72 65 2e 0a 23 20 0a 64 6f 5f   measure..# .do_
32c0: 74 65 73 74 20 66 74 73 33 65 78 70 72 2d 35 2e  test fts3expr-5.
32d0: 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  1 {.  catchsql {
32e0: 20 53 45 4c 45 43 54 20 66 74 73 33 5f 65 78 70   SELECT fts3_exp
32f0: 72 74 65 73 74 28 27 73 69 6d 70 6c 65 27 2c 20  rtest('simple', 
3300: 27 61 20 62 27 29 20 7d 0a 7d 20 7b 31 20 7b 55  'a b') }.} {1 {U
3310: 73 61 67 65 3a 20 66 74 73 33 5f 65 78 70 72 74  sage: fts3_exprt
3320: 65 73 74 28 74 6f 6b 65 6e 69 7a 65 72 2c 20 65  est(tokenizer, e
3330: 78 70 72 2c 20 63 6f 6c 31 2c 20 2e 2e 2e 7d 7d  xpr, col1, ...}}
3340: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 65 78 70  .do_test fts3exp
3350: 72 2d 35 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  r-5.2 {.  catchs
3360: 71 6c 20 7b 20 53 45 4c 45 43 54 20 66 74 73 33  ql { SELECT fts3
3370: 5f 65 78 70 72 74 65 73 74 28 27 64 6f 65 73 6e  _exprtest('doesn
3380: 6f 74 65 78 69 73 74 27 2c 20 27 61 20 62 27 2c  otexist', 'a b',
3390: 20 27 63 27 29 20 7d 0a 7d 20 7b 31 20 7b 4e 6f   'c') }.} {1 {No
33a0: 20 73 75 63 68 20 74 6f 6b 65 6e 69 7a 65 72 20   such tokenizer 
33b0: 6d 6f 64 75 6c 65 7d 7d 0a 64 6f 5f 74 65 73 74  module}}.do_test
33c0: 20 66 74 73 33 65 78 70 72 2d 35 2e 33 20 7b 0a   fts3expr-5.3 {.
33d0: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c    catchsql { SEL
33e0: 45 43 54 20 66 74 73 33 5f 65 78 70 72 74 65 73  ECT fts3_exprtes
33f0: 74 28 27 73 69 6d 70 6c 65 27 2c 20 27 61 20 62  t('simple', 'a b
3400: 20 4f 52 27 2c 20 27 63 27 29 20 7d 0a 7d 20 7b   OR', 'c') }.} {
3410: 31 20 7b 45 72 72 6f 72 20 70 61 72 73 69 6e 67  1 {Error parsing
3420: 20 65 78 70 72 65 73 73 69 6f 6e 7d 7d 0a 0a 23   expression}}..#
3430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3470: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 20 6e  --------.# The n
3480: 65 78 74 20 73 65 74 20 6f 66 20 74 65 73 74 73  ext set of tests
3490: 20 76 65 72 69 66 69 65 73 20 74 68 61 74 20 74   verifies that t
34a0: 68 69 6e 67 73 20 61 63 74 75 61 6c 6c 79 20 77  hings actually w
34b0: 6f 72 6b 20 61 73 20 74 68 65 79 20 61 72 65 0a  ork as they are.
34c0: 23 20 73 75 70 70 6f 73 65 64 20 74 6f 20 77 68  # supposed to wh
34d0: 65 6e 20 75 73 69 6e 67 20 74 68 65 20 6e 65 77  en using the new
34e0: 20 73 79 6e 74 61 78 2e 0a 23 20 0a 64 6f 5f 74   syntax..# .do_t
34f0: 65 73 74 20 66 74 73 33 65 78 70 72 2d 36 2e 31  est fts3expr-6.1
3500: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3510: 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41     CREATE VIRTUA
3520: 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47  L TABLE t1 USING
3530: 20 66 74 73 33 28 61 29 3b 0a 20 20 7d 0a 20 20   fts3(a);.  }.  
3540: 66 6f 72 20 7b 73 65 74 20 69 69 20 31 7d 20 7b  for {set ii 1} {
3550: 24 69 69 20 3c 20 33 32 7d 20 7b 69 6e 63 72 20  $ii < 32} {incr 
3560: 69 69 7d 20 7b 0a 20 20 20 20 73 65 74 20 76 20  ii} {.    set v 
3570: 5b 6c 69 73 74 5d 0a 20 20 20 20 69 66 20 7b 24  [list].    if {$
3580: 69 69 20 26 20 31 7d 20 20 7b 20 6c 61 70 70 65  ii & 1}  { lappe
3590: 6e 64 20 76 20 6f 6e 65 20 7d 0a 20 20 20 20 69  nd v one }.    i
35a0: 66 20 7b 24 69 69 20 26 20 32 7d 20 20 7b 20 6c  f {$ii & 2}  { l
35b0: 61 70 70 65 6e 64 20 76 20 74 77 6f 20 7d 0a 20  append v two }. 
35c0: 20 20 20 69 66 20 7b 24 69 69 20 26 20 34 7d 20     if {$ii & 4} 
35d0: 20 7b 20 6c 61 70 70 65 6e 64 20 76 20 74 68 72   { lappend v thr
35e0: 65 65 20 7d 0a 20 20 20 20 69 66 20 7b 24 69 69  ee }.    if {$ii
35f0: 20 26 20 38 7d 20 20 7b 20 6c 61 70 70 65 6e 64   & 8}  { lappend
3600: 20 76 20 66 6f 75 72 20 7d 0a 20 20 20 20 69 66   v four }.    if
3610: 20 7b 24 69 69 20 26 20 31 36 7d 20 7b 20 6c 61   {$ii & 16} { la
3620: 70 70 65 6e 64 20 76 20 66 69 76 65 20 7d 0a 20  ppend v five }. 
3630: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53     execsql { INS
3640: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
3650: 45 53 28 24 76 29 20 7d 0a 20 20 7d 0a 0a 20 20  ES($v) }.  }..  
3660: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3670: 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 20 57 48  rowid FROM t1 WH
3680: 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 66 69  ERE t1 MATCH 'fi
3690: 76 65 20 66 6f 75 72 20 6f 6e 65 27 20 4f 52 44  ve four one' ORD
36a0: 45 52 20 42 59 20 72 6f 77 69 64 7d 0a 7d 20 7b  ER BY rowid}.} {
36b0: 32 35 20 32 37 20 32 39 20 33 31 7d 0a 0a 66 6f  25 27 29 31}..fo
36c0: 72 65 61 63 68 20 7b 69 64 20 65 78 70 72 20 72  reach {id expr r
36d0: 65 73 7d 20 7b 0a 0a 20 20 32 20 22 66 69 76 65  es} {..  2 "five
36e0: 20 66 6f 75 72 20 4e 4f 54 20 6f 6e 65 22 20 7b   four NOT one" {
36f0: 32 34 20 32 36 20 32 38 20 33 30 7d 0a 0a 20 20  24 26 28 30}..  
3700: 33 20 22 66 69 76 65 20 41 4e 44 20 66 6f 75 72  3 "five AND four
3710: 20 4f 52 20 6f 6e 65 22 20 0a 20 20 20 20 20 20   OR one" .      
3720: 7b 31 20 33 20 35 20 37 20 39 20 31 31 20 31 33  {1 3 5 7 9 11 13
3730: 20 31 35 20 31 37 20 31 39 20 32 31 20 32 33 20   15 17 19 21 23 
3740: 32 34 20 32 35 20 32 36 20 32 37 20 32 38 20 32  24 25 26 27 28 2
3750: 39 20 33 30 20 33 31 7d 0a 0a 20 20 34 20 22 66  9 30 31}..  4 "f
3760: 69 76 65 20 41 4e 44 20 28 66 6f 75 72 20 4f 52  ive AND (four OR
3770: 20 6f 6e 65 29 22 20 7b 31 37 20 31 39 20 32 31   one)" {17 19 21
3780: 20 32 33 20 32 34 20 32 35 20 32 36 20 32 37 20   23 24 25 26 27 
3790: 32 38 20 32 39 20 33 30 20 33 31 7d 0a 0a 20 20  28 29 30 31}..  
37a0: 35 20 22 66 69 76 65 20 4e 4f 54 20 28 66 6f 75  5 "five NOT (fou
37b0: 72 20 4f 52 20 6f 6e 65 29 22 20 7b 31 36 20 31  r OR one)" {16 1
37c0: 38 20 32 30 20 32 32 7d 0a 0a 20 20 36 20 22 28  8 20 22}..  6 "(
37d0: 66 69 76 65 20 4e 4f 54 20 28 66 6f 75 72 20 4f  five NOT (four O
37e0: 52 20 6f 6e 65 29 29 20 4f 52 20 28 66 69 76 65  R one)) OR (five
37f0: 20 41 4e 44 20 28 66 6f 75 72 20 4f 52 20 6f 6e   AND (four OR on
3800: 65 29 29 22 0a 20 20 20 20 20 20 7b 31 36 20 31  e))".      {16 1
3810: 37 20 31 38 20 31 39 20 32 30 20 32 31 20 32 32  7 18 19 20 21 22
3820: 20 32 33 20 32 34 20 32 35 20 32 36 20 32 37 20   23 24 25 26 27 
3830: 32 38 20 32 39 20 33 30 20 33 31 7d 0a 0a 20 20  28 29 30 31}..  
3840: 37 20 22 28 66 69 76 65 20 4f 52 20 6f 6e 65 29  7 "(five OR one)
3850: 20 41 4e 44 20 74 77 6f 20 41 4e 44 20 74 68 72   AND two AND thr
3860: 65 65 22 20 7b 37 20 31 35 20 32 32 20 32 33 20  ee" {7 15 22 23 
3870: 33 30 20 33 31 7d 0a 0a 20 20 38 20 22 66 69 76  30 31}..  8 "fiv
3880: 65 20 4f 52 20 6f 6e 65 20 41 4e 44 20 74 77 6f  e OR one AND two
3890: 20 41 4e 44 20 74 68 72 65 65 22 20 0a 20 20 20   AND three" .   
38a0: 20 7b 37 20 31 35 20 31 36 20 31 37 20 31 38 20   {7 15 16 17 18 
38b0: 31 39 20 32 30 20 32 31 20 32 32 20 32 33 20 32  19 20 21 22 23 2
38c0: 34 20 32 35 20 32 36 20 32 37 20 32 38 20 32 39  4 25 26 27 28 29
38d0: 20 33 30 20 33 31 7d 0a 0a 20 20 39 20 22 66 69   30 31}..  9 "fi
38e0: 76 65 20 4f 52 20 6f 6e 65 20 74 77 6f 20 74 68  ve OR one two th
38f0: 72 65 65 22 20 0a 20 20 20 20 7b 37 20 31 35 20  ree" .    {7 15 
3900: 31 36 20 31 37 20 31 38 20 31 39 20 32 30 20 32  16 17 18 19 20 2
3910: 31 20 32 32 20 32 33 20 32 34 20 32 35 20 32 36  1 22 23 24 25 26
3920: 20 32 37 20 32 38 20 32 39 20 33 30 20 33 31 7d   27 28 29 30 31}
3930: 0a 0a 20 20 31 30 20 22 66 69 76 65 20 4f 52 20  ..  10 "five OR 
3940: 5c 22 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 5c  \"one two three\
3950: 22 22 20 0a 20 20 20 20 7b 37 20 31 35 20 31 36  "" .    {7 15 16
3960: 20 31 37 20 31 38 20 31 39 20 32 30 20 32 31 20   17 18 19 20 21 
3970: 32 32 20 32 33 20 32 34 20 32 35 20 32 36 20 32  22 23 24 25 26 2
3980: 37 20 32 38 20 32 39 20 33 30 20 33 31 7d 0a 0a  7 28 29 30 31}..
3990: 20 20 31 31 20 22 6f 6e 65 20 74 77 6f 20 4f 52    11 "one two OR
39a0: 20 66 6f 75 72 20 66 69 76 65 20 4e 4f 54 20 74   four five NOT t
39b0: 68 72 65 65 22 20 7b 33 20 37 20 31 31 20 31 35  hree" {3 7 11 15
39c0: 20 31 39 20 32 33 20 32 34 20 32 35 20 32 36 20   19 23 24 25 26 
39d0: 32 37 20 33 31 7d 0a 0a 20 20 31 32 20 22 28 6f  27 31}..  12 "(o
39e0: 6e 65 20 74 77 6f 20 4f 52 20 66 6f 75 72 20 66  ne two OR four f
39f0: 69 76 65 29 20 4e 4f 54 20 74 68 72 65 65 22 20  ive) NOT three" 
3a00: 7b 33 20 31 31 20 31 39 20 32 34 20 32 35 20 32  {3 11 19 24 25 2
3a10: 36 20 32 37 7d 0a 0a 20 20 31 33 20 22 28 28 28  6 27}..  13 "(((
3a20: 28 28 28 6f 6e 65 20 74 77 6f 20 4f 52 20 66 6f  (((one two OR fo
3a30: 75 72 20 66 69 76 65 29 29 29 29 29 29 20 4e 4f  ur five)))))) NO
3a40: 54 20 74 68 72 65 65 22 20 7b 33 20 31 31 20 31  T three" {3 11 1
3a50: 39 20 32 34 20 32 35 20 32 36 20 32 37 7d 0a 0a  9 24 25 26 27}..
3a60: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 66 74  } {.  do_test ft
3a70: 73 33 65 78 70 72 2d 36 2e 24 69 64 20 7b 0a 20  s3expr-6.$id {. 
3a80: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c     execsql { SEL
3a90: 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74  ECT rowid FROM t
3aa0: 31 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48  1 WHERE t1 MATCH
3ab0: 20 24 65 78 70 72 20 4f 52 44 45 52 20 42 59 20   $expr ORDER BY 
3ac0: 72 6f 77 69 64 20 7d 0a 20 20 7d 20 24 72 65 73  rowid }.  } $res
3ad0: 0a 7d 0a 0a 73 65 74 20 73 71 6c 69 74 65 5f 66  .}..set sqlite_f
3ae0: 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61 72 65 6e  ts3_enable_paren
3af0: 74 68 65 73 65 73 20 30 0a 66 69 6e 69 73 68 5f  theses 0.finish_
3b00: 74 65 73 74 0a                                   test.