SQLite4
Hex Artifact Content
Not logged in

Artifact 53e9eccf4c1fb139d5f206b316d2472d43c0a81a:


0000: 23 20 32 30 31 32 20 44 65 63 65 6d 62 65 72 20  # 2012 December 
0010: 31 37 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  17.#.# 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 0a 23 0a 0a  **********.#.#..
0170: 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c  set testdir [fil
0180: 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30  e dirname $argv0
0190: 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69  ].source $testdi
01a0: 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 73 65 74  r/tester.tcl.set
01b0: 20 74 65 73 74 70 72 65 66 69 78 20 66 74 73 35   testprefix fts5
01c0: 71 75 65 72 79 31 0a 0a 64 6f 5f 65 78 65 63 73  query1..do_execs
01d0: 71 6c 5f 74 65 73 74 20 31 2e 30 20 7b 0a 20 20  ql_test 1.0 {.  
01e0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
01f0: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62  a PRIMARY KEY, b
0200: 2c 20 63 29 3b 0a 20 20 43 52 45 41 54 45 20 49  , c);.  CREATE I
0210: 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 20 55 53  NDEX i1 ON t1 US
0220: 49 4e 47 20 66 74 73 35 28 29 3b 0a 7d 0a 0a 66  ING fts5();.}..f
0230: 6f 72 65 61 63 68 20 7b 74 6e 20 73 74 6d 74 7d  oreach {tn stmt}
0240: 20 7b 0a 20 20 31 20 22 49 4e 53 45 52 54 20 49   {.  1 "INSERT I
0250: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c  NTO t1 VALUES(1,
0260: 20 27 61 20 62 20 63 27 2c 20 27 64 20 65 20 66   'a b c', 'd e f
0270: 27 29 22 0a 20 20 32 20 22 49 4e 53 45 52 54 20  ')".  2 "INSERT 
0280: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32  INTO t1 VALUES(2
0290: 2c 20 27 62 20 63 20 65 27 2c 20 27 41 20 41 20  , 'b c e', 'A A 
02a0: 61 27 29 22 0a 20 20 33 20 22 49 4e 53 45 52 54  a')".  3 "INSERT
02b0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
02c0: 33 2c 20 27 64 20 41 20 41 27 2c 20 27 65 20 63  3, 'd A A', 'e c
02d0: 20 61 27 29 22 0a 20 20 34 20 22 44 45 4c 45 54   a')".  4 "DELET
02e0: 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  E FROM t1 WHERE 
02f0: 61 3d 31 22 0a 20 20 35 20 22 44 45 4c 45 54 45  a=1".  5 "DELETE
0300: 20 46 52 4f 4d 20 74 31 22 0a 20 20 36 20 22 49   FROM t1".  6 "I
0310: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0320: 4c 55 45 53 28 31 2c 20 27 4d 61 79 20 79 6f 75  LUES(1, 'May you
0330: 20 64 6f 27 2c 20 27 67 6f 6f 64 20 61 6e 64 20   do', 'good and 
0340: 6e 6f 74 20 65 76 69 6c 27 29 22 0a 20 20 37 20  not evil')".  7 
0350: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
0360: 56 41 4c 55 45 53 28 32 2c 20 27 4d 61 79 20 79  VALUES(2, 'May y
0370: 6f 75 20 66 69 6e 64 27 2c 20 27 66 6f 72 67 69  ou find', 'forgi
0380: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
0390: 65 6c 66 27 29 22 0a 20 20 38 20 22 55 50 44 41  elf')".  8 "UPDA
03a0: 54 45 20 74 31 20 53 45 54 20 62 20 3d 20 27 61  TE t1 SET b = 'a
03b0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
03c0: 73 27 20 57 48 45 52 45 20 61 20 3d 20 32 22 0a  s' WHERE a = 2".
03d0: 20 20 39 20 22 55 50 44 41 54 45 20 74 31 20 53    9 "UPDATE t1 S
03e0: 45 54 20 61 20 3d 20 34 2c 20 63 20 3d 20 27 61  ET a = 4, c = 'a
03f0: 20 62 20 63 20 64 27 20 57 48 45 52 45 20 61 20   b c d' WHERE a 
0400: 3d 20 32 22 0a 7d 20 7b 0a 20 20 64 6f 5f 65 78  = 2".} {.  do_ex
0410: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 24 74 6e  ecsql_test 1.$tn
0420: 2e 31 20 24 73 74 6d 74 0a 20 20 64 6f 5f 65 78  .1 $stmt.  do_ex
0430: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 24 74 6e  ecsql_test 1.$tn
0440: 2e 32 20 7b 50 52 41 47 4d 41 20 66 74 73 5f 63  .2 {PRAGMA fts_c
0450: 68 65 63 6b 28 69 31 29 7d 20 6f 6b 0a 7d 0a 0a  heck(i1)} ok.}..
0460: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0470: 32 2e 30 20 7b 0a 20 20 44 52 4f 50 20 54 41 42  2.0 {.  DROP TAB
0480: 4c 45 20 74 31 3b 0a 20 20 43 52 45 41 54 45 20  LE t1;.  CREATE 
0490: 54 41 42 4c 45 20 74 31 28 78 20 50 52 49 4d 41  TABLE t1(x PRIMA
04a0: 52 59 20 4b 45 59 2c 20 79 29 3b 0a 20 20 43 52  RY KEY, y);.  CR
04b0: 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e  EATE INDEX i1 ON
04c0: 20 74 31 20 55 53 49 4e 47 20 66 74 73 35 28 29   t1 USING fts5()
04d0: 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  ;..  INSERT INTO
04e0: 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 27 6f   t1 VALUES(1, 'o
04f0: 20 6e 20 65 27 29 3b 0a 20 20 49 4e 53 45 52 54   n e');.  INSERT
0500: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0510: 32 2c 20 27 74 20 77 20 6f 27 29 3b 0a 20 20 49  2, 't w o');.  I
0520: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0530: 4c 55 45 53 28 33 2c 20 27 74 20 68 20 72 20 65  LUES(3, 't h r e
0540: 20 65 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49   e');.  INSERT I
0550: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34 2c  NTO t1 VALUES(4,
0560: 20 27 66 20 6f 20 75 20 72 27 29 3b 0a 7d 0a 0a   'f o u r');.}..
0570: 66 6f 72 65 61 63 68 20 7b 74 6e 20 73 74 6d 74  foreach {tn stmt
0580: 20 72 65 73 7d 20 7b 0a 20 20 31 20 7b 53 45 4c   res} {.  1 {SEL
0590: 45 43 54 20 78 20 46 52 4f 4d 20 74 31 20 57 48  ECT x FROM t1 WH
05a0: 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 74 27  ERE t1 MATCH 't'
05b0: 7d 20 20 20 7b 32 20 33 7d 0a 20 20 32 20 7b 53  }   {2 3}.  2 {S
05c0: 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31 20  ELECT x FROM t1 
05d0: 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27  WHERE t1 MATCH '
05e0: 61 62 63 27 7d 20 7b 7d 0a 20 20 33 20 7b 53 45  abc'} {}.  3 {SE
05f0: 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31 20 57  LECT x FROM t1 W
0600: 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 74  HERE t1 MATCH 't
0610: 2b 68 27 7d 20 7b 33 7d 0a 20 20 34 20 7b 53 45  +h'} {3}.  4 {SE
0620: 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31 20 57  LECT x FROM t1 W
0630: 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 74  HERE t1 MATCH 't
0640: 2b 6f 27 7d 20 7b 7d 0a 7d 20 7b 0a 20 20 64 6f  +o'} {}.} {.  do
0650: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e  _execsql_test 2.
0660: 24 74 6e 20 24 73 74 6d 74 20 24 72 65 73 0a 7d  $tn $stmt $res.}
0670: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
0680: 74 20 33 2e 30 20 7b 0a 20 20 44 52 4f 50 20 54  t 3.0 {.  DROP T
0690: 41 42 4c 45 20 74 31 3b 0a 20 20 43 52 45 41 54  ABLE t1;.  CREAT
06a0: 45 20 54 41 42 4c 45 20 74 31 28 78 20 50 52 49  E TABLE t1(x PRI
06b0: 4d 41 52 59 20 4b 45 59 2c 20 79 29 3b 0a 20 20  MARY KEY, y);.  
06c0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20  CREATE INDEX i1 
06d0: 4f 4e 20 74 31 20 55 53 49 4e 47 20 66 74 73 35  ON t1 USING fts5
06e0: 28 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e  ();..  INSERT IN
06f0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20  TO t1 VALUES(1, 
0700: 27 61 20 62 20 63 20 64 20 65 20 66 20 67 20 68  'a b c d e f g h
0710: 20 69 20 6a 20 6b 20 6c 20 6d 20 6e 20 6f 20 70   i j k l m n o p
0720: 20 71 20 72 20 73 20 74 20 75 27 29 3b 0a 20 20   q r s t u');.  
0730: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0740: 41 4c 55 45 53 28 32 2c 20 27 61 20 65 20 69 20  ALUES(2, 'a e i 
0750: 6f 20 75 20 62 20 63 20 64 20 66 20 67 20 68 20  o u b c d f g h 
0760: 6a 20 6b 20 6c 20 6d 20 6e 20 70 20 71 20 72 20  j k l m n p q r 
0770: 73 20 74 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  s t');.  INSERT 
0780: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33  INTO t1 VALUES(3
0790: 2c 20 27 62 20 63 20 64 20 66 20 67 20 68 20 6a  , 'b c d f g h j
07a0: 20 6b 20 6c 20 6d 20 6e 20 70 20 71 20 72 20 73   k l m n p q r s
07b0: 20 74 20 76 20 77 20 78 20 79 20 7a 27 29 3b 0a   t v w x y z');.
07c0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
07d0: 20 56 41 4c 55 45 53 28 34 2c 20 27 61 20 65 20   VALUES(4, 'a e 
07e0: 69 20 6f 20 75 27 29 3b 0a 7d 0a 0a 66 6f 72 65  i o u');.}..fore
07f0: 61 63 68 20 7b 74 6e 20 73 74 6d 74 20 72 65 73  ach {tn stmt res
0800: 7d 20 7b 0a 20 20 31 20 20 7b 53 45 4c 45 43 54  } {.  1  {SELECT
0810: 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   x FROM t1 WHERE
0820: 20 74 31 20 4d 41 54 43 48 20 27 61 20 4e 45 41   t1 MATCH 'a NEA
0830: 52 2f 35 20 69 27 7d 20 20 20 20 20 20 20 7b 32  R/5 i'}       {2
0840: 20 34 7d 0a 20 20 32 20 20 7b 53 45 4c 45 43 54   4}.  2  {SELECT
0850: 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   x FROM t1 WHERE
0860: 20 74 31 20 4d 41 54 43 48 20 27 61 20 4e 45 41   t1 MATCH 'a NEA
0870: 52 2f 33 20 62 27 7d 20 20 20 20 20 20 20 7b 31  R/3 b'}       {1
0880: 7d 0a 20 20 33 20 20 7b 53 45 4c 45 43 54 20 78  }.  3  {SELECT x
0890: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74   FROM t1 WHERE t
08a0: 31 20 4d 41 54 43 48 20 27 61 20 4e 45 41 52 2f  1 MATCH 'a NEAR/
08b0: 32 20 64 27 7d 20 20 20 20 20 20 20 7b 31 7d 0a  2 d'}       {1}.
08c0: 20 20 34 20 20 7b 53 45 4c 45 43 54 20 78 20 46    4  {SELECT x F
08d0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20  ROM t1 WHERE t1 
08e0: 4d 41 54 43 48 20 27 61 20 4e 45 41 52 2f 32 20  MATCH 'a NEAR/2 
08f0: 65 27 7d 20 20 20 20 20 20 20 7b 32 20 34 7d 0a  e'}       {2 4}.
0900: 20 20 35 20 20 7b 53 45 4c 45 43 54 20 78 20 46    5  {SELECT x F
0910: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20  ROM t1 WHERE t1 
0920: 4d 41 54 43 48 20 27 61 20 4e 45 41 52 2f 33 20  MATCH 'a NEAR/3 
0930: 65 27 7d 20 20 20 20 20 20 20 7b 31 20 32 20 34  e'}       {1 2 4
0940: 7d 0a 20 20 36 20 20 7b 53 45 4c 45 43 54 20 78  }.  6  {SELECT x
0950: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74   FROM t1 WHERE t
0960: 31 20 4d 41 54 43 48 20 27 62 2b 63 20 4e 45 41  1 MATCH 'b+c NEA
0970: 52 2f 32 20 67 2b 68 27 7d 20 20 20 7b 32 20 33  R/2 g+h'}   {2 3
0980: 7d 0a 20 20 37 20 20 7b 53 45 4c 45 43 54 20 78  }.  7  {SELECT x
0990: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74   FROM t1 WHERE t
09a0: 31 20 4d 41 54 43 48 20 27 62 2b 63 20 4e 45 41  1 MATCH 'b+c NEA
09b0: 52 2f 33 20 67 2b 68 27 7d 20 20 20 7b 31 20 32  R/3 g+h'}   {1 2
09c0: 20 33 7d 0a 20 20 38 20 20 7b 53 45 4c 45 43 54   3}.  8  {SELECT
09d0: 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   x FROM t1 WHERE
09e0: 20 74 31 20 4d 41 54 43 48 20 27 62 2b 63 20 4e   t1 MATCH 'b+c N
09f0: 45 41 52 2f 32 20 67 2b 68 2b 6a 27 7d 20 7b 32  EAR/2 g+h+j'} {2
0a00: 20 33 7d 0a 20 20 39 20 20 7b 53 45 4c 45 43 54   3}.  9  {SELECT
0a10: 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   x FROM t1 WHERE
0a20: 20 74 31 20 4d 41 54 43 48 20 27 62 2b 63 2b 64   t1 MATCH 'b+c+d
0a30: 20 4e 45 41 52 2f 31 20 67 2b 68 27 7d 20 7b 32   NEAR/1 g+h'} {2
0a40: 20 33 7d 0a 20 20 31 30 20 7b 53 45 4c 45 43 54   3}.  10 {SELECT
0a50: 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   x FROM t1 WHERE
0a60: 20 74 31 20 4d 41 54 43 48 20 27 61 20 41 4e 44   t1 MATCH 'a AND
0a70: 20 64 27 7d 20 20 20 20 20 20 20 20 20 20 7b 31   d'}          {1
0a80: 20 32 7d 0a 20 20 31 31 20 7b 53 45 4c 45 43 54   2}.  11 {SELECT
0a90: 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   x FROM t1 WHERE
0aa0: 20 74 31 20 4d 41 54 43 48 20 27 61 20 4f 52 20   t1 MATCH 'a OR 
0ab0: 64 27 7d 20 20 20 20 20 20 20 20 20 20 20 7b 31  d'}           {1
0ac0: 20 32 20 33 20 34 7d 0a 20 20 31 32 20 7b 53 45   2 3 4}.  12 {SE
0ad0: 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31 20 57  LECT x FROM t1 W
0ae0: 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 61  HERE t1 MATCH 'a
0af0: 20 4e 4f 54 20 64 27 7d 20 20 20 20 20 20 20 20   NOT d'}        
0b00: 20 20 7b 34 7d 0a 7d 20 7b 0a 20 20 64 6f 5f 65    {4}.} {.  do_e
0b10: 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 24 74  xecsql_test 3.$t
0b20: 6e 20 24 73 74 6d 74 20 24 72 65 73 0a 7d 0a 0a  n $stmt $res.}..
0b30: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0b40: 34 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54  4.0 {.  CREATE T
0b50: 41 42 4c 45 20 74 32 28 64 6f 63 69 64 20 50 52  ABLE t2(docid PR
0b60: 49 4d 41 52 59 20 4b 45 59 2c 20 61 2c 20 62 2c  IMARY KEY, a, b,
0b70: 20 63 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e   c);.  CREATE IN
0b80: 44 45 58 20 69 32 20 4f 4e 20 74 32 20 55 53 49  DEX i2 ON t2 USI
0b90: 4e 47 20 66 74 73 35 28 29 3b 0a 20 20 49 4e 53  NG fts5();.  INS
0ba0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
0bb0: 45 53 28 31 33 36 38 39 35 2c 20 27 71 6b 66 6c  ES(136895, 'qkfl
0bc0: 20 6d 79 20 71 6b 66 6c 20 6b 72 61 67 20 67 77   my qkfl krag gw
0bd0: 27 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a  ', NULL, NULL);.
0be0: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
0bf0: 73 74 20 34 2e 31 20 7b 0a 20 20 53 45 4c 45 43  st 4.1 {.  SELEC
0c00: 54 20 64 6f 63 69 64 20 46 52 4f 4d 20 74 32 20  T docid FROM t2 
0c10: 57 48 45 52 45 20 74 32 20 4d 41 54 43 48 20 27  WHERE t2 MATCH '
0c20: 71 6b 66 6c 20 4e 45 41 52 2f 32 20 67 77 27 3b  qkfl NEAR/2 gw';
0c30: 0a 7d 20 7b 31 33 36 38 39 35 7d 0a 0a 64 6f 5f  .} {136895}..do_
0c40: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 36 2e 30  execsql_test 6.0
0c50: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
0c60: 45 20 74 33 28 64 6f 63 69 64 20 50 52 49 4d 41  E t3(docid PRIMA
0c70: 52 59 20 4b 45 59 2c 20 61 2c 20 62 2c 20 63 29  RY KEY, a, b, c)
0c80: 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58  ;.  CREATE INDEX
0c90: 20 69 33 20 4f 4e 20 74 33 20 55 53 49 4e 47 20   i3 ON t3 USING 
0ca0: 66 74 73 35 28 29 3b 0a 20 20 49 4e 53 45 52 54  fts5();.  INSERT
0cb0: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28   INTO t3 VALUES(
0cc0: 31 32 33 2c 20 27 66 69 78 20 74 68 65 20 68 61  123, 'fix the ha
0cd0: 73 68 20 74 61 62 6c 65 27 2c 20 4e 55 4c 4c 2c  sh table', NULL,
0ce0: 20 4e 55 4c 4c 29 3b 0a 7d 0a 64 6f 5f 65 78 65   NULL);.}.do_exe
0cf0: 63 73 71 6c 5f 74 65 73 74 20 35 2e 31 20 7b 0a  csql_test 5.1 {.
0d00: 20 20 53 45 4c 45 43 54 20 64 6f 63 69 64 20 46    SELECT docid F
0d10: 52 4f 4d 20 74 33 20 57 48 45 52 45 20 74 33 20  ROM t3 WHERE t3 
0d20: 4d 41 54 43 48 20 27 68 2a 27 3b 0a 7d 20 7b 31  MATCH 'h*';.} {1
0d30: 32 33 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  23}..do_execsql_
0d40: 74 65 73 74 20 36 2e 30 20 7b 0a 20 20 42 45 47  test 6.0 {.  BEG
0d50: 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a  IN TRANSACTION;.
0d60: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
0d70: 20 74 34 28 64 6f 63 69 64 20 50 52 49 4d 41 52   t4(docid PRIMAR
0d80: 59 20 4b 45 59 2c 20 61 29 3b 0a 20 20 20 20 43  Y KEY, a);.    C
0d90: 52 45 41 54 45 20 49 4e 44 45 58 20 69 34 20 4f  REATE INDEX i4 O
0da0: 4e 20 74 34 20 55 53 49 4e 47 20 66 74 73 35 28  N t4 USING fts5(
0db0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0dc0: 54 4f 20 22 74 34 22 20 56 41 4c 55 45 53 28 33  TO "t4" VALUES(3
0dd0: 34 2c 20 27 61 62 63 20 6d 6e 6d 20 78 79 7a 27  4, 'abc mnm xyz'
0de0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0df0: 54 4f 20 22 74 34 22 20 56 41 4c 55 45 53 28 35  TO "t4" VALUES(5
0e00: 30 2c 20 27 61 62 63 20 6d 6e 6d 20 78 79 7a 27  0, 'abc mnm xyz'
0e10: 29 3b 0a 20 20 43 4f 4d 4d 49 54 3b 0a 7d 0a 64  );.  COMMIT;.}.d
0e20: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 36  o_execsql_test 6
0e30: 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 64 6f  .1 {.  SELECT do
0e40: 63 69 64 20 46 52 4f 4d 20 74 34 20 57 48 45 52  cid FROM t4 WHER
0e50: 45 20 74 34 20 4d 41 54 43 48 20 27 6d 2a 27 20  E t4 MATCH 'm*' 
0e60: 0a 7d 20 7b 33 34 20 35 30 7d 0a 0a 23 2d 2d 2d  .} {34 50}..#---
0e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0eb0: 2d 2d 2d 2d 2d 2d 0a 23 0a 64 6f 5f 65 78 65 63  ------.#.do_exec
0ec0: 73 71 6c 5f 74 65 73 74 20 37 2e 30 20 7b 0a 20  sql_test 7.0 {. 
0ed0: 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49   BEGIN TRANSACTI
0ee0: 4f 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  ON;.    CREATE T
0ef0: 41 42 4c 45 20 74 37 28 64 6f 63 69 64 20 50 52  ABLE t7(docid PR
0f00: 49 4d 41 52 59 20 4b 45 59 2c 20 61 2c 20 62 2c  IMARY KEY, a, b,
0f10: 20 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20   c);.    CREATE 
0f20: 49 4e 44 45 58 20 69 37 20 4f 4e 20 74 37 20 55  INDEX i7 ON t7 U
0f30: 53 49 4e 47 20 66 74 73 35 28 29 3b 0a 20 20 20  SING fts5();.   
0f40: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 20   INSERT INTO t7 
0f50: 56 41 4c 55 45 53 28 31 2c 20 27 61 20 62 20 63  VALUES(1, 'a b c
0f60: 27 2c 20 27 64 20 65 20 66 27 2c 20 27 61 20 62  ', 'd e f', 'a b
0f70: 20 63 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54   c');.    INSERT
0f80: 20 49 4e 54 4f 20 74 37 20 56 41 4c 55 45 53 28   INTO t7 VALUES(
0f90: 32 2c 20 27 78 20 79 20 7a 27 2c 20 27 61 20 62  2, 'x y z', 'a b
0fa0: 20 63 27 2c 20 27 61 20 62 20 63 27 29 3b 0a 20   c', 'a b c');. 
0fb0: 20 43 4f 4d 4d 49 54 3b 0a 7d 0a 0a 66 6f 72 65   COMMIT;.}..fore
0fc0: 61 63 68 20 7b 74 6e 20 65 78 70 72 20 72 65 73  ach {tn expr res
0fd0: 7d 20 7b 0a 20 20 31 20 7b 61 7d 20 20 20 20 7b  } {.  1 {a}    {
0fe0: 31 20 32 7d 0a 20 20 32 20 7b 61 3a 61 7d 20 20  1 2}.  2 {a:a}  
0ff0: 7b 31 7d 0a 20 20 33 20 7b 62 3a 61 7d 20 20 7b  {1}.  3 {b:a}  {
1000: 32 7d 0a 20 20 34 20 7b 63 3a 61 7d 20 20 7b 31  2}.  4 {c:a}  {1
1010: 20 32 7d 0a 20 20 35 20 7b 61 3a 61 2a 7d 20 7b   2}.  5 {a:a*} {
1020: 31 7d 0a 7d 20 7b 0a 20 20 64 6f 5f 65 78 65 63  1}.} {.  do_exec
1030: 73 71 6c 5f 74 65 73 74 20 37 2e 24 74 6e 20 7b  sql_test 7.$tn {
1040: 53 45 4c 45 43 54 20 64 6f 63 69 64 20 46 52 4f  SELECT docid FRO
1050: 4d 20 74 37 20 57 48 45 52 45 20 74 37 20 4d 41  M t7 WHERE t7 MA
1060: 54 43 48 20 24 65 78 70 72 7d 20 24 72 65 73 0a  TCH $expr} $res.
1070: 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }..#------------
1080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a  -------------.#.
10c0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
10d0: 38 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54  8.0 {.  CREATE T
10e0: 41 42 4c 45 20 74 38 28 61 20 50 52 49 4d 41 52  ABLE t8(a PRIMAR
10f0: 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a 20 20  Y KEY, b, c);.  
1100: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 38 20  CREATE INDEX i8 
1110: 4f 4e 20 74 38 20 55 53 49 4e 47 20 66 74 73 35  ON t8 USING fts5
1120: 28 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ();.  INSERT INT
1130: 4f 20 74 38 20 56 41 4c 55 45 53 28 27 6f 6e 65  O t8 VALUES('one
1140: 27 2c 20 27 61 20 62 20 63 27 2c 20 27 61 20 61  ', 'a b c', 'a a
1150: 20 61 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49   a');.  INSERT I
1160: 4e 54 4f 20 74 38 20 56 41 4c 55 45 53 28 27 74  NTO t8 VALUES('t
1170: 77 6f 27 2c 20 27 64 20 65 20 66 27 2c 20 27 62  wo', 'd e f', 'b
1180: 20 62 20 62 27 29 3b 0a 7d 0a 0a 23 64 6f 5f 65   b b');.}..#do_e
1190: 78 65 63 73 71 6c 5f 74 65 73 74 20 38 2e 31 20  xecsql_test 8.1 
11a0: 7b 0a 23 20 20 53 45 4c 45 43 54 20 72 61 6e 6b  {.#  SELECT rank
11b0: 28 74 38 29 20 46 52 4f 4d 20 74 38 20 57 48 45  (t8) FROM t8 WHE
11c0: 52 45 20 74 38 20 4d 41 54 43 48 20 27 62 20 61  RE t8 MATCH 'b a
11d0: 27 0a 23 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c  '.#}..do_execsql
11e0: 5f 74 65 73 74 20 39 2e 30 20 7b 0a 20 20 43 52  _test 9.0 {.  CR
11f0: 45 41 54 45 20 54 41 42 4c 45 20 74 39 28 61 20  EATE TABLE t9(a 
1200: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b  PRIMARY KEY, b);
1210: 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  .  CREATE INDEX 
1220: 69 39 20 4f 4e 20 74 39 20 55 53 49 4e 47 20 66  i9 ON t9 USING f
1230: 74 73 35 28 29 3b 0a 20 20 49 4e 53 45 52 54 20  ts5();.  INSERT 
1240: 49 4e 54 4f 20 74 39 20 56 41 4c 55 45 53 28 27  INTO t9 VALUES('
1250: 6f 6e 65 27 2c 20 0a 20 20 20 20 27 61 20 62 20  one', .    'a b 
1260: 63 20 64 20 65 20 66 20 67 20 68 20 69 20 6a 20  c d e f g h i j 
1270: 6b 20 6c 20 6d 20 6e 20 6f 20 70 20 71 20 72 20  k l m n o p q r 
1280: 73 20 74 20 75 20 76 20 77 20 78 20 79 20 7a 20  s t u v w x y z 
1290: 27 20 7c 7c 0a 20 20 20 20 27 61 20 62 20 63 20  ' ||.    'a b c 
12a0: 64 20 65 20 66 20 67 20 68 20 69 20 6a 20 6b 20  d e f g h i j k 
12b0: 6c 20 6d 20 6e 20 6f 20 70 20 71 20 72 20 73 20  l m n o p q r s 
12c0: 74 20 75 20 76 20 77 20 78 20 79 20 7a 27 0a 20  t u v w x y z'. 
12d0: 20 29 3b 0a 7d 0a 0a 23 64 6f 5f 65 78 65 63 73   );.}..#do_execs
12e0: 71 6c 5f 74 65 73 74 20 39 2e 31 20 7b 0a 23 20  ql_test 9.1 {.# 
12f0: 20 53 45 4c 45 43 54 20 73 6e 69 70 70 65 74 28   SELECT snippet(
1300: 74 39 29 20 46 52 4f 4d 20 74 39 20 57 48 45 52  t9) FROM t9 WHER
1310: 45 20 74 39 20 4d 41 54 43 48 20 27 62 27 0a 23  E t9 MATCH 'b'.#
1320: 7d 20 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  } ..do_execsql_t
1330: 65 73 74 20 31 30 2e 31 20 7b 0a 20 20 43 52 45  est 10.1 {.  CRE
1340: 41 54 45 20 54 41 42 4c 45 20 66 74 28 63 6f 6e  ATE TABLE ft(con
1350: 74 65 6e 74 29 3b 0a 20 20 43 52 45 41 54 45 20  tent);.  CREATE 
1360: 49 4e 44 45 58 20 66 74 69 20 4f 4e 20 66 74 20  INDEX fti ON ft 
1370: 55 53 49 4e 47 20 66 74 73 35 28 29 3b 0a 7d 0a  USING fts5();.}.
1380: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1390: 31 30 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20  10.2 {.  INSERT 
13a0: 49 4e 54 4f 20 66 74 20 56 41 4c 55 45 53 28 27  INTO ft VALUES('
13b0: 61 20 62 20 63 20 64 20 65 27 29 3b 0a 20 20 49  a b c d e');.  I
13c0: 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 20 56 41  NSERT INTO ft VA
13d0: 4c 55 45 53 28 27 66 20 67 20 68 20 69 20 6a 27  LUES('f g h i j'
13e0: 29 3b 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  );.}.do_execsql_
13f0: 74 65 73 74 20 31 30 2e 33 20 7b 20 53 45 4c 45  test 10.3 { SELE
1400: 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 66 74  CT rowid FROM ft
1410: 20 57 48 45 52 45 20 66 74 20 4d 41 54 43 48 20   WHERE ft MATCH 
1420: 27 63 27 20 7d 20 7b 31 7d 0a 64 6f 5f 65 78 65  'c' } {1}.do_exe
1430: 63 73 71 6c 5f 74 65 73 74 20 31 30 2e 34 20 7b  csql_test 10.4 {
1440: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52   SELECT rowid FR
1450: 4f 4d 20 66 74 20 57 48 45 52 45 20 66 74 20 4d  OM ft WHERE ft M
1460: 41 54 43 48 20 27 66 27 20 7d 20 7b 32 7d 0a 0a  ATCH 'f' } {2}..
1470: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1480: 31 30 2e 35 20 7b 0a 20 20 44 45 4c 45 54 45 20  10.5 {.  DELETE 
1490: 46 52 4f 4d 20 66 74 3b 0a 20 20 43 52 45 41 54  FROM ft;.  CREAT
14a0: 45 20 54 41 42 4c 45 20 66 74 32 28 61 2c 20 62  E TABLE ft2(a, b
14b0: 2c 20 63 29 3b 0a 20 20 43 52 45 41 54 45 20 49  , c);.  CREATE I
14c0: 4e 44 45 58 20 66 74 69 32 20 4f 4e 20 66 74 32  NDEX fti2 ON ft2
14d0: 20 55 53 49 4e 47 20 66 74 73 35 28 29 3b 0a 20   USING fts5();. 
14e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 32   INSERT INTO ft2
14f0: 20 56 41 4c 55 45 53 28 27 31 20 32 20 33 20 34   VALUES('1 2 3 4
1500: 20 35 27 2c 20 27 36 20 37 20 38 20 39 20 31 30   5', '6 7 8 9 10
1510: 27 2c 20 27 31 31 20 31 32 20 31 33 20 31 34 20  ', '11 12 13 14 
1520: 31 35 27 29 3b 0a 20 20 53 45 4c 45 43 54 20 73  15');.  SELECT s
1530: 6e 69 70 70 65 74 28 66 74 32 2c 20 27 5b 27 2c  nippet(ft2, '[',
1540: 20 27 5d 27 2c 20 27 2e 2e 2e 27 2c 20 2d 31 2c   ']', '...', -1,
1550: 20 33 29 20 46 52 4f 4d 20 66 74 32 20 57 48 45   3) FROM ft2 WHE
1560: 52 45 20 66 74 32 20 4d 41 54 43 48 20 27 35 27  RE ft2 MATCH '5'
1570: 3b 0a 7d 20 7b 7b 2e 2e 2e 33 20 34 20 5b 35 5d  ;.} {{...3 4 [5]
1580: 7d 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a  }}..finish_test.
1590: 0a                                               .