/ Hex Artifact Content
Login

Artifact dbdedd20914c8d539aa3206c9b34a23775644641:


0000: 23 20 32 30 31 31 20 4f 63 74 6f 62 65 72 20 31  # 2011 October 1
0010: 38 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  8.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an you 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 2a 2a 2a 0a 0a 73 65 74 20 74 65 73  *******..set tes
0170: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
0180: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
0190: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
01a0: 72 2e 74 63 6c 0a 73 6f 75 72 63 65 20 24 74 65  r.tcl.source $te
01b0: 73 74 64 69 72 2f 6d 61 6c 6c 6f 63 5f 63 6f 6d  stdir/malloc_com
01c0: 6d 6f 6e 2e 74 63 6c 0a 0a 69 66 63 61 70 61 62  mon.tcl..ifcapab
01d0: 6c 65 20 21 66 74 73 33 20 7b 0a 20 20 66 69 6e  le !fts3 {.  fin
01e0: 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72  ish_test.  retur
01f0: 6e 0a 7d 0a 0a 73 65 74 20 74 65 73 74 70 72 65  n.}..set testpre
0200: 66 69 78 20 66 74 73 33 66 69 72 73 74 0a 0a 70  fix fts3first..p
0210: 72 6f 63 20 6c 72 65 76 65 72 73 65 20 7b 4c 7d  roc lreverse {L}
0220: 20 7b 0a 20 20 73 65 74 20 72 65 73 20 5b 6c 69   {.  set res [li
0230: 73 74 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  st].  for {set i
0240: 69 20 5b 65 78 70 72 20 5b 6c 6c 65 6e 67 74 68  i [expr [llength
0250: 20 24 4c 5d 2d 31 5d 7d 20 7b 24 69 69 3e 3d 30   $L]-1]} {$ii>=0
0260: 7d 20 7b 69 6e 63 72 20 69 69 20 2d 31 7d 20 7b  } {incr ii -1} {
0270: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
0280: 20 5b 6c 69 6e 64 65 78 20 24 4c 20 24 69 69 5d   [lindex $L $ii]
0290: 0a 20 20 7d 0a 20 20 73 65 74 20 72 65 73 0a 7d  .  }.  set res.}
02a0: 0a 0a 70 72 6f 63 20 6d 69 74 20 7b 62 6c 6f 62  ..proc mit {blob
02b0: 7d 20 7b 0a 20 20 73 65 74 20 73 63 61 6e 28 6c  } {.  set scan(l
02c0: 69 74 74 6c 65 45 6e 64 69 61 6e 29 20 69 2a 0a  ittleEndian) i*.
02d0: 20 20 73 65 74 20 73 63 61 6e 28 62 69 67 45 6e    set scan(bigEn
02e0: 64 69 61 6e 29 20 49 2a 0a 20 20 62 69 6e 61 72  dian) I*.  binar
02f0: 79 20 73 63 61 6e 20 24 62 6c 6f 62 20 24 73 63  y scan $blob $sc
0300: 61 6e 28 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f  an($::tcl_platfo
0310: 72 6d 28 62 79 74 65 4f 72 64 65 72 29 29 20 72  rm(byteOrder)) r
0320: 0a 20 20 72 65 74 75 72 6e 20 24 72 0a 7d 0a 64  .  return $r.}.d
0330: 62 20 66 75 6e 63 20 6d 69 74 20 6d 69 74 0a 0a  b func mit mit..
0340: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0350: 31 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 56  1.0 {.  CREATE V
0360: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 31 20  IRTUAL TABLE x1 
0370: 55 53 49 4e 47 20 46 54 53 34 28 61 2c 20 62 2c  USING FTS4(a, b,
0380: 20 63 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e   c);.  INSERT IN
0390: 54 4f 20 78 31 28 64 6f 63 69 64 2c 61 2c 62 2c  TO x1(docid,a,b,
03a0: 63 29 20 56 41 4c 55 45 53 28 30 2c 20 27 4b 20  c) VALUES(0, 'K 
03b0: 48 20 44 20 53 20 54 27 2c 20 27 56 20 4d 20 4e  H D S T', 'V M N
03c0: 20 59 20 4b 27 2c 20 27 53 20 5a 20 4e 20 51 20   Y K', 'S Z N Q 
03d0: 53 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  S');.  INSERT IN
03e0: 54 4f 20 78 31 28 64 6f 63 69 64 2c 61 2c 62 2c  TO x1(docid,a,b,
03f0: 63 29 20 56 41 4c 55 45 53 28 31 2c 20 27 4b 20  c) VALUES(1, 'K 
0400: 4e 20 4a 20 4c 20 57 27 2c 20 27 53 20 5a 20 57  N J L W', 'S Z W
0410: 20 4a 20 51 27 2c 20 27 44 20 55 20 57 20 53 20   J Q', 'D U W S 
0420: 45 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  E');.  INSERT IN
0430: 54 4f 20 78 31 28 64 6f 63 69 64 2c 61 2c 62 2c  TO x1(docid,a,b,
0440: 63 29 20 56 41 4c 55 45 53 28 32 2c 20 27 42 20  c) VALUES(2, 'B 
0450: 50 20 4d 20 4f 20 49 27 2c 20 27 52 20 50 20 48  P M O I', 'R P H
0460: 20 57 20 53 27 2c 20 27 52 20 4a 20 4c 20 4c 20   W S', 'R J L L 
0470: 45 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  E');.  INSERT IN
0480: 54 4f 20 78 31 28 64 6f 63 69 64 2c 61 2c 62 2c  TO x1(docid,a,b,
0490: 63 29 20 56 41 4c 55 45 53 28 33 2c 20 27 55 20  c) VALUES(3, 'U 
04a0: 52 20 51 20 4d 20 4c 27 2c 20 27 4d 20 4a 20 4b  R Q M L', 'M J K
04b0: 20 41 20 56 27 2c 20 27 51 20 57 20 4a 20 54 20   A V', 'Q W J T 
04c0: 4a 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  J');.  INSERT IN
04d0: 54 4f 20 78 31 28 64 6f 63 69 64 2c 61 2c 62 2c  TO x1(docid,a,b,
04e0: 63 29 20 56 41 4c 55 45 53 28 34 2c 20 27 4e 20  c) VALUES(4, 'N 
04f0: 4a 20 43 20 59 20 4e 27 2c 20 27 52 20 55 20 44  J C Y N', 'R U D
0500: 20 58 20 56 27 2c 20 27 42 20 4f 20 55 20 41 20   X V', 'B O U A 
0510: 51 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  Q');.  INSERT IN
0520: 54 4f 20 78 31 28 64 6f 63 69 64 2c 61 2c 62 2c  TO x1(docid,a,b,
0530: 63 29 20 56 41 4c 55 45 53 28 35 2c 20 27 51 20  c) VALUES(5, 'Q 
0540: 4c 20 58 20 4c 20 55 27 2c 20 27 49 20 46 20 4e  L X L U', 'I F N
0550: 20 58 20 53 27 2c 20 27 55 20 51 20 41 20 4e 20   X S', 'U Q A N 
0560: 59 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  Y');.  INSERT IN
0570: 54 4f 20 78 31 28 64 6f 63 69 64 2c 61 2c 62 2c  TO x1(docid,a,b,
0580: 63 29 20 56 41 4c 55 45 53 28 36 2c 20 27 4d 20  c) VALUES(6, 'M 
0590: 52 20 47 20 55 20 54 27 2c 20 27 55 20 56 20 49  R G U T', 'U V I
05a0: 20 51 20 50 27 2c 20 27 58 20 59 20 44 20 4c 20   Q P', 'X Y D L 
05b0: 53 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  S');.  INSERT IN
05c0: 54 4f 20 78 31 28 64 6f 63 69 64 2c 61 2c 62 2c  TO x1(docid,a,b,
05d0: 63 29 20 56 41 4c 55 45 53 28 37 2c 20 27 44 20  c) VALUES(7, 'D 
05e0: 59 20 50 20 4f 20 49 27 2c 20 27 58 20 4a 20 50  Y P O I', 'X J P
05f0: 20 4b 20 52 27 2c 20 27 56 20 4f 20 54 20 48 20   K R', 'V O T H 
0600: 56 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  V');.  INSERT IN
0610: 54 4f 20 78 31 28 64 6f 63 69 64 2c 61 2c 62 2c  TO x1(docid,a,b,
0620: 63 29 20 56 41 4c 55 45 53 28 38 2c 20 27 52 20  c) VALUES(8, 'R 
0630: 59 20 44 20 4c 20 52 27 2c 20 27 55 20 55 20 45  Y D L R', 'U U E
0640: 20 53 20 4a 27 2c 20 27 4e 20 57 20 4c 20 4d 20   S J', 'N W L M 
0650: 52 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  R');.  INSERT IN
0660: 54 4f 20 78 31 28 64 6f 63 69 64 2c 61 2c 62 2c  TO x1(docid,a,b,
0670: 63 29 20 56 41 4c 55 45 53 28 39 2c 20 27 5a 20  c) VALUES(9, 'Z 
0680: 50 20 46 20 4e 20 50 27 2c 20 27 57 20 41 20 58  P F N P', 'W A X
0690: 20 44 20 55 27 2c 20 27 56 20 41 20 45 20 51 20   D U', 'V A E Q 
06a0: 41 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  A');.  INSERT IN
06b0: 54 4f 20 78 31 28 64 6f 63 69 64 2c 61 2c 62 2c  TO x1(docid,a,b,
06c0: 63 29 20 56 41 4c 55 45 53 28 31 30 2c 20 27 51  c) VALUES(10, 'Q
06d0: 20 49 20 41 20 51 20 4d 27 2c 20 27 4e 20 44 20   I A Q M', 'N D 
06e0: 4b 20 48 20 43 27 2c 20 27 41 20 48 20 54 20 51  K H C', 'A H T Q
06f0: 20 5a 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49   Z');.  INSERT I
0700: 4e 54 4f 20 78 31 28 64 6f 63 69 64 2c 61 2c 62  NTO x1(docid,a,b
0710: 2c 63 29 20 56 41 4c 55 45 53 28 31 31 2c 20 27  ,c) VALUES(11, '
0720: 54 20 45 20 52 20 51 20 42 27 2c 20 27 43 20 49  T E R Q B', 'C I
0730: 20 42 20 43 20 42 27 2c 20 27 46 20 5a 20 55 20   B C B', 'F Z U 
0740: 57 20 52 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  W R');.  INSERT 
0750: 49 4e 54 4f 20 78 31 28 64 6f 63 69 64 2c 61 2c  INTO x1(docid,a,
0760: 62 2c 63 29 20 56 41 4c 55 45 53 28 31 32 2c 20  b,c) VALUES(12, 
0770: 27 45 20 53 20 56 20 55 20 57 27 2c 20 27 54 20  'E S V U W', 'T 
0780: 50 20 46 20 57 20 48 27 2c 20 27 41 20 4d 20 44  P F W H', 'A M D
0790: 20 4a 20 51 27 29 3b 0a 20 20 49 4e 53 45 52 54   J Q');.  INSERT
07a0: 20 49 4e 54 4f 20 78 31 28 64 6f 63 69 64 2c 61   INTO x1(docid,a
07b0: 2c 62 2c 63 29 20 56 41 4c 55 45 53 28 31 33 2c  ,b,c) VALUES(13,
07c0: 20 27 58 20 53 20 42 20 58 20 59 27 2c 20 27 55   'X S B X Y', 'U
07d0: 20 44 20 4e 20 44 20 50 27 2c 20 27 58 20 5a 20   D N D P', 'X Z 
07e0: 59 20 47 20 46 27 29 3b 0a 20 20 49 4e 53 45 52  Y G F');.  INSER
07f0: 54 20 49 4e 54 4f 20 78 31 28 64 6f 63 69 64 2c  T INTO x1(docid,
0800: 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 28 31 34  a,b,c) VALUES(14
0810: 2c 20 27 4b 20 48 20 41 20 42 20 4c 27 2c 20 27  , 'K H A B L', '
0820: 53 20 52 20 43 20 43 20 5a 27 2c 20 27 44 20 57  S R C C Z', 'D W
0830: 20 45 20 48 20 4a 27 29 3b 0a 20 20 49 4e 53 45   E H J');.  INSE
0840: 52 54 20 49 4e 54 4f 20 78 31 28 64 6f 63 69 64  RT INTO x1(docid
0850: 2c 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 28 31  ,a,b,c) VALUES(1
0860: 35 2c 20 27 43 20 45 20 55 20 43 20 43 27 2c 20  5, 'C E U C C', 
0870: 27 57 20 46 20 4d 20 4e 20 4d 27 2c 20 27 54 20  'W F M N M', 'T 
0880: 5a 20 55 20 58 20 54 27 29 3b 0a 20 20 49 4e 53  Z U X T');.  INS
0890: 45 52 54 20 49 4e 54 4f 20 78 31 28 64 6f 63 69  ERT INTO x1(doci
08a0: 64 2c 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 28  d,a,b,c) VALUES(
08b0: 31 36 2c 20 27 51 20 47 20 43 20 47 20 48 27 2c  16, 'Q G C G H',
08c0: 20 27 48 20 4e 20 4e 20 42 20 48 27 2c 20 27 42   'H N N B H', 'B
08d0: 20 51 20 49 20 48 20 59 27 29 3b 0a 20 20 49 4e   Q I H Y');.  IN
08e0: 53 45 52 54 20 49 4e 54 4f 20 78 31 28 64 6f 63  SERT INTO x1(doc
08f0: 69 64 2c 61 2c 62 2c 63 29 20 56 41 4c 55 45 53  id,a,b,c) VALUES
0900: 28 31 37 2c 20 27 51 20 54 20 53 20 4b 20 42 27  (17, 'Q T S K B'
0910: 2c 20 27 57 20 42 20 44 20 59 20 4e 27 2c 20 27  , 'W B D Y N', '
0920: 56 20 4a 20 50 20 45 20 43 27 29 3b 0a 20 20 49  V J P E C');.  I
0930: 4e 53 45 52 54 20 49 4e 54 4f 20 78 31 28 64 6f  NSERT INTO x1(do
0940: 63 69 64 2c 61 2c 62 2c 63 29 20 56 41 4c 55 45  cid,a,b,c) VALUE
0950: 53 28 31 38 2c 20 27 41 20 4a 20 4d 20 4f 20 51  S(18, 'A J M O Q
0960: 27 2c 20 27 4c 20 47 20 59 20 59 20 41 27 2c 20  ', 'L G Y Y A', 
0970: 27 47 20 4e 20 4d 20 52 20 4e 27 29 3b 0a 20 20  'G N M R N');.  
0980: 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31 28 64  INSERT INTO x1(d
0990: 6f 63 69 64 2c 61 2c 62 2c 63 29 20 56 41 4c 55  ocid,a,b,c) VALU
09a0: 45 53 28 31 39 2c 20 27 54 20 52 20 59 20 50 20  ES(19, 'T R Y P 
09b0: 59 27 2c 20 27 4e 20 56 20 59 20 42 20 58 27 2c  Y', 'N V Y B X',
09c0: 20 27 4c 20 5a 20 54 20 4e 20 54 27 29 3b 0a 0a   'L Z T N T');..
09d0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
09e0: 20 54 41 42 4c 45 20 78 32 20 55 53 49 4e 47 20   TABLE x2 USING 
09f0: 46 54 53 34 28 61 2c 20 62 2c 20 63 2c 20 6f 72  FTS4(a, b, c, or
0a00: 64 65 72 3d 44 45 53 43 29 3b 0a 20 20 49 4e 53  der=DESC);.  INS
0a10: 45 52 54 20 49 4e 54 4f 20 78 32 28 64 6f 63 69  ERT INTO x2(doci
0a20: 64 2c 20 61 2c 20 62 2c 20 63 29 20 53 45 4c 45  d, a, b, c) SELE
0a30: 43 54 20 64 6f 63 69 64 2c 20 61 2c 20 62 2c 20  CT docid, a, b, 
0a40: 63 20 46 52 4f 4d 20 78 31 3b 0a 7d 0a 0a 0a 23  c FROM x1;.}...#
0a50: 20 54 65 73 74 20 71 75 65 72 69 65 73 2e 0a 23   Test queries..#
0a60: 0a 66 6f 72 65 61 63 68 20 78 20 7b 31 20 32 7d  .foreach x {1 2}
0a70: 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 74 6e   {.  foreach {tn
0a80: 20 6d 61 74 63 68 20 72 65 73 7d 20 7b 0a 20 20   match res} {.  
0a90: 20 20 31 20 20 22 5e 4b 22 20 20 20 20 20 20 20    1  "^K"       
0aa0: 20 20 20 20 20 20 20 7b 30 20 31 20 31 34 7d 0a         {0 1 14}.
0ab0: 20 20 20 20 32 20 20 22 5e 53 22 20 20 20 20 20      2  "^S"     
0ac0: 20 20 20 20 20 20 20 20 20 7b 30 20 31 20 31 34           {0 1 14
0ad0: 7d 0a 20 20 20 20 33 20 20 22 5e 57 22 20 20 20  }.    3  "^W"   
0ae0: 20 20 20 20 20 20 20 20 20 20 20 7b 39 20 31 35             {9 15
0af0: 20 31 37 7d 0a 20 20 20 20 34 20 20 22 5e 4a 22   17}.    4  "^J"
0b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
0b10: 0a 20 20 20 20 35 20 20 22 5e 45 22 20 20 20 20  .    5  "^E"    
0b20: 20 20 20 20 20 20 20 20 20 20 7b 31 32 7d 0a 20            {12}. 
0b30: 20 20 20 36 20 20 22 56 20 5e 2d 45 22 20 20 20     6  "V ^-E"   
0b40: 20 20 20 20 20 20 20 20 7b 30 20 33 20 34 20 36          {0 3 4 6
0b50: 20 37 20 39 20 31 37 20 31 39 7d 0a 20 20 20 20   7 9 17 19}.    
0b60: 37 20 20 22 56 20 2d 5e 45 22 20 20 20 20 20 20  7  "V -^E"      
0b70: 20 20 20 20 20 7b 30 20 33 20 34 20 36 20 37 20       {0 3 4 6 7 
0b80: 39 20 31 37 20 31 39 7d 0a 20 20 20 20 38 20 20  9 17 19}.    8  
0b90: 22 5e 2d 45 20 56 22 20 20 20 20 20 20 20 20 20  "^-E V"         
0ba0: 20 20 7b 30 20 33 20 34 20 36 20 37 20 39 20 31    {0 3 4 6 7 9 1
0bb0: 37 20 31 39 7d 0a 20 20 20 20 39 20 20 22 2d 5e  7 19}.    9  "-^
0bc0: 45 20 56 22 20 20 20 20 20 20 20 20 20 20 20 7b  E V"           {
0bd0: 30 20 33 20 34 20 36 20 37 20 39 20 31 37 20 31  0 3 4 6 7 9 17 1
0be0: 39 7d 0a 20 20 20 20 31 30 20 22 56 22 20 20 20  9}.    10 "V"   
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 30 20 33              {0 3
0c00: 20 34 20 36 20 37 20 39 20 31 32 20 31 37 20 31   4 6 7 9 12 17 1
0c10: 39 7d 0a 0a 20 20 20 20 31 31 20 7b 22 5e 4b 20  9}..    11 {"^K 
0c20: 48 22 7d 20 20 20 20 20 20 20 20 20 20 7b 30 20  H"}          {0 
0c30: 31 34 7d 0a 20 20 20 20 31 32 20 7b 22 4b 20 48  14}.    12 {"K H
0c40: 22 7d 20 20 20 20 20 20 20 20 20 20 20 7b 30 20  "}           {0 
0c50: 31 30 20 31 34 7d 0a 20 20 20 20 31 33 20 7b 22  10 14}.    13 {"
0c60: 4b 20 5e 48 22 7d 20 20 20 20 20 20 20 20 20 20  K ^H"}          
0c70: 7b 7d 0a 20 20 7d 20 7b 0a 20 20 20 20 73 65 74  {}.  } {.    set
0c80: 20 72 65 76 20 5b 6c 72 65 76 65 72 73 65 20 24   rev [lreverse $
0c90: 72 65 73 5d 0a 20 20 20 20 64 6f 5f 65 78 65 63  res].    do_exec
0ca0: 73 71 6c 5f 74 65 73 74 20 31 2e 24 78 2e 24 74  sql_test 1.$x.$t
0cb0: 6e 2e 31 20 7b 53 45 4c 45 43 54 20 64 6f 63 69  n.1 {SELECT doci
0cc0: 64 20 46 52 4f 4d 20 78 31 20 57 48 45 52 45 20  d FROM x1 WHERE 
0cd0: 78 31 20 4d 41 54 43 48 20 24 6d 61 74 63 68 7d  x1 MATCH $match}
0ce0: 20 24 72 65 73 0a 20 20 20 20 64 6f 5f 65 78 65   $res.    do_exe
0cf0: 63 73 71 6c 5f 74 65 73 74 20 31 2e 24 78 2e 24  csql_test 1.$x.$
0d00: 74 6e 2e 32 20 7b 53 45 4c 45 43 54 20 64 6f 63  tn.2 {SELECT doc
0d10: 69 64 20 46 52 4f 4d 20 78 32 20 57 48 45 52 45  id FROM x2 WHERE
0d20: 20 78 32 20 4d 41 54 43 48 20 24 6d 61 74 63 68   x2 MATCH $match
0d30: 7d 20 24 72 65 76 0a 20 20 7d 0a 0a 20 20 64 6f  } $rev.  }..  do
0d40: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e  _execsql_test 1.
0d50: 24 78 2e 5b 65 78 70 72 20 24 74 6e 2b 31 5d 20  $x.[expr $tn+1] 
0d60: 7b 20 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  { .    INSERT IN
0d70: 54 4f 20 78 31 28 78 31 29 20 56 41 4c 55 45 53  TO x1(x1) VALUES
0d80: 28 27 6f 70 74 69 6d 69 7a 65 27 29 3b 0a 20 20  ('optimize');.  
0d90: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 32    INSERT INTO x2
0da0: 28 78 32 29 20 56 41 4c 55 45 53 28 27 6f 70 74  (x2) VALUES('opt
0db0: 69 6d 69 7a 65 27 29 3b 0a 20 20 7d 20 7b 7d 0a  imize');.  } {}.
0dc0: 7d 0a 0a 23 20 54 65 73 74 20 74 68 65 20 73 6e  }..# Test the sn
0dd0: 69 70 70 65 74 28 29 20 66 75 6e 63 74 69 6f 6e  ippet() function
0de0: 2e 0a 23 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20  ..#.foreach {tn 
0df0: 6d 61 74 63 68 20 72 65 73 7d 20 7b 0a 20 20 31  match res} {.  1
0e00: 20 20 7b 5e 4b 7d 20 20 20 20 7b 7b 5b 4b 5d 20    {^K}    {{[K] 
0e10: 48 20 44 20 53 20 54 7d 20 7b 5b 4b 5d 20 4e 20  H D S T} {[K] N 
0e20: 4a 20 4c 20 57 7d 20 7b 5b 4b 5d 20 48 20 41 20  J L W} {[K] H A 
0e30: 42 20 4c 7d 7d 0a 20 20 32 20 20 7b 5e 58 7d 20  B L}}.  2  {^X} 
0e40: 20 20 20 7b 7b 5b 58 5d 20 59 20 44 20 4c 20 53     {{[X] Y D L S
0e50: 7d 20 7b 5b 58 5d 20 4a 20 50 20 4b 20 52 7d 20  } {[X] J P K R} 
0e60: 7b 5b 58 5d 20 53 20 42 20 58 20 59 7d 7d 0a 20  {[X] S B X Y}}. 
0e70: 20 33 20 20 7b 5e 58 20 59 7d 20 20 7b 7b 5b 58   3  {^X Y}  {{[X
0e80: 5d 20 5b 59 5d 20 44 20 4c 20 53 7d 20 7b 44 20  ] [Y] D L S} {D 
0e90: 5b 59 5d 20 50 20 4f 20 49 2e 2e 2e 5b 58 5d 20  [Y] P O I...[X] 
0ea0: 4a 20 50 20 4b 20 52 7d 20 7b 5b 58 5d 20 53 20  J P K R} {[X] S 
0eb0: 42 20 58 20 5b 59 5d 7d 7d 0a 7d 20 7b 0a 20 20  B X [Y]}}.} {.  
0ec0: 73 65 74 20 72 65 76 20 5b 6c 72 65 76 65 72 73  set rev [lrevers
0ed0: 65 20 24 72 65 73 5d 0a 0a 20 20 64 6f 5f 65 78  e $res]..  do_ex
0ee0: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 33 2e 24  ecsql_test 1.3.$
0ef0: 74 6e 2e 31 20 7b 0a 20 20 20 20 53 45 4c 45 43  tn.1 {.    SELEC
0f00: 54 20 73 6e 69 70 70 65 74 28 78 31 2c 20 27 5b  T snippet(x1, '[
0f10: 27 2c 20 27 5d 27 2c 20 27 2e 2e 2e 27 29 20 46  ', ']', '...') F
0f20: 52 4f 4d 20 78 31 20 57 48 45 52 45 20 78 31 20  ROM x1 WHERE x1 
0f30: 4d 41 54 43 48 20 24 6d 61 74 63 68 0a 20 20 7d  MATCH $match.  }
0f40: 20 24 72 65 73 0a 0a 20 20 64 6f 5f 65 78 65 63   $res..  do_exec
0f50: 73 71 6c 5f 74 65 73 74 20 31 2e 33 2e 24 74 6e  sql_test 1.3.$tn
0f60: 2e 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  .2 {.    SELECT 
0f70: 73 6e 69 70 70 65 74 28 78 32 2c 20 27 5b 27 2c  snippet(x2, '[',
0f80: 20 27 5d 27 2c 20 27 2e 2e 2e 27 29 20 46 52 4f   ']', '...') FRO
0f90: 4d 20 78 32 20 57 48 45 52 45 20 78 32 20 4d 41  M x2 WHERE x2 MA
0fa0: 54 43 48 20 24 6d 61 74 63 68 0a 20 20 7d 20 24  TCH $match.  } $
0fb0: 72 65 76 0a 7d 0a 0a 23 20 54 65 73 74 20 6d 61  rev.}..# Test ma
0fc0: 74 63 68 69 6e 66 6f 28 29 2e 0a 23 0a 66 6f 72  tchinfo()..#.for
0fd0: 65 61 63 68 20 7b 74 6e 20 6d 61 74 63 68 20 72  each {tn match r
0fe0: 65 73 7d 20 7b 0a 20 20 31 20 20 7b 5e 4b 7d 20  es} {.  1  {^K} 
0ff0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
1000: 20 20 20 20 20 7b 31 20 33 20 33 20 30 20 30 20       {1 3 3 0 0 
1010: 30 20 30 20 30 20 30 7d 0a 20 20 20 20 20 20 20  0 0 0 0}.       
1020: 20 20 20 20 20 20 20 20 20 7b 31 20 33 20 33 20           {1 3 3 
1030: 30 20 30 20 30 20 30 20 30 20 30 7d 0a 20 20 20  0 0 0 0 0 0}.   
1040: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 31 20               {1 
1050: 33 20 33 20 30 20 30 20 30 20 30 20 30 20 30 7d  3 3 0 0 0 0 0 0}
1060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  .             }.
1070: 20 20 32 20 20 7b 5e 58 7d 20 20 20 20 7b 0a 20    2  {^X}    {. 
1080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1090: 30 20 31 20 31 20 30 20 31 20 31 20 31 20 32 20  0 1 1 0 1 1 1 2 
10a0: 32 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  2}.             
10b0: 20 20 20 7b 30 20 31 20 31 20 31 20 31 20 31 20     {0 1 1 1 1 1 
10c0: 30 20 32 20 32 7d 0a 20 20 20 20 20 20 20 20 20  0 2 2}.         
10d0: 20 20 20 20 20 20 20 7b 31 20 31 20 31 20 30 20         {1 1 1 0 
10e0: 31 20 31 20 31 20 32 20 32 7d 0a 20 20 20 20 20  1 1 1 2 2}.     
10f0: 20 20 20 20 20 20 20 20 7d 0a 20 20 33 20 20 7b          }.  3  {
1100: 5e 58 20 59 7d 20 20 7b 0a 20 20 20 20 20 20 20  ^X Y}  {.       
1110: 20 20 20 20 20 20 20 20 20 7b 30 20 31 20 31 20           {0 1 1 
1120: 30 20 31 20 31 20 31 20 32 20 32 20 30 20 36 20  0 1 1 1 2 2 0 6 
1130: 35 20 30 20 35 20 34 20 31 20 34 20 34 7d 20 0a  5 0 5 4 1 4 4} .
1140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1150: 7b 30 20 31 20 31 20 31 20 31 20 31 20 30 20 32  {0 1 1 1 1 1 0 2
1160: 20 32 20 31 20 36 20 35 20 30 20 35 20 34 20 30   2 1 6 5 0 5 4 0
1170: 20 34 20 34 7d 20 0a 20 20 20 20 20 20 20 20 20   4 4} .         
1180: 20 20 20 20 20 20 20 7b 31 20 31 20 31 20 30 20         {1 1 1 0 
1190: 31 20 31 20 31 20 32 20 32 20 31 20 36 20 35 20  1 1 1 2 2 1 6 5 
11a0: 30 20 35 20 34 20 31 20 34 20 34 7d 0a 20 20 20  0 5 4 1 4 4}.   
11b0: 20 20 20 20 20 20 20 20 20 20 7d 0a 7d 20 7b 0a            }.} {.
11c0: 20 20 73 65 74 20 72 65 76 20 5b 6c 72 65 76 65    set rev [lreve
11d0: 72 73 65 20 24 72 65 73 5d 0a 0a 20 20 64 6f 5f  rse $res]..  do_
11e0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 33  execsql_test 1.3
11f0: 2e 24 74 6e 2e 31 20 7b 0a 20 20 20 20 53 45 4c  .$tn.1 {.    SEL
1200: 45 43 54 20 6d 69 74 28 6d 61 74 63 68 69 6e 66  ECT mit(matchinf
1210: 6f 28 78 31 2c 20 27 78 27 29 29 20 46 52 4f 4d  o(x1, 'x')) FROM
1220: 20 78 31 20 57 48 45 52 45 20 78 31 20 4d 41 54   x1 WHERE x1 MAT
1230: 43 48 20 24 6d 61 74 63 68 0a 20 20 7d 20 24 72  CH $match.  } $r
1240: 65 73 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f  es.  do_execsql_
1250: 74 65 73 74 20 31 2e 33 2e 24 74 6e 2e 32 20 7b  test 1.3.$tn.2 {
1260: 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 69 74 28  .    SELECT mit(
1270: 6d 61 74 63 68 69 6e 66 6f 28 78 32 2c 20 27 78  matchinfo(x2, 'x
1280: 27 29 29 20 46 52 4f 4d 20 78 32 20 57 48 45 52  ')) FROM x2 WHER
1290: 45 20 78 32 20 4d 41 54 43 48 20 24 6d 61 74 63  E x2 MATCH $matc
12a0: 68 0a 20 20 7d 20 24 72 65 76 0a 7d 0a 0a 23 20  h.  } $rev.}..# 
12b0: 54 65 73 74 20 74 68 61 74 20 5e 20 69 73 20 69  Test that ^ is i
12c0: 67 6e 6f 72 65 64 20 66 6f 72 20 46 54 53 33 20  gnored for FTS3 
12d0: 74 61 62 6c 65 73 2e 0a 23 0a 64 6f 5f 65 78 65  tables..#.do_exe
12e0: 63 73 71 6c 5f 74 65 73 74 20 32 2e 31 20 7b 0a  csql_test 2.1 {.
12f0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
1300: 20 54 41 42 4c 45 20 78 33 20 55 53 49 4e 47 20   TABLE x3 USING 
1310: 66 74 73 33 3b 0a 20 20 49 4e 53 45 52 54 20 49  fts3;.  INSERT I
1320: 4e 54 4f 20 78 33 20 56 41 4c 55 45 53 28 27 41  NTO x3 VALUES('A
1330: 20 42 20 43 27 29 3b 0a 20 20 49 4e 53 45 52 54   B C');.  INSERT
1340: 20 49 4e 54 4f 20 78 33 20 56 41 4c 55 45 53 28   INTO x3 VALUES(
1350: 27 42 20 41 20 43 27 29 3b 0a 0a 20 20 43 52 45  'B A C');..  CRE
1360: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
1370: 45 20 78 34 20 55 53 49 4e 47 20 66 74 73 34 3b  E x4 USING fts4;
1380: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78  .  INSERT INTO x
1390: 34 20 56 41 4c 55 45 53 28 27 41 20 42 20 43 27  4 VALUES('A B C'
13a0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
13b0: 20 78 34 20 56 41 4c 55 45 53 28 27 42 20 41 20   x4 VALUES('B A 
13c0: 43 27 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73  C');.}..do_execs
13d0: 71 6c 5f 74 65 73 74 20 32 2e 32 2e 31 20 7b 0a  ql_test 2.2.1 {.
13e0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
13f0: 78 33 20 57 48 45 52 45 20 78 33 20 4d 41 54 43  x3 WHERE x3 MATC
1400: 48 20 27 5e 41 27 3b 0a 7d 20 7b 7b 41 20 42 20  H '^A';.} {{A B 
1410: 43 7d 20 7b 42 20 41 20 43 7d 7d 0a 64 6f 5f 65  C} {B A C}}.do_e
1420: 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 32 2e  xecsql_test 2.2.
1430: 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  2 {.  SELECT * F
1440: 52 4f 4d 20 78 34 20 57 48 45 52 45 20 78 34 20  ROM x4 WHERE x4 
1450: 4d 41 54 43 48 20 27 5e 41 27 3b 0a 7d 20 7b 7b  MATCH '^A';.} {{
1460: 41 20 42 20 43 7d 7d 0a 0a 66 69 6e 69 73 68 5f  A B C}}..finish_
1470: 74 65 73 74 0a                                   test.