/ Hex Artifact Content
Login

Artifact 62bf82ac674b7d4126e73532e1ad96cdcd8e1752a4ed90b28a6f98305f5a66aa:


0000: 23 20 32 30 31 35 2d 30 33 2d 30 36 0a 23 0a 23  # 2015-03-06.#.#
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 0a 23 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 66 69 6c 65 20 69 73 20 74 65   this file is te
01c0: 73 74 69 6e 67 20 74 68 65 20 4c 49 4b 45 20 61  sting the LIKE a
01d0: 6e 64 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72  nd GLOB operator
01e0: 73 20 61 6e 64 0a 23 20 69 6e 20 70 61 72 74 69  s and.# in parti
01f0: 63 75 6c 61 72 20 74 68 65 20 6f 70 74 69 6d 69  cular the optimi
0200: 7a 61 74 69 6f 6e 73 20 74 68 61 74 20 6f 63 63  zations that occ
0210: 75 72 20 74 6f 20 68 65 6c 70 20 74 68 6f 73 65  ur to help those
0220: 20 6f 70 65 72 61 74 6f 72 73 0a 23 20 72 75 6e   operators.# run
0230: 20 66 61 73 74 65 72 20 61 6e 64 20 74 68 61 74   faster and that
0240: 20 74 68 6f 73 65 20 6f 70 74 69 6d 69 7a 61 74   those optimizat
0250: 69 6f 6e 73 20 77 6f 72 6b 20 63 6f 72 72 65 63  ions work correc
0260: 74 6c 79 20 77 68 65 6e 20 74 68 65 72 65 0a 23  tly when there.#
0270: 20 61 72 65 20 62 6f 74 68 20 73 74 72 69 6e 67   are both string
0280: 73 20 61 6e 64 20 62 6c 6f 62 73 20 62 65 69 6e  s and blobs bein
0290: 67 20 74 65 73 74 65 64 2e 0a 23 0a 23 20 54 69  g tested..#.# Ti
02a0: 63 6b 65 74 20 30 35 66 34 33 62 65 38 66 64 64  cket 05f43be8fdd
02b0: 61 39 66 62 64 39 34 38 64 33 37 34 33 31 39 62  a9fbd948d374319b
02c0: 39 39 62 30 35 34 31 34 30 62 63 33 36 20 73 68  99b054140bc36 sh
02d0: 6f 77 73 20 74 68 61 74 20 74 68 65 20 66 6f 6c  ows that the fol
02e0: 6c 6f 77 69 6e 67 0a 23 20 53 51 4c 20 77 61 73  lowing.# SQL was
02f0: 20 6e 6f 74 20 77 6f 72 6b 69 6e 67 20 63 6f 72   not working cor
0300: 72 65 63 74 6c 79 3a 0a 23 0a 23 20 20 20 20 20  rectly:.#.#     
0310: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
0320: 78 20 54 45 58 54 20 55 4e 49 51 55 45 20 43 4f  x TEXT UNIQUE CO
0330: 4c 4c 41 54 45 20 6e 6f 63 61 73 65 29 3b 0a 23  LLATE nocase);.#
0340: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
0350: 20 74 31 28 78 29 20 56 41 4c 55 45 53 28 78 27   t1(x) VALUES(x'
0360: 36 31 36 32 36 33 27 29 3b 0a 23 20 20 20 20 20  616263');.#     
0370: 53 45 4c 45 43 54 20 27 71 75 65 72 79 2d 31 27  SELECT 'query-1'
0380: 2c 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52  , x FROM t1 WHER
0390: 45 20 78 20 4c 49 4b 45 20 27 61 25 27 3b 0a 23  E x LIKE 'a%';.#
03a0: 20 20 20 20 20 53 45 4c 45 43 54 20 27 71 75 65       SELECT 'que
03b0: 72 79 2d 32 27 2c 20 78 20 46 52 4f 4d 20 74 31  ry-2', x FROM t1
03c0: 20 57 48 45 52 45 20 2b 78 20 4c 49 4b 45 20 27   WHERE +x LIKE '
03d0: 61 25 27 3b 0a 23 0a 23 20 54 68 69 73 20 73 63  a%';.#.# This sc
03e0: 72 69 70 74 20 76 65 72 69 66 69 65 73 20 74 68  ript verifies th
03f0: 61 74 20 69 74 20 77 6f 72 6b 73 20 72 69 67 68  at it works righ
0400: 74 20 6e 6f 77 2e 0a 23 0a 0a 73 65 74 20 74 65  t now..#..set te
0410: 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e  stdir [file dirn
0420: 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72  ame $argv0].sour
0430: 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74  ce $testdir/test
0440: 65 72 2e 74 63 6c 0a 0a 69 66 63 61 70 61 62 6c  er.tcl..ifcapabl
0450: 65 20 21 6c 69 6b 65 5f 6d 61 74 63 68 5f 62 6c  e !like_match_bl
0460: 6f 62 73 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74  obs {.  finish_t
0470: 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a  est.  return.}..
0480: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0490: 6c 69 6b 65 33 2d 31 2e 31 20 7b 0a 20 20 50 52  like3-1.1 {.  PR
04a0: 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 3d 55 54  AGMA encoding=UT
04b0: 46 38 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  F8;.  CREATE TAB
04c0: 4c 45 20 74 31 28 61 2c 62 20 54 45 58 54 20 43  LE t1(a,b TEXT C
04d0: 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65 29 3b 0a  OLLATE nocase);.
04e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
04f0: 28 61 2c 62 29 0a 20 20 20 20 20 56 41 4c 55 45  (a,b).     VALUE
0500: 53 28 31 2c 27 61 62 63 27 29 2c 0a 20 20 20 20  S(1,'abc'),.    
0510: 20 20 20 20 20 20 20 28 32 2c 27 41 42 58 27 29         (2,'ABX')
0520: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 28 33 2c  ,.           (3,
0530: 27 42 43 44 27 29 2c 0a 20 20 20 20 20 20 20 20  'BCD'),.        
0540: 20 20 20 28 34 2c 78 27 36 31 36 32 36 33 27 29     (4,x'616263')
0550: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 28 35 2c  ,.           (5,
0560: 78 27 34 31 34 32 35 38 27 29 2c 0a 20 20 20 20  x'414258'),.    
0570: 20 20 20 20 20 20 20 28 36 2c 78 27 34 32 34 33         (6,x'4243
0580: 34 34 27 29 3b 0a 20 20 43 52 45 41 54 45 20 49  44');.  CREATE I
0590: 4e 44 45 58 20 74 31 62 61 20 4f 4e 20 74 31 28  NDEX t1ba ON t1(
05a0: 62 2c 61 29 3b 0a 0a 20 20 53 45 4c 45 43 54 20  b,a);..  SELECT 
05b0: 61 2c 20 62 20 46 52 4f 4d 20 74 31 20 57 48 45  a, b FROM t1 WHE
05c0: 52 45 20 62 20 4c 49 4b 45 20 27 61 42 25 27 20  RE b LIKE 'aB%' 
05d0: 4f 52 44 45 52 20 42 59 20 2b 61 3b 0a 7d 20 7b  ORDER BY +a;.} {
05e0: 31 20 61 62 63 20 32 20 41 42 58 20 34 20 61 62  1 abc 2 ABX 4 ab
05f0: 63 20 35 20 41 42 58 7d 0a 64 6f 5f 65 78 65 63  c 5 ABX}.do_exec
0600: 73 71 6c 5f 74 65 73 74 20 6c 69 6b 65 33 2d 31  sql_test like3-1
0610: 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c  .2 {.  SELECT a,
0620: 20 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   b FROM t1 WHERE
0630: 20 2b 62 20 4c 49 4b 45 20 27 61 42 25 27 20 4f   +b LIKE 'aB%' O
0640: 52 44 45 52 20 42 59 20 2b 61 3b 0a 7d 20 7b 31  RDER BY +a;.} {1
0650: 20 61 62 63 20 32 20 41 42 58 20 34 20 61 62 63   abc 2 ABX 4 abc
0660: 20 35 20 41 42 58 7d 0a 0a 64 6f 5f 65 78 65 63   5 ABX}..do_exec
0670: 73 71 6c 5f 74 65 73 74 20 6c 69 6b 65 33 2d 32  sql_test like3-2
0680: 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41  .0 {.  CREATE TA
0690: 42 4c 45 20 74 32 28 61 2c 20 62 20 54 45 58 54  BLE t2(a, b TEXT
06a0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
06b0: 20 74 32 20 53 45 4c 45 43 54 20 61 2c 20 62 20   t2 SELECT a, b 
06c0: 46 52 4f 4d 20 74 31 3b 0a 20 20 43 52 45 41 54  FROM t1;.  CREAT
06d0: 45 20 49 4e 44 45 58 20 74 32 62 61 20 4f 4e 20  E INDEX t2ba ON 
06e0: 74 32 28 62 2c 61 29 3b 0a 20 20 53 45 4c 45 43  t2(b,a);.  SELEC
06f0: 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 32 20 57  T a, b FROM t2 W
0700: 48 45 52 45 20 62 20 47 4c 4f 42 20 27 61 62 2a  HERE b GLOB 'ab*
0710: 27 20 4f 52 44 45 52 20 42 59 20 2b 61 3b 0a 7d  ' ORDER BY +a;.}
0720: 20 7b 31 20 61 62 63 20 34 20 61 62 63 7d 0a 64   {1 abc 4 abc}.d
0730: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6c  o_execsql_test l
0740: 69 6b 65 33 2d 32 2e 31 20 7b 0a 20 20 53 45 4c  ike3-2.1 {.  SEL
0750: 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 32  ECT a, b FROM t2
0760: 20 57 48 45 52 45 20 2b 62 20 47 4c 4f 42 20 27   WHERE +b GLOB '
0770: 61 62 2a 27 20 4f 52 44 45 52 20 42 59 20 2b 61  ab*' ORDER BY +a
0780: 3b 0a 7d 20 7b 31 20 61 62 63 20 34 20 61 62 63  ;.} {1 abc 4 abc
0790: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
07a0: 74 20 6c 69 6b 65 33 2d 32 2e 32 20 7b 0a 20 20  t like3-2.2 {.  
07b0: 53 45 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d  SELECT a, b FROM
07c0: 20 74 32 20 57 48 45 52 45 20 62 3e 3d 78 27 36   t2 WHERE b>=x'6
07d0: 31 36 32 27 20 41 4e 44 20 62 20 47 4c 4f 42 20  162' AND b GLOB 
07e0: 27 61 62 2a 27 0a 7d 20 7b 34 20 61 62 63 7d 0a  'ab*'.} {4 abc}.
07f0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0800: 6c 69 6b 65 33 2d 32 2e 33 20 7b 0a 20 20 53 45  like3-2.3 {.  SE
0810: 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74  LECT a, b FROM t
0820: 32 20 57 48 45 52 45 20 2b 62 3e 3d 78 27 36 31  2 WHERE +b>=x'61
0830: 36 32 27 20 41 4e 44 20 2b 62 20 47 4c 4f 42 20  62' AND +b GLOB 
0840: 27 61 62 2a 27 0a 7d 20 7b 34 20 61 62 63 7d 0a  'ab*'.} {4 abc}.
0850: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0860: 6c 69 6b 65 33 2d 32 2e 34 20 7b 0a 20 20 53 45  like3-2.4 {.  SE
0870: 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74  LECT a, b FROM t
0880: 32 20 57 48 45 52 45 20 62 20 47 4c 4f 42 20 27  2 WHERE b GLOB '
0890: 61 62 2a 27 20 41 4e 44 20 62 3e 3d 78 27 36 31  ab*' AND b>=x'61
08a0: 36 32 27 0a 7d 20 7b 34 20 61 62 63 7d 0a 64 6f  62'.} {4 abc}.do
08b0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6c 69  _execsql_test li
08c0: 6b 65 33 2d 32 2e 35 20 7b 0a 20 20 53 45 4c 45  ke3-2.5 {.  SELE
08d0: 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 32 20  CT a, b FROM t2 
08e0: 57 48 45 52 45 20 2b 62 20 47 4c 4f 42 20 27 61  WHERE +b GLOB 'a
08f0: 62 2a 27 20 41 4e 44 20 2b 62 3e 3d 78 27 36 31  b*' AND +b>=x'61
0900: 36 32 27 0a 7d 20 7b 34 20 61 62 63 7d 0a 0a 64  62'.} {4 abc}..d
0910: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6c  o_execsql_test l
0920: 69 6b 65 33 2d 33 2e 30 20 7b 0a 20 20 43 52 45  ike3-3.0 {.  CRE
0930: 41 54 45 20 54 41 42 4c 45 20 74 33 28 78 20 54  ATE TABLE t3(x T
0940: 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 20  EXT PRIMARY KEY 
0950: 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65 29 3b  COLLATE nocase);
0960: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0970: 33 28 78 29 20 56 41 4c 55 45 53 28 27 61 61 61  3(x) VALUES('aaa
0980: 27 29 2c 28 27 61 62 63 27 29 2c 28 27 61 62 64  '),('abc'),('abd
0990: 27 29 2c 28 27 61 62 65 27 29 2c 28 27 61 63 7a  '),('abe'),('acz
09a0: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
09b0: 4f 20 74 33 28 78 29 20 53 45 4c 45 43 54 20 43  O t3(x) SELECT C
09c0: 41 53 54 28 78 20 41 53 20 62 6c 6f 62 29 20 46  AST(x AS blob) F
09d0: 52 4f 4d 20 74 33 3b 0a 20 20 53 45 4c 45 43 54  ROM t3;.  SELECT
09e0: 20 71 75 6f 74 65 28 78 29 20 46 52 4f 4d 20 74   quote(x) FROM t
09f0: 33 20 57 48 45 52 45 20 78 20 4c 49 4b 45 20 27  3 WHERE x LIKE '
0a00: 61 62 25 27 20 4f 52 44 45 52 20 42 59 20 78 3b  ab%' ORDER BY x;
0a10: 0a 7d 20 7b 27 61 62 63 27 20 27 61 62 64 27 20  .} {'abc' 'abd' 
0a20: 27 61 62 65 27 20 58 27 36 31 36 32 36 33 27 20  'abe' X'616263' 
0a30: 58 27 36 31 36 32 36 34 27 20 58 27 36 31 36 32  X'616264' X'6162
0a40: 36 35 27 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  65'}.do_execsql_
0a50: 74 65 73 74 20 6c 69 6b 65 33 2d 33 2e 31 20 7b  test like3-3.1 {
0a60: 0a 20 20 53 45 4c 45 43 54 20 71 75 6f 74 65 28  .  SELECT quote(
0a70: 78 29 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45  x) FROM t3 WHERE
0a80: 20 78 20 4c 49 4b 45 20 27 61 62 25 27 20 4f 52   x LIKE 'ab%' OR
0a90: 44 45 52 20 42 59 20 78 20 44 45 53 43 3b 0a 7d  DER BY x DESC;.}
0aa0: 20 7b 58 27 36 31 36 32 36 35 27 20 58 27 36 31   {X'616265' X'61
0ab0: 36 32 36 34 27 20 58 27 36 31 36 32 36 33 27 20  6264' X'616263' 
0ac0: 27 61 62 65 27 20 27 61 62 64 27 20 27 61 62 63  'abe' 'abd' 'abc
0ad0: 27 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  '}.do_execsql_te
0ae0: 73 74 20 6c 69 6b 65 33 2d 33 2e 31 63 6b 20 7b  st like3-3.1ck {
0af0: 0a 20 20 53 45 4c 45 43 54 20 71 75 6f 74 65 28  .  SELECT quote(
0b00: 78 29 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45  x) FROM t3 WHERE
0b10: 20 78 20 4c 49 4b 45 20 27 61 62 25 27 20 4f 52   x LIKE 'ab%' OR
0b20: 44 45 52 20 42 59 20 2b 78 20 44 45 53 43 3b 0a  DER BY +x DESC;.
0b30: 7d 20 7b 58 27 36 31 36 32 36 35 27 20 58 27 36  } {X'616265' X'6
0b40: 31 36 32 36 34 27 20 58 27 36 31 36 32 36 33 27  16264' X'616263'
0b50: 20 27 61 62 65 27 20 27 61 62 64 27 20 27 61 62   'abe' 'abd' 'ab
0b60: 63 27 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  c'}.do_execsql_t
0b70: 65 73 74 20 6c 69 6b 65 33 2d 33 2e 32 20 7b 0a  est like3-3.2 {.
0b80: 20 20 53 45 4c 45 43 54 20 71 75 6f 74 65 28 78    SELECT quote(x
0b90: 29 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20  ) FROM t3 WHERE 
0ba0: 78 20 4c 49 4b 45 20 27 61 62 25 27 20 4f 52 44  x LIKE 'ab%' ORD
0bb0: 45 52 20 42 59 20 78 20 41 53 43 3b 0a 7d 20 7b  ER BY x ASC;.} {
0bc0: 27 61 62 63 27 20 27 61 62 64 27 20 27 61 62 65  'abc' 'abd' 'abe
0bd0: 27 20 58 27 36 31 36 32 36 33 27 20 58 27 36 31  ' X'616263' X'61
0be0: 36 32 36 34 27 20 58 27 36 31 36 32 36 35 27 7d  6264' X'616265'}
0bf0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0c00: 20 6c 69 6b 65 33 2d 33 2e 32 63 6b 20 7b 0a 20   like3-3.2ck {. 
0c10: 20 53 45 4c 45 43 54 20 71 75 6f 74 65 28 78 29   SELECT quote(x)
0c20: 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 78   FROM t3 WHERE x
0c30: 20 4c 49 4b 45 20 27 61 62 25 27 20 4f 52 44 45   LIKE 'ab%' ORDE
0c40: 52 20 42 59 20 2b 78 20 41 53 43 3b 0a 7d 20 7b  R BY +x ASC;.} {
0c50: 27 61 62 63 27 20 27 61 62 64 27 20 27 61 62 65  'abc' 'abd' 'abe
0c60: 27 20 58 27 36 31 36 32 36 33 27 20 58 27 36 31  ' X'616263' X'61
0c70: 36 32 36 34 27 20 58 27 36 31 36 32 36 35 27 7d  6264' X'616265'}
0c80: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
0c90: 74 20 6c 69 6b 65 33 2d 34 2e 30 20 7b 0a 20 20  t like3-4.0 {.  
0ca0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28  CREATE TABLE t4(
0cb0: 78 20 54 45 58 54 20 43 4f 4c 4c 41 54 45 20 6e  x TEXT COLLATE n
0cc0: 6f 63 61 73 65 29 3b 0a 20 20 43 52 45 41 54 45  ocase);.  CREATE
0cd0: 20 49 4e 44 45 58 20 74 34 78 20 4f 4e 20 74 34   INDEX t4x ON t4
0ce0: 28 78 20 44 45 53 43 29 3b 0a 20 20 49 4e 53 45  (x DESC);.  INSE
0cf0: 52 54 20 49 4e 54 4f 20 74 34 28 78 29 20 53 45  RT INTO t4(x) SE
0d00: 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 33 3b 0a  LECT x FROM t3;.
0d10: 20 20 53 45 4c 45 43 54 20 71 75 6f 74 65 28 78    SELECT quote(x
0d20: 29 20 46 52 4f 4d 20 74 34 20 57 48 45 52 45 20  ) FROM t4 WHERE 
0d30: 78 20 4c 49 4b 45 20 27 61 62 25 27 20 4f 52 44  x LIKE 'ab%' ORD
0d40: 45 52 20 42 59 20 78 3b 0a 7d 20 7b 27 61 62 63  ER BY x;.} {'abc
0d50: 27 20 27 61 62 64 27 20 27 61 62 65 27 20 58 27  ' 'abd' 'abe' X'
0d60: 36 31 36 32 36 33 27 20 58 27 36 31 36 32 36 34  616263' X'616264
0d70: 27 20 58 27 36 31 36 32 36 35 27 7d 0a 64 6f 5f  ' X'616265'}.do_
0d80: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6c 69 6b  execsql_test lik
0d90: 65 33 2d 34 2e 31 20 7b 0a 20 20 53 45 4c 45 43  e3-4.1 {.  SELEC
0da0: 54 20 71 75 6f 74 65 28 78 29 20 46 52 4f 4d 20  T quote(x) FROM 
0db0: 74 34 20 57 48 45 52 45 20 78 20 4c 49 4b 45 20  t4 WHERE x LIKE 
0dc0: 27 61 62 25 27 20 4f 52 44 45 52 20 42 59 20 78  'ab%' ORDER BY x
0dd0: 20 44 45 53 43 3b 0a 7d 20 7b 58 27 36 31 36 32   DESC;.} {X'6162
0de0: 36 35 27 20 58 27 36 31 36 32 36 34 27 20 58 27  65' X'616264' X'
0df0: 36 31 36 32 36 33 27 20 27 61 62 65 27 20 27 61  616263' 'abe' 'a
0e00: 62 64 27 20 27 61 62 63 27 7d 0a 64 6f 5f 65 78  bd' 'abc'}.do_ex
0e10: 65 63 73 71 6c 5f 74 65 73 74 20 6c 69 6b 65 33  ecsql_test like3
0e20: 2d 34 2e 31 63 6b 20 7b 0a 20 20 53 45 4c 45 43  -4.1ck {.  SELEC
0e30: 54 20 71 75 6f 74 65 28 78 29 20 46 52 4f 4d 20  T quote(x) FROM 
0e40: 74 34 20 57 48 45 52 45 20 78 20 4c 49 4b 45 20  t4 WHERE x LIKE 
0e50: 27 61 62 25 27 20 4f 52 44 45 52 20 42 59 20 2b  'ab%' ORDER BY +
0e60: 78 20 44 45 53 43 3b 0a 7d 20 7b 58 27 36 31 36  x DESC;.} {X'616
0e70: 32 36 35 27 20 58 27 36 31 36 32 36 34 27 20 58  265' X'616264' X
0e80: 27 36 31 36 32 36 33 27 20 27 61 62 65 27 20 27  '616263' 'abe' '
0e90: 61 62 64 27 20 27 61 62 63 27 7d 0a 64 6f 5f 65  abd' 'abc'}.do_e
0ea0: 78 65 63 73 71 6c 5f 74 65 73 74 20 6c 69 6b 65  xecsql_test like
0eb0: 33 2d 34 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54  3-4.2 {.  SELECT
0ec0: 20 71 75 6f 74 65 28 78 29 20 46 52 4f 4d 20 74   quote(x) FROM t
0ed0: 34 20 57 48 45 52 45 20 78 20 4c 49 4b 45 20 27  4 WHERE x LIKE '
0ee0: 61 62 25 27 20 4f 52 44 45 52 20 42 59 20 78 20  ab%' ORDER BY x 
0ef0: 41 53 43 3b 0a 7d 20 7b 27 61 62 63 27 20 27 61  ASC;.} {'abc' 'a
0f00: 62 64 27 20 27 61 62 65 27 20 58 27 36 31 36 32  bd' 'abe' X'6162
0f10: 36 33 27 20 58 27 36 31 36 32 36 34 27 20 58 27  63' X'616264' X'
0f20: 36 31 36 32 36 35 27 7d 0a 64 6f 5f 65 78 65 63  616265'}.do_exec
0f30: 73 71 6c 5f 74 65 73 74 20 6c 69 6b 65 33 2d 34  sql_test like3-4
0f40: 2e 32 63 6b 20 7b 0a 20 20 53 45 4c 45 43 54 20  .2ck {.  SELECT 
0f50: 71 75 6f 74 65 28 78 29 20 46 52 4f 4d 20 74 34  quote(x) FROM t4
0f60: 20 57 48 45 52 45 20 78 20 4c 49 4b 45 20 27 61   WHERE x LIKE 'a
0f70: 62 25 27 20 4f 52 44 45 52 20 42 59 20 2b 78 20  b%' ORDER BY +x 
0f80: 41 53 43 3b 0a 7d 20 7b 27 61 62 63 27 20 27 61  ASC;.} {'abc' 'a
0f90: 62 64 27 20 27 61 62 65 27 20 58 27 36 31 36 32  bd' 'abe' X'6162
0fa0: 36 33 27 20 58 27 36 31 36 32 36 34 27 20 58 27  63' X'616264' X'
0fb0: 36 31 36 32 36 35 27 7d 0a 0a 23 20 32 30 31 38  616265'}..# 2018
0fc0: 2d 30 39 2d 31 30 20 74 69 63 6b 65 74 20 68 74  -09-10 ticket ht
0fd0: 74 70 73 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65  tps://www.sqlite
0fe0: 2e 6f 72 67 2f 73 72 63 2f 74 6b 74 76 69 65 77  .org/src/tktview
0ff0: 2f 63 39 34 33 36 39 63 61 65 39 62 35 36 31 62  /c94369cae9b561b
1000: 31 66 39 39 36 0a 23 20 54 68 65 20 6c 69 6b 65  1f996.# The like
1010: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 66 61   optimization fa
1020: 69 6c 73 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e  ils for a column
1030: 20 77 69 74 68 20 6e 75 6d 65 72 69 63 20 61 66   with numeric af
1040: 66 69 6e 69 74 79 20 69 66 0a 23 20 74 68 65 20  finity if.# the 
1050: 70 61 74 74 65 72 6e 20 27 2f 25 27 20 6f 72 20  pattern '/%' or 
1060: 62 65 67 69 6e 73 20 77 69 74 68 20 74 68 65 20  begins with the 
1070: 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65 72  escape character
1080: 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..#.do_execsql_t
1090: 65 73 74 20 6c 69 6b 65 33 2d 35 2e 31 30 30 20  est like3-5.100 
10a0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
10b0: 20 74 35 61 28 78 20 49 4e 54 20 55 4e 49 51 55   t5a(x INT UNIQU
10c0: 45 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65  E COLLATE nocase
10d0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
10e0: 20 74 35 61 28 78 29 20 56 41 4c 55 45 53 28 27   t5a(x) VALUES('
10f0: 2f 61 62 63 27 29 2c 28 31 32 33 29 2c 28 2d 32  /abc'),(123),(-2
1100: 33 34 29 3b 0a 20 20 53 45 4c 45 43 54 20 78 20  34);.  SELECT x 
1110: 46 52 4f 4d 20 74 35 61 20 57 48 45 52 45 20 78  FROM t5a WHERE x
1120: 20 4c 49 4b 45 20 27 2f 25 27 3b 0a 7d 20 7b 2f   LIKE '/%';.} {/
1130: 61 62 63 7d 0a 64 6f 5f 65 71 70 5f 74 65 73 74  abc}.do_eqp_test
1140: 20 6c 69 6b 65 33 2d 35 2e 31 30 31 20 7b 0a 20   like3-5.101 {. 
1150: 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74   SELECT x FROM t
1160: 35 61 20 57 48 45 52 45 20 78 20 4c 49 4b 45 20  5a WHERE x LIKE 
1170: 27 2f 25 27 3b 0a 7d 20 7b 0a 20 20 51 55 45 52  '/%';.} {.  QUER
1180: 59 20 50 4c 41 4e 0a 20 20 60 2d 2d 53 43 41 4e  Y PLAN.  `--SCAN
1190: 20 54 41 42 4c 45 20 74 35 61 0a 7d 0a 64 6f 5f   TABLE t5a.}.do_
11a0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6c 69 6b  execsql_test lik
11b0: 65 33 2d 35 2e 31 31 30 20 7b 0a 20 20 53 45 4c  e3-5.110 {.  SEL
11c0: 45 43 54 20 78 20 46 52 4f 4d 20 74 35 61 20 57  ECT x FROM t5a W
11d0: 48 45 52 45 20 78 20 4c 49 4b 45 20 27 2f 61 25  HERE x LIKE '/a%
11e0: 27 3b 0a 7d 20 7b 2f 61 62 63 7d 0a 69 66 63 61  ';.} {/abc}.ifca
11f0: 70 61 62 6c 65 20 21 69 63 75 20 7b 0a 64 6f 5f  pable !icu {.do_
1200: 65 71 70 5f 74 65 73 74 20 6c 69 6b 65 33 2d 35  eqp_test like3-5
1210: 2e 31 31 31 20 7b 0a 20 20 53 45 4c 45 43 54 20  .111 {.  SELECT 
1220: 78 20 46 52 4f 4d 20 74 35 61 20 57 48 45 52 45  x FROM t5a WHERE
1230: 20 78 20 4c 49 4b 45 20 27 2f 61 25 27 3b 0a 7d   x LIKE '/a%';.}
1240: 20 7b 0a 20 20 51 55 45 52 59 20 50 4c 41 4e 0a   {.  QUERY PLAN.
1250: 20 20 60 2d 2d 53 45 41 52 43 48 20 54 41 42 4c    `--SEARCH TABL
1260: 45 20 74 35 61 20 55 53 49 4e 47 20 43 4f 56 45  E t5a USING COVE
1270: 52 49 4e 47 20 49 4e 44 45 58 20 73 71 6c 69 74  RING INDEX sqlit
1280: 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 35 61 5f  e_autoindex_t5a_
1290: 31 20 28 78 3e 3f 20 41 4e 44 20 78 3c 3f 29 0a  1 (x>? AND x<?).
12a0: 7d 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  }.}.do_execsql_t
12b0: 65 73 74 20 6c 69 6b 65 33 2d 35 2e 31 32 30 20  est like3-5.120 
12c0: 7b 0a 20 20 53 45 4c 45 43 54 20 78 20 46 52 4f  {.  SELECT x FRO
12d0: 4d 20 74 35 61 20 57 48 45 52 45 20 78 20 4c 49  M t5a WHERE x LI
12e0: 4b 45 20 27 5e 31 32 25 27 20 45 53 43 41 50 45  KE '^12%' ESCAPE
12f0: 20 27 5e 27 3b 0a 7d 20 7b 31 32 33 7d 0a 64 6f   '^';.} {123}.do
1300: 5f 65 71 70 5f 74 65 73 74 20 6c 69 6b 65 33 2d  _eqp_test like3-
1310: 35 2e 31 32 31 20 7b 0a 20 20 53 45 4c 45 43 54  5.121 {.  SELECT
1320: 20 78 20 46 52 4f 4d 20 74 35 61 20 57 48 45 52   x FROM t5a WHER
1330: 45 20 78 20 4c 49 4b 45 20 27 5e 31 32 25 27 20  E x LIKE '^12%' 
1340: 45 53 43 41 50 45 20 27 5e 27 3b 0a 7d 20 7b 0a  ESCAPE '^';.} {.
1350: 20 20 51 55 45 52 59 20 50 4c 41 4e 0a 20 20 60    QUERY PLAN.  `
1360: 2d 2d 53 43 41 4e 20 54 41 42 4c 45 20 74 35 61  --SCAN TABLE t5a
1370: 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .}.do_execsql_te
1380: 73 74 20 6c 69 6b 65 33 2d 35 2e 31 32 32 20 7b  st like3-5.122 {
1390: 0a 20 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  .  SELECT x FROM
13a0: 20 74 35 61 20 57 48 45 52 45 20 78 20 4c 49 4b   t5a WHERE x LIK
13b0: 45 20 27 5e 2d 32 25 27 20 45 53 43 41 50 45 20  E '^-2%' ESCAPE 
13c0: 27 5e 27 3b 0a 7d 20 7b 2d 32 33 34 7d 0a 64 6f  '^';.} {-234}.do
13d0: 5f 65 71 70 5f 74 65 73 74 20 6c 69 6b 65 33 2d  _eqp_test like3-
13e0: 35 2e 31 32 33 20 7b 0a 20 20 53 45 4c 45 43 54  5.123 {.  SELECT
13f0: 20 78 20 46 52 4f 4d 20 74 35 61 20 57 48 45 52   x FROM t5a WHER
1400: 45 20 78 20 4c 49 4b 45 20 27 5e 31 32 25 27 20  E x LIKE '^12%' 
1410: 45 53 43 41 50 45 20 27 5e 27 3b 0a 7d 20 7b 0a  ESCAPE '^';.} {.
1420: 20 20 51 55 45 52 59 20 50 4c 41 4e 0a 20 20 60    QUERY PLAN.  `
1430: 2d 2d 53 43 41 4e 20 54 41 42 4c 45 20 74 35 61  --SCAN TABLE t5a
1440: 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  .}..do_execsql_t
1450: 65 73 74 20 6c 69 6b 65 33 2d 35 2e 32 30 30 20  est like3-5.200 
1460: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
1470: 20 74 35 62 28 78 20 49 4e 54 20 55 4e 49 51 55   t5b(x INT UNIQU
1480: 45 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72 79  E COLLATE binary
1490: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
14a0: 20 74 35 62 28 78 29 20 56 41 4c 55 45 53 28 27   t5b(x) VALUES('
14b0: 2f 61 62 63 27 29 2c 28 31 32 33 29 2c 28 2d 32  /abc'),(123),(-2
14c0: 33 34 29 3b 0a 20 20 53 45 4c 45 43 54 20 78 20  34);.  SELECT x 
14d0: 46 52 4f 4d 20 74 35 62 20 57 48 45 52 45 20 78  FROM t5b WHERE x
14e0: 20 47 4c 4f 42 20 27 2f 2a 27 3b 0a 7d 20 7b 2f   GLOB '/*';.} {/
14f0: 61 62 63 7d 0a 64 6f 5f 65 71 70 5f 74 65 73 74  abc}.do_eqp_test
1500: 20 6c 69 6b 65 33 2d 35 2e 32 30 31 20 7b 0a 20   like3-5.201 {. 
1510: 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74   SELECT x FROM t
1520: 35 62 20 57 48 45 52 45 20 78 20 47 4c 4f 42 20  5b WHERE x GLOB 
1530: 27 2f 2a 27 3b 0a 7d 20 7b 0a 20 20 51 55 45 52  '/*';.} {.  QUER
1540: 59 20 50 4c 41 4e 0a 20 20 60 2d 2d 53 43 41 4e  Y PLAN.  `--SCAN
1550: 20 54 41 42 4c 45 20 74 35 62 0a 7d 0a 64 6f 5f   TABLE t5b.}.do_
1560: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6c 69 6b  execsql_test lik
1570: 65 33 2d 35 2e 32 31 30 20 7b 0a 20 20 53 45 4c  e3-5.210 {.  SEL
1580: 45 43 54 20 78 20 46 52 4f 4d 20 74 35 62 20 57  ECT x FROM t5b W
1590: 48 45 52 45 20 78 20 47 4c 4f 42 20 27 2f 61 2a  HERE x GLOB '/a*
15a0: 27 3b 0a 7d 20 7b 2f 61 62 63 7d 0a 64 6f 5f 65  ';.} {/abc}.do_e
15b0: 71 70 5f 74 65 73 74 20 6c 69 6b 65 33 2d 35 2e  qp_test like3-5.
15c0: 32 31 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 78  211 {.  SELECT x
15d0: 20 46 52 4f 4d 20 74 35 62 20 57 48 45 52 45 20   FROM t5b WHERE 
15e0: 78 20 47 4c 4f 42 20 27 2f 61 2a 27 3b 0a 7d 20  x GLOB '/a*';.} 
15f0: 7b 0a 20 20 51 55 45 52 59 20 50 4c 41 4e 0a 20  {.  QUERY PLAN. 
1600: 20 60 2d 2d 53 45 41 52 43 48 20 54 41 42 4c 45   `--SEARCH TABLE
1610: 20 74 35 62 20 55 53 49 4e 47 20 43 4f 56 45 52   t5b USING COVER
1620: 49 4e 47 20 49 4e 44 45 58 20 73 71 6c 69 74 65  ING INDEX sqlite
1630: 5f 61 75 74 6f 69 6e 64 65 78 5f 74 35 62 5f 31  _autoindex_t5b_1
1640: 20 28 78 3e 3f 20 41 4e 44 20 78 3c 3f 29 0a 7d   (x>? AND x<?).}
1650: 0a 0a 23 20 32 30 31 39 2d 30 35 2d 30 31 0a 23  ..# 2019-05-01.#
1660: 20 61 6e 6f 74 68 65 72 20 63 61 73 65 20 6f 66   another case of
1670: 20 74 68 65 20 61 62 6f 76 65 20 72 65 70 6f 72   the above repor
1680: 74 65 64 20 6f 6e 20 74 68 65 20 6d 61 69 6c 69  ted on the maili
1690: 6e 67 20 6c 69 73 74 20 62 79 20 4d 61 6e 75 65  ng list by Manue
16a0: 6c 20 52 69 67 67 65 72 2e 0a 23 0a 64 6f 5f 65  l Rigger..#.do_e
16b0: 78 65 63 73 71 6c 5f 74 65 73 74 20 6c 69 6b 65  xecsql_test like
16c0: 33 2d 35 2e 33 30 30 20 7b 0a 20 20 43 52 45 41  3-5.300 {.  CREA
16d0: 54 45 20 54 41 42 4c 45 20 74 35 63 20 28 63 30  TE TABLE t5c (c0
16e0: 20 52 45 41 4c 29 3b 0a 20 20 43 52 45 41 54 45   REAL);.  CREATE
16f0: 20 49 4e 44 45 58 20 74 35 63 5f 30 20 4f 4e 20   INDEX t5c_0 ON 
1700: 74 35 63 28 63 30 20 43 4f 4c 4c 41 54 45 20 4e  t5c(c0 COLLATE N
1710: 4f 43 41 53 45 29 3b 0a 20 20 49 4e 53 45 52 54  OCASE);.  INSERT
1720: 20 49 4e 54 4f 20 74 35 63 28 72 6f 77 69 64 2c   INTO t5c(rowid,
1730: 20 63 30 29 20 56 41 4c 55 45 53 20 28 39 39 2c   c0) VALUES (99,
1740: 27 2b 2f 27 29 3b 0a 20 20 53 45 4c 45 43 54 20  '+/');.  SELECT 
1750: 2a 20 46 52 4f 4d 20 74 35 63 20 57 48 45 52 45  * FROM t5c WHERE
1760: 20 28 63 30 20 4c 49 4b 45 20 27 2b 2f 27 29 3b   (c0 LIKE '+/');
1770: 0a 7d 20 7b 2b 2f 7d 0a 0a 23 20 32 30 31 39 2d  .} {+/}..# 2019-
1780: 30 35 2d 30 38 0a 23 20 59 65 74 20 61 6e 6f 74  05-08.# Yet anot
1790: 68 65 72 20 63 61 73 65 20 66 6f 72 20 74 68 65  her case for the
17a0: 20 61 62 6f 76 65 20 66 72 6f 6d 20 4d 61 6e 75   above from Manu
17b0: 65 6c 20 52 69 67 67 65 72 2e 0a 23 0a 64 6f 5f  el Rigger..#.do_
17c0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6c 69 6b  execsql_test lik
17d0: 65 33 2d 35 2e 34 30 30 20 7b 0a 20 20 44 52 4f  e3-5.400 {.  DRO
17e0: 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54  P TABLE IF EXIST
17f0: 53 20 74 30 3b 0a 20 20 43 52 45 41 54 45 20 54  S t0;.  CREATE T
1800: 41 42 4c 45 20 74 30 28 63 30 20 49 4e 54 20 55  ABLE t0(c0 INT U
1810: 4e 49 51 55 45 20 43 4f 4c 4c 41 54 45 20 4e 4f  NIQUE COLLATE NO
1820: 43 41 53 45 29 3b 0a 20 20 49 4e 53 45 52 54 20  CASE);.  INSERT 
1830: 49 4e 54 4f 20 74 30 28 63 30 29 20 56 41 4c 55  INTO t0(c0) VALU
1840: 45 53 20 28 27 2e 2f 27 29 3b 0a 20 20 53 45 4c  ES ('./');.  SEL
1850: 45 43 54 20 2a 20 46 52 4f 4d 20 74 30 20 57 48  ECT * FROM t0 WH
1860: 45 52 45 20 74 30 2e 63 30 20 4c 49 4b 45 20 27  ERE t0.c0 LIKE '
1870: 2e 2f 27 3b 0a 7d 20 7b 2e 2f 7d 0a 0a 23 20 32  ./';.} {./}..# 2
1880: 30 31 39 2d 30 36 2d 31 34 0a 23 20 54 69 63 6b  019-06-14.# Tick
1890: 65 74 20 68 74 74 70 73 3a 2f 2f 77 77 77 2e 73  et https://www.s
18a0: 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 69 6e  qlite.org/src/in
18b0: 66 6f 2f 63 65 38 37 31 37 66 30 38 38 35 61 66  fo/ce8717f0885af
18c0: 39 37 35 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  975.do_execsql_t
18d0: 65 73 74 20 6c 69 6b 65 33 2d 35 2e 34 31 30 20  est like3-5.410 
18e0: 7b 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49  {.  DROP TABLE I
18f0: 46 20 45 58 49 53 54 53 20 74 30 3b 0a 20 20 43  F EXISTS t0;.  C
1900: 52 45 41 54 45 20 54 41 42 4c 45 20 74 30 28 63  REATE TABLE t0(c
1910: 30 20 49 4e 54 20 55 4e 49 51 55 45 20 43 4f 4c  0 INT UNIQUE COL
1920: 4c 41 54 45 20 4e 4f 43 41 53 45 29 3b 0a 20 20  LATE NOCASE);.  
1930: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 30 28 63  INSERT INTO t0(c
1940: 30 29 20 56 41 4c 55 45 53 20 28 27 2e 31 25 27  0) VALUES ('.1%'
1950: 29 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52  );.  SELECT * FR
1960: 4f 4d 20 74 30 20 57 48 45 52 45 20 74 30 2e 63  OM t0 WHERE t0.c
1970: 30 20 4c 49 4b 45 20 27 2e 31 25 27 3b 0a 7d 20  0 LIKE '.1%';.} 
1980: 7b 2e 31 25 7d 0a 0a 0a 23 20 32 30 31 39 2d 30  {.1%}...# 2019-0
1990: 32 2d 32 37 0a 23 20 56 65 72 69 66 79 20 74 68  2-27.# Verify th
19a0: 61 74 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69  at the LIKE opti
19b0: 6d 69 7a 61 74 69 6f 6e 20 77 6f 72 6b 73 20 77  mization works w
19c0: 69 74 68 20 61 6e 20 45 53 43 41 50 45 20 63 6c  ith an ESCAPE cl
19d0: 61 75 73 65 20 77 68 65 6e 0a 23 20 75 73 69 6e  ause when.# usin
19e0: 67 20 50 52 41 47 4d 41 20 63 61 73 65 5f 73 65  g PRAGMA case_se
19f0: 6e 73 69 74 69 76 65 5f 6c 69 6b 65 3d 4f 4e 2e  nsitive_like=ON.
1a00: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 21 69 63  .#.ifcapable !ic
1a10: 75 20 7b 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  u {.do_execsql_t
1a20: 65 73 74 20 6c 69 6b 65 33 2d 36 2e 31 30 30 20  est like3-6.100 
1a30: 7b 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49  {.  DROP TABLE I
1a40: 46 20 45 58 49 53 54 53 20 74 31 3b 0a 20 20 43  F EXISTS t1;.  C
1a50: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 70  REATE TABLE t1(p
1a60: 61 74 68 20 54 45 58 54 20 43 4f 4c 4c 41 54 45  ath TEXT COLLATE
1a70: 20 6e 6f 63 61 73 65 20 50 52 49 4d 41 52 59 20   nocase PRIMARY 
1a80: 4b 45 59 2c 61 2c 62 2c 63 29 20 57 49 54 48 4f  KEY,a,b,c) WITHO
1a90: 55 54 20 52 4f 57 49 44 3b 0a 7d 0a 64 6f 5f 65  UT ROWID;.}.do_e
1aa0: 71 70 5f 74 65 73 74 20 6c 69 6b 65 33 2d 36 2e  qp_test like3-6.
1ab0: 31 31 30 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a  110 {.  SELECT *
1ac0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 70   FROM t1 WHERE p
1ad0: 61 74 68 20 4c 49 4b 45 20 27 61 25 27 3b 0a 7d  ath LIKE 'a%';.}
1ae0: 20 7b 0a 20 20 51 55 45 52 59 20 50 4c 41 4e 0a   {.  QUERY PLAN.
1af0: 20 20 60 2d 2d 53 45 41 52 43 48 20 54 41 42 4c    `--SEARCH TABL
1b00: 45 20 74 31 20 55 53 49 4e 47 20 50 52 49 4d 41  E t1 USING PRIMA
1b10: 52 59 20 4b 45 59 20 28 70 61 74 68 3e 3f 20 41  RY KEY (path>? A
1b20: 4e 44 20 70 61 74 68 3c 3f 29 0a 7d 0a 64 6f 5f  ND path<?).}.do_
1b30: 65 71 70 5f 74 65 73 74 20 6c 69 6b 65 33 2d 36  eqp_test like3-6
1b40: 2e 31 32 30 20 7b 0a 20 20 53 45 4c 45 43 54 20  .120 {.  SELECT 
1b50: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
1b60: 70 61 74 68 20 4c 49 4b 45 20 27 61 25 27 20 45  path LIKE 'a%' E
1b70: 53 43 41 50 45 20 27 5f 27 3b 0a 7d 20 7b 0a 20  SCAPE '_';.} {. 
1b80: 20 51 55 45 52 59 20 50 4c 41 4e 0a 20 20 60 2d   QUERY PLAN.  `-
1b90: 2d 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 31  -SEARCH TABLE t1
1ba0: 20 55 53 49 4e 47 20 50 52 49 4d 41 52 59 20 4b   USING PRIMARY K
1bb0: 45 59 20 28 70 61 74 68 3e 3f 20 41 4e 44 20 70  EY (path>? AND p
1bc0: 61 74 68 3c 3f 29 0a 7d 0a 64 6f 5f 65 78 65 63  ath<?).}.do_exec
1bd0: 73 71 6c 5f 74 65 73 74 20 6c 69 6b 65 33 2d 36  sql_test like3-6
1be0: 2e 32 30 30 20 7b 0a 20 20 44 52 4f 50 20 54 41  .200 {.  DROP TA
1bf0: 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 32  BLE IF EXISTS t2
1c00: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
1c10: 20 74 32 28 70 61 74 68 20 54 45 58 54 2c 78 2c   t2(path TEXT,x,
1c20: 79 2c 7a 29 3b 0a 20 20 43 52 45 41 54 45 20 49  y,z);.  CREATE I
1c30: 4e 44 45 58 20 74 32 70 61 74 68 20 4f 4e 20 74  NDEX t2path ON t
1c40: 32 28 70 61 74 68 20 43 4f 4c 4c 41 54 45 20 6e  2(path COLLATE n
1c50: 6f 63 61 73 65 29 3b 0a 20 20 43 52 45 41 54 45  ocase);.  CREATE
1c60: 20 49 4e 44 45 58 20 74 32 70 61 74 68 32 20 4f   INDEX t2path2 O
1c70: 4e 20 74 32 28 70 61 74 68 29 3b 0a 7d 0a 64 6f  N t2(path);.}.do
1c80: 5f 65 71 70 5f 74 65 73 74 20 6c 69 6b 65 33 2d  _eqp_test like3-
1c90: 36 2e 32 31 30 20 7b 0a 20 20 53 45 4c 45 43 54  6.210 {.  SELECT
1ca0: 20 2a 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45   * FROM t2 WHERE
1cb0: 20 70 61 74 68 20 4c 49 4b 45 20 27 61 25 27 3b   path LIKE 'a%';
1cc0: 0a 7d 20 7b 0a 20 20 51 55 45 52 59 20 50 4c 41  .} {.  QUERY PLA
1cd0: 4e 0a 20 20 60 2d 2d 53 45 41 52 43 48 20 54 41  N.  `--SEARCH TA
1ce0: 42 4c 45 20 74 32 20 55 53 49 4e 47 20 49 4e 44  BLE t2 USING IND
1cf0: 45 58 20 74 32 70 61 74 68 20 28 70 61 74 68 3e  EX t2path (path>
1d00: 3f 20 41 4e 44 20 70 61 74 68 3c 3f 29 0a 7d 0a  ? AND path<?).}.
1d10: 64 6f 5f 65 71 70 5f 74 65 73 74 20 6c 69 6b 65  do_eqp_test like
1d20: 33 2d 36 2e 32 32 30 20 7b 0a 20 20 53 45 4c 45  3-6.220 {.  SELE
1d30: 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 57 48 45  CT * FROM t2 WHE
1d40: 52 45 20 70 61 74 68 20 4c 49 4b 45 20 27 61 25  RE path LIKE 'a%
1d50: 27 20 45 53 43 41 50 45 20 27 5f 27 3b 0a 7d 20  ' ESCAPE '_';.} 
1d60: 7b 0a 20 20 51 55 45 52 59 20 50 4c 41 4e 0a 20  {.  QUERY PLAN. 
1d70: 20 60 2d 2d 53 45 41 52 43 48 20 54 41 42 4c 45   `--SEARCH TABLE
1d80: 20 74 32 20 55 53 49 4e 47 20 49 4e 44 45 58 20   t2 USING INDEX 
1d90: 74 32 70 61 74 68 20 28 70 61 74 68 3e 3f 20 41  t2path (path>? A
1da0: 4e 44 20 70 61 74 68 3c 3f 29 0a 7d 0a 64 62 20  ND path<?).}.db 
1db0: 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 63 61 73  eval {PRAGMA cas
1dc0: 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65  e_sensitive_like
1dd0: 3d 4f 4e 7d 0a 64 6f 5f 65 71 70 5f 74 65 73 74  =ON}.do_eqp_test
1de0: 20 6c 69 6b 65 33 2d 36 2e 32 33 30 20 7b 0a 20   like3-6.230 {. 
1df0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1e00: 32 20 57 48 45 52 45 20 70 61 74 68 20 4c 49 4b  2 WHERE path LIK
1e10: 45 20 27 61 25 27 3b 0a 7d 20 7b 0a 20 20 51 55  E 'a%';.} {.  QU
1e20: 45 52 59 20 50 4c 41 4e 0a 20 20 60 2d 2d 53 45  ERY PLAN.  `--SE
1e30: 41 52 43 48 20 54 41 42 4c 45 20 74 32 20 55 53  ARCH TABLE t2 US
1e40: 49 4e 47 20 49 4e 44 45 58 20 74 32 70 61 74 68  ING INDEX t2path
1e50: 32 20 28 70 61 74 68 3e 3f 20 41 4e 44 20 70 61  2 (path>? AND pa
1e60: 74 68 3c 3f 29 0a 7d 0a 64 6f 5f 65 71 70 5f 74  th<?).}.do_eqp_t
1e70: 65 73 74 20 6c 69 6b 65 33 2d 36 2e 32 34 30 20  est like3-6.240 
1e80: 7b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  {.  SELECT * FRO
1e90: 4d 20 74 32 20 57 48 45 52 45 20 70 61 74 68 20  M t2 WHERE path 
1ea0: 4c 49 4b 45 20 27 61 25 27 20 45 53 43 41 50 45  LIKE 'a%' ESCAPE
1eb0: 20 27 5f 27 3b 0a 7d 20 7b 0a 20 20 51 55 45 52   '_';.} {.  QUER
1ec0: 59 20 50 4c 41 4e 0a 20 20 60 2d 2d 53 45 41 52  Y PLAN.  `--SEAR
1ed0: 43 48 20 54 41 42 4c 45 20 74 32 20 55 53 49 4e  CH TABLE t2 USIN
1ee0: 47 20 49 4e 44 45 58 20 74 32 70 61 74 68 32 20  G INDEX t2path2 
1ef0: 28 70 61 74 68 3e 3f 20 41 4e 44 20 70 61 74 68  (path>? AND path
1f00: 3c 3f 29 0a 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f  <?).}.}..finish_
1f10: 74 65 73 74 0a                                   test.