/ Hex Artifact Content
Login

Artifact cac5dd815fe6b5921741abdccdde3b7f50b86394de91e13308ee7986859c4a9f:


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 73 65 74 20 72 65 73 32 20 5b 6c 69 73 74    set res2 [list
0360: 20 7b 2a 7d 24 72 65 73 5d 0a 20 20 75 70 6c 65   {*}$res].  uple
0370: 76 65 6c 20 5b 6c 69 73 74 20 64 6f 5f 74 65 73  vel [list do_tes
0380: 74 20 24 74 6e 20 5b 6c 69 73 74 20 74 65 73 74  t $tn [list test
0390: 5f 66 74 73 33 65 78 70 72 20 22 69 63 75 20 65  _fts3expr "icu e
03a0: 6e 5f 55 53 22 20 24 65 78 70 72 5d 20 24 72 65  n_US" $expr] $re
03b0: 73 32 5d 0a 7d 0a 0a 70 72 6f 63 20 64 6f 5f 73  s2].}..proc do_s
03c0: 69 6d 70 6c 65 5f 65 78 70 72 5f 74 65 73 74 20  imple_expr_test 
03d0: 7b 74 6e 20 65 78 70 72 20 72 65 73 7d 20 7b 0a  {tn expr res} {.
03e0: 20 20 75 70 6c 65 76 65 6c 20 5b 6c 69 73 74 20    uplevel [list 
03f0: 64 6f 5f 74 65 73 74 20 24 74 6e 20 5b 6c 69 73  do_test $tn [lis
0400: 74 20 74 65 73 74 5f 66 74 73 33 65 78 70 72 20  t test_fts3expr 
0410: 73 69 6d 70 6c 65 20 24 65 78 70 72 5d 20 5b 6c  simple $expr] [l
0420: 69 73 74 20 7b 2a 7d 24 72 65 73 5d 5d 0a 7d 0a  ist {*}$res]].}.
0430: 0a 23 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 64 6f  -----------.#.do
0480: 5f 69 63 75 5f 65 78 70 72 5f 74 65 73 74 20 31  _icu_expr_test 1
0490: 2e 31 20 22 61 62 63 64 22 20 20 20 20 7b 50 48  .1 "abcd"    {PH
04a0: 52 41 53 45 20 33 20 30 20 61 62 63 64 7d 0a 64  RASE 3 0 abcd}.d
04b0: 6f 5f 69 63 75 5f 65 78 70 72 5f 74 65 73 74 20  o_icu_expr_test 
04c0: 31 2e 32 20 22 20 74 61 67 20 22 20 20 20 7b 50  1.2 " tag "   {P
04d0: 48 52 41 53 45 20 33 20 30 20 74 61 67 7d 0a 64  HRASE 3 0 tag}.d
04e0: 6f 5f 69 63 75 5f 65 78 70 72 5f 74 65 73 74 20  o_icu_expr_test 
04f0: 31 2e 33 20 7b 22 78 20 79 20 7a 22 7d 20 7b 50  1.3 {"x y z"} {P
0500: 48 52 41 53 45 20 33 20 30 20 78 20 79 20 7a 7d  HRASE 3 0 x y z}
0510: 0a 64 6f 5f 69 63 75 5f 65 78 70 72 5f 74 65 73  .do_icu_expr_tes
0520: 74 20 31 2e 34 20 7b 78 20 4f 52 20 79 7d 20 20  t 1.4 {x OR y}  
0530: 20 20 20 20 20 7b 4f 52 20 7b 50 48 52 41 53 45       {OR {PHRASE
0540: 20 33 20 30 20 78 7d 20 7b 50 48 52 41 53 45 20   3 0 x} {PHRASE 
0550: 33 20 30 20 79 7d 7d 0a 64 6f 5f 69 63 75 5f 65  3 0 y}}.do_icu_e
0560: 78 70 72 5f 74 65 73 74 20 31 2e 35 20 7b 28 78  xpr_test 1.5 {(x
0570: 20 4f 52 20 79 29 7d 20 20 20 20 20 7b 4f 52 20   OR y)}     {OR 
0580: 7b 50 48 52 41 53 45 20 33 20 30 20 78 7d 20 7b  {PHRASE 3 0 x} {
0590: 50 48 52 41 53 45 20 33 20 30 20 79 7d 7d 0a 64  PHRASE 3 0 y}}.d
05a0: 6f 5f 69 63 75 5f 65 78 70 72 5f 74 65 73 74 20  o_icu_expr_test 
05b0: 31 2e 36 20 7b 20 22 28 78 20 4f 52 20 79 29 22  1.6 { "(x OR y)"
05c0: 20 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 28   } {PHRASE 3 0 (
05d0: 20 78 20 6f 72 20 79 20 29 7d 0a 0a 23 20 49 6e   x or y )}..# In
05e0: 20 22 63 6f 6c 3a 77 6f 72 64 22 2c 20 69 66 20   "col:word", if 
05f0: 22 63 6f 6c 22 20 69 73 20 6e 6f 74 20 74 68 65  "col" is not the
0600: 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d   name of a colum
0610: 6e 2c 20 74 68 65 20 65 6e 74 69 72 65 20 74 68  n, the entire th
0620: 69 6e 67 0a 23 20 69 73 20 70 61 73 73 65 64 20  ing.# is passed 
0630: 74 6f 20 74 68 65 20 74 6f 6b 65 6e 69 7a 65 72  to the tokenizer
0640: 2e 0a 23 0a 64 6f 5f 69 63 75 5f 65 78 70 72 5f  ..#.do_icu_expr_
0650: 74 65 73 74 20 31 2e 37 20 7b 61 3a 77 6f 72 64  test 1.7 {a:word
0660: 7d 20 7b 50 48 52 41 53 45 20 30 20 30 20 77 6f  } {PHRASE 0 0 wo
0670: 72 64 7d 0a 64 6f 5f 69 63 75 5f 65 78 70 72 5f  rd}.do_icu_expr_
0680: 74 65 73 74 20 31 2e 38 20 7b 64 3a 77 6f 72 64  test 1.8 {d:word
0690: 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 64 3a  } {PHRASE 3 0 d:
06a0: 77 6f 72 64 7d 0a 0a 73 65 74 20 73 71 6c 69 74  word}..set sqlit
06b0: 65 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61  e_fts3_enable_pa
06c0: 72 65 6e 74 68 65 73 65 73 20 30 0a 0a 64 6f 5f  rentheses 0..do_
06d0: 69 63 75 5f 65 78 70 72 5f 74 65 73 74 20 32 2e  icu_expr_test 2.
06e0: 31 20 7b 0a 20 20 66 20 28 65 20 4e 45 41 52 2f  1 {.  f (e NEAR/
06f0: 32 20 61 29 0a 7d 20 7b 41 4e 44 20 7b 41 4e 44  2 a).} {AND {AND
0700: 20 7b 41 4e 44 20 7b 50 48 52 41 53 45 20 33 20   {AND {PHRASE 3 
0710: 30 20 66 7d 20 7b 50 48 52 41 53 45 20 33 20 30  0 f} {PHRASE 3 0
0720: 20 28 7d 7d 20 7b 4e 45 41 52 2f 32 20 7b 50 48   (}} {NEAR/2 {PH
0730: 52 41 53 45 20 33 20 30 20 65 7d 20 7b 50 48 52  RASE 3 0 e} {PHR
0740: 41 53 45 20 33 20 30 20 61 7d 7d 7d 20 7b 50 48  ASE 3 0 a}}} {PH
0750: 52 41 53 45 20 33 20 30 20 29 7d 7d 0a 0a 23 2d  RASE 3 0 )}}..#-
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 2d  ----------------
0790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
07a0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 64 6f 5f 73 69  --------.#.do_si
07b0: 6d 70 6c 65 5f 65 78 70 72 5f 74 65 73 74 20 33  mple_expr_test 3
07c0: 2e 31 20 7b 2a 6c 4f 6c 2a 20 2a 68 34 68 2a 7d  .1 {*lOl* *h4h*}
07d0: 20 7b 0a 20 20 41 4e 44 20 7b 50 48 52 41 53 45   {.  AND {PHRASE
07e0: 20 33 20 30 20 6c 6f 6c 2b 7d 20 7b 50 48 52 41   3 0 lol+} {PHRA
07f0: 53 45 20 33 20 30 20 68 34 68 2b 7d 0a 7d 0a 0a  SE 3 0 h4h+}.}..
0800: 64 6f 5f 69 63 75 5f 65 78 70 72 5f 74 65 73 74  do_icu_expr_test
0810: 20 33 2e 32 20 7b 2a 6c 4f 6c 2a 20 2a 68 34 68   3.2 {*lOl* *h4h
0820: 2a 7d 20 7b 0a 20 20 41 4e 44 20 7b 41 4e 44 20  *} {.  AND {AND 
0830: 7b 41 4e 44 20 7b 50 48 52 41 53 45 20 33 20 30  {AND {PHRASE 3 0
0840: 20 2a 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20   *} {PHRASE 3 0 
0850: 6c 6f 6c 2b 7d 7d 20 7b 50 48 52 41 53 45 20 33  lol+}} {PHRASE 3
0860: 20 30 20 2a 7d 7d 20 7b 50 48 52 41 53 45 20 33   0 *}} {PHRASE 3
0870: 20 30 20 68 34 68 2b 7d 0a 7d 0a 0a 64 6f 5f 73   0 h4h+}.}..do_s
0880: 69 6d 70 6c 65 5f 65 78 70 72 5f 74 65 73 74 20  imple_expr_test 
0890: 33 2e 33 20 7b 20 2a 20 7d 20 20 20 20 7b 20 7d  3.3 { * }    { }
08a0: 0a 64 6f 5f 73 69 6d 70 6c 65 5f 65 78 70 72 5f  .do_simple_expr_
08b0: 74 65 73 74 20 33 2e 34 20 7b 20 2a 61 20 7d 20  test 3.4 { *a } 
08c0: 20 20 7b 20 50 48 52 41 53 45 20 33 20 30 20 61    { PHRASE 3 0 a
08d0: 20 7d 0a 64 6f 5f 73 69 6d 70 6c 65 5f 65 78 70   }.do_simple_exp
08e0: 72 5f 74 65 73 74 20 33 2e 35 20 7b 20 61 2a 62  r_test 3.5 { a*b
08f0: 20 7d 20 20 7b 20 41 4e 44 20 7b 50 48 52 41 53   }  { AND {PHRAS
0900: 45 20 33 20 30 20 61 2b 7d 20 7b 50 48 52 41 53  E 3 0 a+} {PHRAS
0910: 45 20 33 20 30 20 62 7d 20 7d 0a 64 6f 5f 73 69  E 3 0 b} }.do_si
0920: 6d 70 6c 65 5f 65 78 70 72 5f 74 65 73 74 20 33  mple_expr_test 3
0930: 2e 36 20 7b 20 2a 61 2a 62 20 7d 20 7b 20 41 4e  .6 { *a*b } { AN
0940: 44 20 7b 50 48 52 41 53 45 20 33 20 30 20 61 2b  D {PHRASE 3 0 a+
0950: 7d 20 7b 50 48 52 41 53 45 20 33 20 30 20 62 7d  } {PHRASE 3 0 b}
0960: 20 7d 0a 64 6f 5f 73 69 6d 70 6c 65 5f 65 78 70   }.do_simple_exp
0970: 72 5f 74 65 73 74 20 33 2e 37 20 7b 20 2a 22 61  r_test 3.7 { *"a
0980: 62 63 22 20 7d 20 7b 20 50 48 52 41 53 45 20 33  bc" } { PHRASE 3
0990: 20 30 20 61 62 63 20 7d 0a 64 6f 5f 73 69 6d 70   0 abc }.do_simp
09a0: 6c 65 5f 65 78 70 72 5f 74 65 73 74 20 33 2e 38  le_expr_test 3.8
09b0: 20 7b 20 22 61 62 63 22 2a 20 7d 20 7b 20 50 48   { "abc"* } { PH
09c0: 52 41 53 45 20 33 20 30 20 61 62 63 20 7d 0a 64  RASE 3 0 abc }.d
09d0: 6f 5f 73 69 6d 70 6c 65 5f 65 78 70 72 5f 74 65  o_simple_expr_te
09e0: 73 74 20 33 2e 38 20 7b 20 22 61 62 2a 63 22 20  st 3.8 { "ab*c" 
09f0: 7d 20 7b 20 50 48 52 41 53 45 20 33 20 30 20 61  } { PHRASE 3 0 a
0a00: 62 2b 20 63 20 7d 0a 0a 64 6f 5f 69 63 75 5f 65  b+ c }..do_icu_e
0a10: 78 70 72 5f 74 65 73 74 20 20 20 20 33 2e 39 20  xpr_test    3.9 
0a20: 7b 20 22 61 62 2a 63 22 20 7d 20 7b 20 50 48 52  { "ab*c" } { PHR
0a30: 41 53 45 20 33 20 30 20 61 62 2b 20 2a 20 63 20  ASE 3 0 ab+ * c 
0a40: 7d 0a 64 6f 5f 69 63 75 5f 65 78 70 72 5f 74 65  }.do_icu_expr_te
0a50: 73 74 20 20 20 20 33 2e 31 30 20 7b 20 61 62 2a  st    3.10 { ab*
0a60: 63 20 7d 20 7b 20 41 4e 44 20 7b 50 48 52 41 53  c } { AND {PHRAS
0a70: 45 20 33 20 30 20 61 62 2b 7d 20 7b 50 48 52 41  E 3 0 ab+} {PHRA
0a80: 53 45 20 33 20 30 20 63 7d 7d 0a 0a 66 69 6e 69  SE 3 0 c}}..fini
0a90: 73 68 5f 74 65 73 74 0a                          sh_test.