/ Hex Artifact Content
Login

Artifact 3fcf2365c00a15fc9704233674789a3b95131d12de18a9b996159f6909dc8079:


0000: 23 20 32 30 31 37 20 4e 6f 76 65 6d 62 65 72 20  # 2017 November 
0010: 32 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  25.#.# 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 0a 0a 73 6f 75 72 63 65  ********..source
0170: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c   [file join [fil
0180: 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20  e dirname [info 
0190: 73 63 72 69 70 74 5d 5d 20 66 74 73 35 5f 63 6f  script]] fts5_co
01a0: 6d 6d 6f 6e 2e 74 63 6c 5d 0a 73 65 74 20 74 65  mmon.tcl].set te
01b0: 73 74 70 72 65 66 69 78 20 66 74 73 35 66 69 72  stprefix fts5fir
01c0: 73 74 0a 0a 69 66 63 61 70 61 62 6c 65 20 21 66  st..ifcapable !f
01d0: 74 73 35 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74  ts5 {.  finish_t
01e0: 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a  est.  return.}..
01f0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0200: 20 31 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20   1.0 {.  CREATE 
0210: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 31  VIRTUAL TABLE x1
0220: 20 55 53 49 4e 47 20 66 74 73 35 28 61 2c 20 62   USING fts5(a, b
0230: 29 3b 0a 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 74  );.}..foreach {t
0240: 6e 20 65 78 70 72 20 6f 6b 7d 20 7b 0a 20 20 31  n expr ok} {.  1
0250: 20 7b 5e 61 62 63 7d 20 20 20 20 20 20 20 20 20   {^abc}         
0260: 20 20 31 0a 20 20 32 20 7b 5e 61 62 63 20 2b 20    1.  2 {^abc + 
0270: 64 65 66 7d 20 20 20 20 20 31 0a 20 20 33 20 7b  def}     1.  3 {
0280: 5e 20 22 61 62 63 20 64 65 66 22 7d 20 20 20 20  ^ "abc def"}    
0290: 31 0a 20 20 34 20 7b 5e 22 61 62 63 20 64 65 66  1.  4 {^"abc def
02a0: 22 7d 20 20 20 20 20 31 0a 20 20 35 20 7b 61 62  "}     1.  5 {ab
02b0: 63 20 5e 64 65 66 7d 20 20 20 20 20 20 20 31 0a  c ^def}       1.
02c0: 20 20 36 20 7b 61 62 63 20 2b 20 5e 64 65 66 7d    6 {abc + ^def}
02d0: 20 20 20 20 20 30 0a 20 20 37 20 7b 61 62 63 20       0.  7 {abc 
02e0: 5e 2b 20 64 65 66 7d 20 20 20 20 20 30 0a 20 20  ^+ def}     0.  
02f0: 38 20 7b 22 5e 61 62 63 22 7d 20 20 20 20 20 20  8 {"^abc"}      
0300: 20 20 20 31 0a 20 20 39 20 7b 4e 45 41 52 28 5e     1.  9 {NEAR(^
0310: 61 62 63 20 64 65 66 29 7d 20 30 0a 7d 20 7b 0a  abc def)} 0.} {.
0320: 20 20 73 65 74 20 72 65 73 28 30 29 20 7b 2f 31    set res(0) {/1
0330: 20 7b 66 74 73 35 3a 20 73 79 6e 74 61 78 20 65   {fts5: syntax e
0340: 72 72 6f 72 20 6e 65 61 72 20 2e 2a 7d 2f 7d 0a  rror near .*}/}.
0350: 20 20 73 65 74 20 72 65 73 28 31 29 20 7b 30 20    set res(1) {0 
0360: 7b 7d 7d 0a 0a 20 20 64 6f 5f 63 61 74 63 68 73  {}}..  do_catchs
0370: 71 6c 5f 74 65 73 74 20 31 2e 24 74 6e 20 7b 20  ql_test 1.$tn { 
0380: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 31  SELECT * FROM x1
0390: 28 24 65 78 70 72 29 20 7d 20 24 72 65 73 28 24  ($expr) } $res($
03a0: 6f 6b 29 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  ok).}..#--------
03b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03f0: 2d 0a 23 20 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  -.# .do_execsql_
0400: 74 65 73 74 20 32 2e 30 20 7b 0a 20 20 49 4e 53  test 2.0 {.  INS
0410: 45 52 54 20 49 4e 54 4f 20 78 31 20 56 41 4c 55  ERT INTO x1 VALU
0420: 45 53 28 27 61 20 62 20 63 27 2c 20 27 62 20 63  ES('a b c', 'b c
0430: 20 61 27 29 3b 0a 7d 0a 0a 66 6f 72 65 61 63 68   a');.}..foreach
0440: 20 7b 74 6e 20 65 78 70 72 20 6d 61 74 63 68 7d   {tn expr match}
0450: 20 7b 0a 20 20 31 20 7b 5e 61 7d 20 31 0a 20 20   {.  1 {^a} 1.  
0460: 32 20 7b 5e 62 7d 20 31 0a 20 20 33 20 7b 5e 63  2 {^b} 1.  3 {^c
0470: 7d 20 30 0a 20 20 34 20 7b 5e 61 20 2b 20 62 7d  } 0.  4 {^a + b}
0480: 20 31 0a 20 20 35 20 7b 5e 62 20 2b 20 63 7d 20   1.  5 {^b + c} 
0490: 31 0a 20 20 36 20 7b 5e 63 20 2b 20 61 7d 20 30  1.  6 {^c + a} 0
04a0: 0a 20 20 37 20 7b 5e 22 63 20 61 22 7d 20 30 0a  .  7 {^"c a"} 0.
04b0: 20 20 38 20 7b 61 3a 5e 61 7d 20 31 0a 20 20 39    8 {a:^a} 1.  9
04c0: 20 7b 61 3a 5e 62 7d 20 30 0a 20 20 31 30 20 7b   {a:^b} 0.  10 {
04d0: 61 3a 5e 22 61 20 62 22 7d 20 31 0a 7d 20 7b 0a  a:^"a b"} 1.} {.
04e0: 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73    do_execsql_tes
04f0: 74 20 32 2e 24 74 6e 20 7b 20 53 45 4c 45 43 54  t 2.$tn { SELECT
0500: 20 45 58 49 53 54 53 20 28 53 45 4c 45 43 54 20   EXISTS (SELECT 
0510: 72 6f 77 69 64 20 46 52 4f 4d 20 78 31 28 24 65  rowid FROM x1($e
0520: 78 70 72 29 29 20 7d 20 24 6d 61 74 63 68 0a 7d  xpr)) } $match.}
0530: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
0540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 0a  ------------.# .
0580: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0590: 33 2e 30 20 7b 0a 20 20 44 45 4c 45 54 45 20 46  3.0 {.  DELETE F
05a0: 52 4f 4d 20 78 31 3b 0a 20 20 49 4e 53 45 52 54  ROM x1;.  INSERT
05b0: 20 49 4e 54 4f 20 78 31 20 56 41 4c 55 45 53 28   INTO x1 VALUES(
05c0: 27 62 20 61 27 2c 20 27 63 20 61 27 29 3b 0a 20  'b a', 'c a');. 
05d0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31 20   INSERT INTO x1 
05e0: 56 41 4c 55 45 53 28 27 61 20 61 27 2c 20 27 63  VALUES('a a', 'c
05f0: 20 63 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49   c');.  INSERT I
0600: 4e 54 4f 20 78 31 20 56 41 4c 55 45 53 28 27 61  NTO x1 VALUES('a
0610: 20 62 27 2c 20 27 61 20 61 27 29 3b 0a 7d 0a 66   b', 'a a');.}.f
0620: 74 73 35 5f 61 75 78 5f 74 65 73 74 5f 66 75 6e  ts5_aux_test_fun
0630: 63 74 69 6f 6e 73 20 64 62 0a 0a 66 6f 72 65 61  ctions db..forea
0640: 63 68 20 7b 74 6e 20 65 78 70 72 20 65 78 70 65  ch {tn expr expe
0650: 63 74 7d 20 7b 0a 20 20 31 20 7b 5e 61 7d 20 7b  ct} {.  1 {^a} {
0660: 7b 32 20 31 7d 7d 0a 20 20 32 20 7b 5e 63 20 41  {2 1}}.  2 {^c A
0670: 4e 44 20 5e 62 7d 20 7b 7b 30 20 32 7d 20 7b 31  ND ^b} {{0 2} {1
0680: 20 30 7d 7d 0a 7d 20 7b 0a 20 20 64 6f 5f 65 78   0}}.} {.  do_ex
0690: 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 24 74 6e  ecsql_test 3.$tn
06a0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 66 74   {.    SELECT ft
06b0: 73 35 5f 74 65 73 74 5f 71 75 65 72 79 70 68 72  s5_test_queryphr
06c0: 61 73 65 28 78 31 29 20 46 52 4f 4d 20 78 31 28  ase(x1) FROM x1(
06d0: 24 65 78 70 72 29 20 4c 49 4d 49 54 20 31 0a 20  $expr) LIMIT 1. 
06e0: 20 7d 20 5b 6c 69 73 74 20 24 65 78 70 65 63 74   } [list $expect
06f0: 5d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ].}..#----------
0700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
0740: 23 20 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  # .do_execsql_te
0750: 73 74 20 33 2e 31 20 7b 0a 20 20 43 52 45 41 54  st 3.1 {.  CREAT
0760: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
0770: 78 32 20 55 53 49 4e 47 20 66 74 73 35 28 61 2c  x2 USING fts5(a,
0780: 20 62 2c 20 63 2c 20 64 65 74 61 69 6c 3d 63 6f   b, c, detail=co
0790: 6c 75 6d 6e 29 3b 0a 7d 0a 0a 64 6f 5f 63 61 74  lumn);.}..do_cat
07a0: 63 68 73 71 6c 5f 74 65 73 74 20 33 2e 32 20 7b  chsql_test 3.2 {
07b0: 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  .  SELECT * FROM
07c0: 20 78 32 28 27 61 20 2b 20 62 27 29 3b 0a 7d 20   x2('a + b');.} 
07d0: 7b 31 20 7b 66 74 73 35 3a 20 70 68 72 61 73 65  {1 {fts5: phrase
07e0: 20 71 75 65 72 69 65 73 20 61 72 65 20 6e 6f 74   queries are not
07f0: 20 73 75 70 70 6f 72 74 65 64 20 28 64 65 74 61   supported (deta
0800: 69 6c 21 3d 66 75 6c 6c 29 7d 7d 0a 0a 64 6f 5f  il!=full)}}..do_
0810: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 33 2e  catchsql_test 3.
0820: 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  3 {.  SELECT * F
0830: 52 4f 4d 20 78 32 28 27 5e 61 27 29 3b 0a 7d 20  ROM x2('^a');.} 
0840: 7b 31 20 7b 66 74 73 35 3a 20 70 68 72 61 73 65  {1 {fts5: phrase
0850: 20 71 75 65 72 69 65 73 20 61 72 65 20 6e 6f 74   queries are not
0860: 20 73 75 70 70 6f 72 74 65 64 20 28 64 65 74 61   supported (deta
0870: 69 6c 21 3d 66 75 6c 6c 29 7d 7d 0a 66 69 6e 69  il!=full)}}.fini
0880: 73 68 5f 74 65 73 74 0a                          sh_test.