/ Hex Artifact Content
Login

Artifact e1be1248566f43c252d4404d52914f1fc4bfa065:


0000: 23 20 32 30 31 34 20 4d 61 79 20 37 0a 23 0a 23  # 2014 May 7.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u give..#.#*****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 20 20 54 68 65 0a 23 20 66 6f 63 75 73 20 6f 66    The.# focus of
01b0: 20 74 68 69 73 20 73 63 72 69 70 74 20 69 73 20   this script is 
01c0: 74 65 73 74 69 6e 67 20 74 68 65 20 46 54 53 33  testing the FTS3
01d0: 20 6d 6f 64 75 6c 65 2e 0a 23 0a 0a 73 65 74 20   module..#..set 
01e0: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69  testdir [file di
01f0: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f  rname $argv0].so
0200: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
0210: 73 74 65 72 2e 74 63 6c 0a 73 65 74 20 74 65 73  ster.tcl.set tes
0220: 74 70 72 65 66 69 78 20 66 74 73 33 65 78 70 72  tprefix fts3expr
0230: 34 0a 0a 23 20 49 66 20 53 51 4c 49 54 45 5f 45  4..# If SQLITE_E
0240: 4e 41 42 4c 45 5f 46 54 53 33 20 69 73 20 64 65  NABLE_FTS3 is de
0250: 66 69 6e 65 64 2c 20 6f 6d 69 74 20 74 68 69 73  fined, omit this
0260: 20 66 69 6c 65 2e 0a 69 66 63 61 70 61 62 6c 65   file..ifcapable
0270: 20 21 66 74 73 33 7c 7c 21 69 63 75 20 7b 0a 20   !fts3||!icu {. 
0280: 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72   finish_test.  r
0290: 65 74 75 72 6e 0a 7d 0a 0a 73 65 74 20 73 71 6c  eturn.}..set sql
02a0: 69 74 65 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f  ite_fts3_enable_
02b0: 70 61 72 65 6e 74 68 65 73 65 73 20 31 0a 0a 70  parentheses 1..p
02c0: 72 6f 63 20 74 65 73 74 5f 66 74 73 33 65 78 70  roc test_fts3exp
02d0: 72 20 7b 74 6f 6b 65 6e 69 7a 65 72 20 65 78 70  r {tokenizer exp
02e0: 72 7d 20 7b 0a 20 20 64 62 20 6f 6e 65 20 7b 53  r} {.  db one {S
02f0: 45 4c 45 43 54 20 66 74 73 33 5f 65 78 70 72 74  ELECT fts3_exprt
0300: 65 73 74 28 24 74 6f 6b 65 6e 69 7a 65 72 2c 20  est($tokenizer, 
0310: 24 65 78 70 72 2c 20 27 61 27 2c 20 27 62 27 2c  $expr, 'a', 'b',
0320: 20 27 63 27 29 7d 0a 7d 0a 0a 70 72 6f 63 20 64   'c')}.}..proc d
0330: 6f 5f 69 63 75 5f 65 78 70 72 5f 74 65 73 74 20  o_icu_expr_test 
0340: 7b 74 6e 20 65 78 70 72 20 72 65 73 7d 20 7b 0a  {tn expr res} {.
0350: 20 20 75 70 6c 65 76 65 6c 20 5b 6c 69 73 74 20    uplevel [list 
0360: 64 6f 5f 74 65 73 74 20 24 74 6e 20 5b 6c 69 73  do_test $tn [lis
0370: 74 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 20  t test_fts3expr 
0380: 69 63 75 20 24 65 78 70 72 5d 20 5b 6c 69 73 74  icu $expr] [list
0390: 20 7b 2a 7d 24 72 65 73 5d 5d 0a 7d 0a 0a 70 72   {*}$res]].}..pr
03a0: 6f 63 20 64 6f 5f 73 69 6d 70 6c 65 5f 65 78 70  oc do_simple_exp
03b0: 72 5f 74 65 73 74 20 7b 74 6e 20 65 78 70 72 20  r_test {tn expr 
03c0: 72 65 73 7d 20 7b 0a 20 20 75 70 6c 65 76 65 6c  res} {.  uplevel
03d0: 20 5b 6c 69 73 74 20 64 6f 5f 74 65 73 74 20 24   [list do_test $
03e0: 74 6e 20 5b 6c 69 73 74 20 74 65 73 74 5f 66 74  tn [list test_ft
03f0: 73 33 65 78 70 72 20 73 69 6d 70 6c 65 20 24 65  s3expr simple $e
0400: 78 70 72 5d 20 5b 6c 69 73 74 20 7b 2a 7d 24 72  xpr] [list {*}$r
0410: 65 73 5d 5d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  es]].}..#-------
0420: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0460: 2d 2d 0a 23 0a 64 6f 5f 69 63 75 5f 65 78 70 72  --.#.do_icu_expr
0470: 5f 74 65 73 74 20 31 2e 31 20 22 61 62 63 64 22  _test 1.1 "abcd"
0480: 20 20 20 20 7b 50 48 52 41 53 45 20 33 20 30 20      {PHRASE 3 0 
0490: 61 62 63 64 7d 0a 64 6f 5f 69 63 75 5f 65 78 70  abcd}.do_icu_exp
04a0: 72 5f 74 65 73 74 20 31 2e 32 20 22 20 74 61 67  r_test 1.2 " tag
04b0: 20 22 20 20 20 7b 50 48 52 41 53 45 20 33 20 30   "   {PHRASE 3 0
04c0: 20 74 61 67 7d 0a 64 6f 5f 69 63 75 5f 65 78 70   tag}.do_icu_exp
04d0: 72 5f 74 65 73 74 20 31 2e 33 20 7b 22 78 20 79  r_test 1.3 {"x y
04e0: 20 7a 22 7d 20 7b 50 48 52 41 53 45 20 33 20 30   z"} {PHRASE 3 0
04f0: 20 78 20 79 20 7a 7d 0a 64 6f 5f 69 63 75 5f 65   x y z}.do_icu_e
0500: 78 70 72 5f 74 65 73 74 20 31 2e 34 20 7b 78 20  xpr_test 1.4 {x 
0510: 4f 52 20 79 7d 20 20 20 20 20 20 20 7b 4f 52 20  OR y}       {OR 
0520: 7b 50 48 52 41 53 45 20 33 20 30 20 78 7d 20 7b  {PHRASE 3 0 x} {
0530: 50 48 52 41 53 45 20 33 20 30 20 79 7d 7d 0a 64  PHRASE 3 0 y}}.d
0540: 6f 5f 69 63 75 5f 65 78 70 72 5f 74 65 73 74 20  o_icu_expr_test 
0550: 31 2e 35 20 7b 28 78 20 4f 52 20 79 29 7d 20 20  1.5 {(x OR y)}  
0560: 20 20 20 7b 4f 52 20 7b 50 48 52 41 53 45 20 33     {OR {PHRASE 3
0570: 20 30 20 78 7d 20 7b 50 48 52 41 53 45 20 33 20   0 x} {PHRASE 3 
0580: 30 20 79 7d 7d 0a 64 6f 5f 69 63 75 5f 65 78 70  0 y}}.do_icu_exp
0590: 72 5f 74 65 73 74 20 31 2e 36 20 7b 20 22 28 78  r_test 1.6 { "(x
05a0: 20 4f 52 20 79 29 22 20 7d 20 7b 50 48 52 41 53   OR y)" } {PHRAS
05b0: 45 20 33 20 30 20 28 20 78 20 6f 72 20 79 20 29  E 3 0 ( x or y )
05c0: 7d 0a 0a 23 20 49 6e 20 22 63 6f 6c 3a 77 6f 72  }..# In "col:wor
05d0: 64 22 2c 20 69 66 20 22 63 6f 6c 22 20 69 73 20  d", if "col" is 
05e0: 6e 6f 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  not the name of 
05f0: 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 20 65 6e  a column, the en
0600: 74 69 72 65 20 74 68 69 6e 67 0a 23 20 69 73 20  tire thing.# is 
0610: 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 74 6f  passed to the to
0620: 6b 65 6e 69 7a 65 72 2e 0a 23 0a 64 6f 5f 69 63  kenizer..#.do_ic
0630: 75 5f 65 78 70 72 5f 74 65 73 74 20 31 2e 37 20  u_expr_test 1.7 
0640: 7b 61 3a 77 6f 72 64 7d 20 7b 50 48 52 41 53 45  {a:word} {PHRASE
0650: 20 30 20 30 20 77 6f 72 64 7d 0a 64 6f 5f 69 63   0 0 word}.do_ic
0660: 75 5f 65 78 70 72 5f 74 65 73 74 20 31 2e 38 20  u_expr_test 1.8 
0670: 7b 64 3a 77 6f 72 64 7d 20 7b 50 48 52 41 53 45  {d:word} {PHRASE
0680: 20 33 20 30 20 64 3a 77 6f 72 64 7d 0a 0a 73 65   3 0 d:word}..se
0690: 74 20 73 71 6c 69 74 65 5f 66 74 73 33 5f 65 6e  t sqlite_fts3_en
06a0: 61 62 6c 65 5f 70 61 72 65 6e 74 68 65 73 65 73  able_parentheses
06b0: 20 30 0a 0a 64 6f 5f 69 63 75 5f 65 78 70 72 5f   0..do_icu_expr_
06c0: 74 65 73 74 20 32 2e 31 20 7b 0a 20 20 66 20 28  test 2.1 {.  f (
06d0: 65 20 4e 45 41 52 2f 32 20 61 29 0a 7d 20 7b 41  e NEAR/2 a).} {A
06e0: 4e 44 20 7b 41 4e 44 20 7b 41 4e 44 20 7b 50 48  ND {AND {AND {PH
06f0: 52 41 53 45 20 33 20 30 20 66 7d 20 7b 50 48 52  RASE 3 0 f} {PHR
0700: 41 53 45 20 33 20 30 20 28 7d 7d 20 7b 4e 45 41  ASE 3 0 (}} {NEA
0710: 52 2f 32 20 7b 50 48 52 41 53 45 20 33 20 30 20  R/2 {PHRASE 3 0 
0720: 65 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 61  e} {PHRASE 3 0 a
0730: 7d 7d 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20  }}} {PHRASE 3 0 
0740: 29 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  )}}..#----------
0750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
0790: 23 0a 64 6f 5f 73 69 6d 70 6c 65 5f 65 78 70 72  #.do_simple_expr
07a0: 5f 74 65 73 74 20 33 2e 31 20 7b 2a 6c 4f 6c 2a  _test 3.1 {*lOl*
07b0: 20 2a 68 34 68 2a 7d 20 7b 0a 20 20 41 4e 44 20   *h4h*} {.  AND 
07c0: 7b 50 48 52 41 53 45 20 33 20 30 20 6c 6f 6c 2b  {PHRASE 3 0 lol+
07d0: 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 68 34  } {PHRASE 3 0 h4
07e0: 68 2b 7d 0a 7d 0a 0a 64 6f 5f 69 63 75 5f 65 78  h+}.}..do_icu_ex
07f0: 70 72 5f 74 65 73 74 20 33 2e 32 20 7b 2a 6c 4f  pr_test 3.2 {*lO
0800: 6c 2a 20 2a 68 34 68 2a 7d 20 7b 0a 20 20 41 4e  l* *h4h*} {.  AN
0810: 44 20 7b 41 4e 44 20 7b 41 4e 44 20 7b 50 48 52  D {AND {AND {PHR
0820: 41 53 45 20 33 20 30 20 2a 7d 20 7b 50 48 52 41  ASE 3 0 *} {PHRA
0830: 53 45 20 33 20 30 20 6c 6f 6c 2b 7d 7d 20 7b 50  SE 3 0 lol+}} {P
0840: 48 52 41 53 45 20 33 20 30 20 2a 7d 7d 20 7b 50  HRASE 3 0 *}} {P
0850: 48 52 41 53 45 20 33 20 30 20 68 34 68 2b 7d 0a  HRASE 3 0 h4h+}.
0860: 7d 0a 0a 64 6f 5f 73 69 6d 70 6c 65 5f 65 78 70  }..do_simple_exp
0870: 72 5f 74 65 73 74 20 33 2e 33 20 7b 20 2a 20 7d  r_test 3.3 { * }
0880: 20 20 20 20 7b 20 7d 0a 64 6f 5f 73 69 6d 70 6c      { }.do_simpl
0890: 65 5f 65 78 70 72 5f 74 65 73 74 20 33 2e 34 20  e_expr_test 3.4 
08a0: 7b 20 2a 61 20 7d 20 20 20 7b 20 50 48 52 41 53  { *a }   { PHRAS
08b0: 45 20 33 20 30 20 61 20 7d 0a 64 6f 5f 73 69 6d  E 3 0 a }.do_sim
08c0: 70 6c 65 5f 65 78 70 72 5f 74 65 73 74 20 33 2e  ple_expr_test 3.
08d0: 35 20 7b 20 61 2a 62 20 7d 20 20 7b 20 41 4e 44  5 { a*b }  { AND
08e0: 20 7b 50 48 52 41 53 45 20 33 20 30 20 61 2b 7d   {PHRASE 3 0 a+}
08f0: 20 7b 50 48 52 41 53 45 20 33 20 30 20 62 7d 20   {PHRASE 3 0 b} 
0900: 7d 0a 64 6f 5f 73 69 6d 70 6c 65 5f 65 78 70 72  }.do_simple_expr
0910: 5f 74 65 73 74 20 33 2e 36 20 7b 20 2a 61 2a 62  _test 3.6 { *a*b
0920: 20 7d 20 7b 20 41 4e 44 20 7b 50 48 52 41 53 45   } { AND {PHRASE
0930: 20 33 20 30 20 61 2b 7d 20 7b 50 48 52 41 53 45   3 0 a+} {PHRASE
0940: 20 33 20 30 20 62 7d 20 7d 0a 64 6f 5f 73 69 6d   3 0 b} }.do_sim
0950: 70 6c 65 5f 65 78 70 72 5f 74 65 73 74 20 33 2e  ple_expr_test 3.
0960: 37 20 7b 20 2a 22 61 62 63 22 20 7d 20 7b 20 50  7 { *"abc" } { P
0970: 48 52 41 53 45 20 33 20 30 20 61 62 63 20 7d 0a  HRASE 3 0 abc }.
0980: 64 6f 5f 73 69 6d 70 6c 65 5f 65 78 70 72 5f 74  do_simple_expr_t
0990: 65 73 74 20 33 2e 38 20 7b 20 22 61 62 63 22 2a  est 3.8 { "abc"*
09a0: 20 7d 20 7b 20 50 48 52 41 53 45 20 33 20 30 20   } { PHRASE 3 0 
09b0: 61 62 63 20 7d 0a 64 6f 5f 73 69 6d 70 6c 65 5f  abc }.do_simple_
09c0: 65 78 70 72 5f 74 65 73 74 20 33 2e 38 20 7b 20  expr_test 3.8 { 
09d0: 22 61 62 2a 63 22 20 7d 20 7b 20 50 48 52 41 53  "ab*c" } { PHRAS
09e0: 45 20 33 20 30 20 61 62 2b 20 63 20 7d 0a 0a 64  E 3 0 ab+ c }..d
09f0: 6f 5f 69 63 75 5f 65 78 70 72 5f 74 65 73 74 20  o_icu_expr_test 
0a00: 20 20 20 33 2e 39 20 7b 20 22 61 62 2a 63 22 20     3.9 { "ab*c" 
0a10: 7d 20 7b 20 50 48 52 41 53 45 20 33 20 30 20 61  } { PHRASE 3 0 a
0a20: 62 2b 20 2a 20 63 20 7d 0a 64 6f 5f 69 63 75 5f  b+ * c }.do_icu_
0a30: 65 78 70 72 5f 74 65 73 74 20 20 20 20 33 2e 31  expr_test    3.1
0a40: 30 20 7b 20 61 62 2a 63 20 7d 20 7b 20 41 4e 44  0 { ab*c } { AND
0a50: 20 7b 50 48 52 41 53 45 20 33 20 30 20 61 62 2b   {PHRASE 3 0 ab+
0a60: 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 63 7d  } {PHRASE 3 0 c}
0a70: 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a 0a  }..finish_test..