/ Hex Artifact Content
Login

Artifact 3d0ce415d2ee15d3d564121960016b9c7be79407:


0000: 23 20 32 30 31 33 20 4d 61 72 63 68 20 31 33 0a  # 2013 March 13.
0010: 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64  #.# The author d
0020: 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67  isclaims copyrig
0030: 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63  ht to this sourc
0040: 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63  e code.  In plac
0050: 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e  e of.# a legal n
0060: 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61  otice, here is a
0070: 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20   blessing:.#.#  
0080: 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f    May you do goo
0090: 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a  d and not evil..
00a0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e  #    May you fin
00b0: 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f  d forgiveness fo
00c0: 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66  r yourself and f
00d0: 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23  orgive others..#
00e0: 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72      May you shar
00f0: 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20  e freely, never 
0100: 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e  taking more than
0110: 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a   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 0a 23 20 54 68 69 73 20 66 69 6c  *****.# This fil
0170: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67  e implements reg
0180: 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f  ression tests fo
0190: 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  r SQLite library
01a0: 2e 20 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69  . .#..set testdi
01b0: 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  r [file dirname 
01c0: 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24  $argv0].source $
01d0: 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74  testdir/tester.t
01e0: 63 6c 0a 73 65 74 20 3a 3a 74 65 73 74 70 72 65  cl.set ::testpre
01f0: 66 69 78 20 74 6b 74 2d 34 64 64 39 35 66 36 39  fix tkt-4dd95f69
0200: 34 33 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  43..do_execsql_t
0210: 65 73 74 20 31 2e 30 20 7b 0a 20 20 43 52 45 41  est 1.0 {.  CREA
0220: 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b 0a  TE TABLE t1(x);.
0230: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0240: 20 56 41 4c 55 45 53 20 28 33 29 2c 20 28 34 29   VALUES (3), (4)
0250: 2c 20 28 32 29 2c 20 28 31 29 2c 20 28 35 29 2c  , (2), (1), (5),
0260: 20 28 36 29 3b 0a 7d 0a 0a 66 6f 72 65 61 63 68   (6);.}..foreach
0270: 20 7b 74 6e 31 20 69 64 78 7d 20 7b 0a 20 20 31   {tn1 idx} {.  1
0280: 20 7b 20 43 52 45 41 54 45 20 49 4e 44 45 58 20   { CREATE INDEX 
0290: 69 31 20 4f 4e 20 74 31 28 78 20 41 53 43 29 20  i1 ON t1(x ASC) 
02a0: 7d 0a 20 20 32 20 7b 20 43 52 45 41 54 45 20 49  }.  2 { CREATE I
02b0: 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 78 20  NDEX i1 ON t1(x 
02c0: 44 45 53 43 29 20 7d 0a 7d 20 7b 0a 20 20 64 6f  DESC) }.} {.  do
02d0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e  _execsql_test 1.
02e0: 24 74 6e 31 2e 31 20 7b 20 44 52 4f 50 20 49 4e  $tn1.1 { DROP IN
02f0: 44 45 58 20 49 46 20 45 58 49 53 54 53 20 69 31  DEX IF EXISTS i1
0300: 3b 20 7d 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c  ; }.  do_execsql
0310: 5f 74 65 73 74 20 31 2e 24 74 6e 31 2e 32 20 24  _test 1.$tn1.2 $
0320: 69 64 78 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71  idx..  do_execsq
0330: 6c 5f 74 65 73 74 20 31 2e 24 74 6e 31 2e 33 20  l_test 1.$tn1.3 
0340: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78 20 46  {.    SELECT x F
0350: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20 49  ROM t1 WHERE x I
0360: 4e 28 32 2c 20 34 2c 20 35 29 20 4f 52 44 45 52  N(2, 4, 5) ORDER
0370: 20 42 59 20 78 20 41 53 43 3b 0a 20 20 7d 20 7b   BY x ASC;.  } {
0380: 32 20 34 20 35 7d 0a 0a 20 20 64 6f 5f 65 78 65  2 4 5}..  do_exe
0390: 63 73 71 6c 5f 74 65 73 74 20 31 2e 24 74 6e 31  csql_test 1.$tn1
03a0: 2e 34 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  .4 {.    SELECT 
03b0: 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  x FROM t1 WHERE 
03c0: 78 20 49 4e 28 32 2c 20 34 2c 20 35 29 20 4f 52  x IN(2, 4, 5) OR
03d0: 44 45 52 20 42 59 20 78 20 44 45 53 43 3b 0a 20  DER BY x DESC;. 
03e0: 20 7d 20 7b 35 20 34 20 32 7d 0a 7d 0a 0a 0a 64   } {5 4 2}.}...d
03f0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32  o_execsql_test 2
0400: 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41  .0 {.  CREATE TA
0410: 42 4c 45 20 74 32 28 78 2c 20 79 29 3b 0a 20 20  BLE t2(x, y);.  
0420: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
0430: 41 4c 55 45 53 20 28 35 2c 20 33 29 2c 20 28 35  ALUES (5, 3), (5
0440: 2c 20 34 29 2c 20 28 35 2c 20 32 29 2c 20 28 35  , 4), (5, 2), (5
0450: 2c 20 31 29 2c 20 28 35 2c 20 35 29 2c 20 28 35  , 1), (5, 5), (5
0460: 2c 20 36 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , 6);.  INSERT I
0470: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 20 28 31  NTO t2 VALUES (1
0480: 2c 20 33 29 2c 20 28 31 2c 20 34 29 2c 20 28 31  , 3), (1, 4), (1
0490: 2c 20 32 29 2c 20 28 31 2c 20 31 29 2c 20 28 31  , 2), (1, 1), (1
04a0: 2c 20 35 29 2c 20 28 31 2c 20 36 29 3b 0a 20 20  , 5), (1, 6);.  
04b0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
04c0: 41 4c 55 45 53 20 28 33 2c 20 33 29 2c 20 28 33  ALUES (3, 3), (3
04d0: 2c 20 34 29 2c 20 28 33 2c 20 32 29 2c 20 28 33  , 4), (3, 2), (3
04e0: 2c 20 31 29 2c 20 28 33 2c 20 35 29 2c 20 28 33  , 1), (3, 5), (3
04f0: 2c 20 36 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , 6);.  INSERT I
0500: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 20 28 32  NTO t2 VALUES (2
0510: 2c 20 33 29 2c 20 28 32 2c 20 34 29 2c 20 28 32  , 3), (2, 4), (2
0520: 2c 20 32 29 2c 20 28 32 2c 20 31 29 2c 20 28 32  , 2), (2, 1), (2
0530: 2c 20 35 29 2c 20 28 32 2c 20 36 29 3b 0a 20 20  , 5), (2, 6);.  
0540: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
0550: 41 4c 55 45 53 20 28 34 2c 20 33 29 2c 20 28 34  ALUES (4, 3), (4
0560: 2c 20 34 29 2c 20 28 34 2c 20 32 29 2c 20 28 34  , 4), (4, 2), (4
0570: 2c 20 31 29 2c 20 28 34 2c 20 35 29 2c 20 28 34  , 1), (4, 5), (4
0580: 2c 20 36 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , 6);.  INSERT I
0590: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 20 28 36  NTO t2 VALUES (6
05a0: 2c 20 33 29 2c 20 28 36 2c 20 34 29 2c 20 28 36  , 3), (6, 4), (6
05b0: 2c 20 32 29 2c 20 28 36 2c 20 31 29 2c 20 28 36  , 2), (6, 1), (6
05c0: 2c 20 35 29 2c 20 28 36 2c 20 36 29 3b 0a 0a 20  , 5), (6, 6);.. 
05d0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
05e0: 28 61 2c 20 62 29 3b 0a 20 20 49 4e 53 45 52 54  (a, b);.  INSERT
05f0: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 20   INTO t3 VALUES 
0600: 28 32 2c 20 32 29 2c 20 28 34 2c 20 34 29 2c 20  (2, 2), (4, 4), 
0610: 28 35 2c 20 35 29 3b 0a 20 20 43 52 45 41 54 45  (5, 5);.  CREATE
0620: 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20 74 33   UNIQUE INDEX t3
0630: 69 31 20 4f 4e 20 74 33 28 61 20 41 53 43 29 3b  i1 ON t3(a ASC);
0640: 0a 20 20 43 52 45 41 54 45 20 55 4e 49 51 55 45  .  CREATE UNIQUE
0650: 20 49 4e 44 45 58 20 74 33 69 32 20 4f 4e 20 74   INDEX t3i2 ON t
0660: 33 28 62 20 44 45 53 43 29 3b 0a 7d 0a 0a 66 6f  3(b DESC);.}..fo
0670: 72 65 61 63 68 20 7b 74 6e 31 20 69 64 78 7d 20  reach {tn1 idx} 
0680: 7b 0a 20 20 31 20 7b 20 43 52 45 41 54 45 20 49  {.  1 { CREATE I
0690: 4e 44 45 58 20 69 31 20 4f 4e 20 74 32 28 78 20  NDEX i1 ON t2(x 
06a0: 41 53 43 2c 20 20 79 20 41 53 43 29 20 7d 0a 20  ASC,  y ASC) }. 
06b0: 20 32 20 7b 20 43 52 45 41 54 45 20 49 4e 44 45   2 { CREATE INDE
06c0: 58 20 69 31 20 4f 4e 20 74 32 28 78 20 41 53 43  X i1 ON t2(x ASC
06d0: 2c 20 20 79 20 44 45 53 43 29 20 7d 0a 20 20 33  ,  y DESC) }.  3
06e0: 20 7b 20 43 52 45 41 54 45 20 49 4e 44 45 58 20   { CREATE INDEX 
06f0: 69 31 20 4f 4e 20 74 32 28 78 20 44 45 53 43 2c  i1 ON t2(x DESC,
0700: 20 79 20 41 53 43 29 20 7d 0a 20 20 34 20 7b 20   y ASC) }.  4 { 
0710: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20  CREATE INDEX i1 
0720: 4f 4e 20 74 32 28 78 20 44 45 53 43 2c 20 79 20  ON t2(x DESC, y 
0730: 44 45 53 43 29 20 7d 0a 0a 20 20 35 20 7b 20 43  DESC) }..  5 { C
0740: 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f  REATE INDEX i1 O
0750: 4e 20 74 32 28 79 20 41 53 43 2c 20 20 78 20 41  N t2(y ASC,  x A
0760: 53 43 29 20 7d 0a 20 20 36 20 7b 20 43 52 45 41  SC) }.  6 { CREA
0770: 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74  TE INDEX i1 ON t
0780: 32 28 79 20 41 53 43 2c 20 20 78 20 44 45 53 43  2(y ASC,  x DESC
0790: 29 20 7d 0a 20 20 37 20 7b 20 43 52 45 41 54 45  ) }.  7 { CREATE
07a0: 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 32 28   INDEX i1 ON t2(
07b0: 79 20 44 45 53 43 2c 20 78 20 41 53 43 29 20 7d  y DESC, x ASC) }
07c0: 0a 20 20 38 20 7b 20 43 52 45 41 54 45 20 49 4e  .  8 { CREATE IN
07d0: 44 45 58 20 69 31 20 4f 4e 20 74 32 28 79 20 44  DEX i1 ON t2(y D
07e0: 45 53 43 2c 20 78 20 44 45 53 43 29 20 7d 0a 7d  ESC, x DESC) }.}
07f0: 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f   {.  do_execsql_
0800: 74 65 73 74 20 32 2e 24 74 6e 31 2e 31 20 7b 20  test 2.$tn1.1 { 
0810: 44 52 4f 50 20 49 4e 44 45 58 20 49 46 20 45 58  DROP INDEX IF EX
0820: 49 53 54 53 20 69 31 3b 20 7d 0a 20 20 64 6f 5f  ISTS i1; }.  do_
0830: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 24  execsql_test 2.$
0840: 74 6e 31 2e 32 20 24 69 64 78 0a 0a 20 20 66 6f  tn1.2 $idx..  fo
0850: 72 65 61 63 68 20 7b 74 6e 32 20 69 6e 65 78 70  reach {tn2 inexp
0860: 72 7d 20 7b 0a 20 20 20 20 33 20 20 22 28 32 2c  r} {.    3  "(2,
0870: 20 34 2c 20 35 29 22 0a 20 20 20 20 34 20 20 22   4, 5)".    4  "
0880: 28 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74  (SELECT a FROM t
0890: 33 29 22 0a 20 20 20 20 35 20 20 22 28 53 45 4c  3)".    5  "(SEL
08a0: 45 43 54 20 62 20 46 52 4f 4d 20 74 33 29 22 0a  ECT b FROM t3)".
08b0: 20 20 7d 20 7b 0a 20 20 20 20 64 6f 5f 65 78 65    } {.    do_exe
08c0: 63 73 71 6c 5f 74 65 73 74 20 32 2e 24 74 6e 31  csql_test 2.$tn1
08d0: 2e 24 74 6e 32 2e 31 20 22 0a 20 20 20 20 20 20  .$tn2.1 ".      
08e0: 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d  SELECT x, y FROM
08f0: 20 74 32 20 57 48 45 52 45 20 78 20 3d 20 31 20   t2 WHERE x = 1 
0900: 41 4e 44 20 79 20 49 4e 20 24 69 6e 65 78 70 72  AND y IN $inexpr
0910: 20 4f 52 44 45 52 20 42 59 20 78 20 41 53 43 2c   ORDER BY x ASC,
0920: 20 79 20 41 53 43 3b 0a 20 20 20 20 22 20 7b 31   y ASC;.    " {1
0930: 20 32 20 20 31 20 34 20 20 31 20 35 7d 0a 0a 20   2  1 4  1 5}.. 
0940: 20 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65     do_execsql_te
0950: 73 74 20 32 2e 24 74 6e 31 2e 24 74 6e 32 2e 32  st 2.$tn1.$tn2.2
0960: 20 22 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   ".      SELECT 
0970: 78 2c 20 79 20 46 52 4f 4d 20 74 32 20 57 48 45  x, y FROM t2 WHE
0980: 52 45 20 78 20 3d 20 32 20 41 4e 44 20 79 20 49  RE x = 2 AND y I
0990: 4e 20 24 69 6e 65 78 70 72 20 4f 52 44 45 52 20  N $inexpr ORDER 
09a0: 42 59 20 78 20 41 53 43 2c 20 79 20 44 45 53 43  BY x ASC, y DESC
09b0: 3b 0a 20 20 20 20 22 20 7b 32 20 35 20 20 32 20  ;.    " {2 5  2 
09c0: 34 20 20 32 20 32 7d 0a 0a 20 20 20 20 64 6f 5f  4  2 2}..    do_
09d0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 24  execsql_test 2.$
09e0: 74 6e 31 2e 24 74 6e 32 2e 33 20 22 0a 20 20 20  tn1.$tn2.3 ".   
09f0: 20 20 20 53 45 4c 45 43 54 20 78 2c 20 79 20 46     SELECT x, y F
0a00: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 78 20 3d  ROM t2 WHERE x =
0a10: 20 33 20 41 4e 44 20 79 20 49 4e 20 24 69 6e 65   3 AND y IN $ine
0a20: 78 70 72 20 4f 52 44 45 52 20 42 59 20 78 20 44  xpr ORDER BY x D
0a30: 45 53 43 2c 20 79 20 41 53 43 3b 0a 20 20 20 20  ESC, y ASC;.    
0a40: 22 20 7b 33 20 32 20 20 33 20 34 20 20 33 20 35  " {3 2  3 4  3 5
0a50: 7d 0a 0a 20 20 20 20 64 6f 5f 65 78 65 63 73 71  }..    do_execsq
0a60: 6c 5f 74 65 73 74 20 32 2e 24 74 6e 31 2e 24 74  l_test 2.$tn1.$t
0a70: 6e 32 2e 34 20 22 0a 20 20 20 20 20 20 53 45 4c  n2.4 ".      SEL
0a80: 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 32  ECT x, y FROM t2
0a90: 20 57 48 45 52 45 20 78 20 3d 20 34 20 41 4e 44   WHERE x = 4 AND
0aa0: 20 79 20 49 4e 20 24 69 6e 65 78 70 72 20 4f 52   y IN $inexpr OR
0ab0: 44 45 52 20 42 59 20 78 20 44 45 53 43 2c 20 79  DER BY x DESC, y
0ac0: 20 44 45 53 43 3b 0a 20 20 20 20 22 20 7b 34 20   DESC;.    " {4 
0ad0: 35 20 20 34 20 34 20 20 34 20 32 7d 0a 20 20 20  5  4 4  4 2}.   
0ae0: 20 0a 20 20 20 20 64 6f 5f 65 78 65 63 73 71 6c   .    do_execsql
0af0: 5f 74 65 73 74 20 32 2e 24 74 6e 31 2e 24 74 6e  _test 2.$tn1.$tn
0b00: 32 2e 35 20 22 0a 20 20 20 20 20 20 53 45 4c 45  2.5 ".      SELE
0b10: 43 54 20 61 2c 20 78 2c 20 79 20 46 52 4f 4d 20  CT a, x, y FROM 
0b20: 74 32 2c 20 74 33 20 57 48 45 52 45 20 61 20 3d  t2, t3 WHERE a =
0b30: 20 34 20 41 4e 44 20 78 20 3d 20 31 20 41 4e 44   4 AND x = 1 AND
0b40: 20 79 20 49 4e 20 24 69 6e 65 78 70 72 20 0a 20   y IN $inexpr . 
0b50: 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 61 2c       ORDER BY a,
0b60: 20 78 20 41 53 43 2c 20 79 20 41 53 43 3b 0a 20   x ASC, y ASC;. 
0b70: 20 20 20 22 20 7b 34 20 31 20 32 20 20 34 20 31     " {4 1 2  4 1
0b80: 20 34 20 20 34 20 31 20 35 7d 0a 20 20 20 20 64   4  4 1 5}.    d
0b90: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32  o_execsql_test 2
0ba0: 2e 24 74 6e 31 2e 24 74 6e 32 2e 36 20 22 0a 20  .$tn1.$tn2.6 ". 
0bb0: 20 20 20 20 20 53 45 4c 45 43 54 20 61 2c 20 78       SELECT a, x
0bc0: 2c 20 79 20 46 52 4f 4d 20 74 32 2c 20 74 33 20  , y FROM t2, t3 
0bd0: 57 48 45 52 45 20 61 20 3d 20 32 20 41 4e 44 20  WHERE a = 2 AND 
0be0: 78 20 3d 20 31 20 41 4e 44 20 79 20 49 4e 20 24  x = 1 AND y IN $
0bf0: 69 6e 65 78 70 72 20 0a 20 20 20 20 20 20 4f 52  inexpr .      OR
0c00: 44 45 52 20 42 59 20 78 20 41 53 43 2c 20 79 20  DER BY x ASC, y 
0c10: 41 53 43 3b 0a 20 20 20 20 22 20 7b 32 20 31 20  ASC;.    " {2 1 
0c20: 32 20 20 32 20 31 20 34 20 20 32 20 31 20 35 7d  2  2 1 4  2 1 5}
0c30: 0a 0a 20 20 20 20 64 6f 5f 65 78 65 63 73 71 6c  ..    do_execsql
0c40: 5f 74 65 73 74 20 32 2e 24 74 6e 31 2e 24 74 6e  _test 2.$tn1.$tn
0c50: 32 2e 37 20 22 0a 20 20 20 20 20 20 53 45 4c 45  2.7 ".      SELE
0c60: 43 54 20 61 2c 20 78 2c 20 79 20 46 52 4f 4d 20  CT a, x, y FROM 
0c70: 74 32 2c 20 74 33 20 57 48 45 52 45 20 61 20 3d  t2, t3 WHERE a =
0c80: 20 34 20 41 4e 44 20 78 20 3d 20 31 20 41 4e 44   4 AND x = 1 AND
0c90: 20 79 20 49 4e 20 24 69 6e 65 78 70 72 20 0a 20   y IN $inexpr . 
0ca0: 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 61 2c       ORDER BY a,
0cb0: 20 78 20 41 53 43 2c 20 79 20 44 45 53 43 3b 0a   x ASC, y DESC;.
0cc0: 20 20 20 20 22 20 7b 34 20 31 20 35 20 20 34 20      " {4 1 5  4 
0cd0: 31 20 34 20 20 34 20 31 20 32 7d 0a 20 20 20 20  1 4  4 1 2}.    
0ce0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0cf0: 32 2e 24 74 6e 31 2e 38 20 22 0a 20 20 20 20 20  2.$tn1.8 ".     
0d00: 20 53 45 4c 45 43 54 20 61 2c 20 78 2c 20 79 20   SELECT a, x, y 
0d10: 46 52 4f 4d 20 74 32 2c 20 74 33 20 57 48 45 52  FROM t2, t3 WHER
0d20: 45 20 61 20 3d 20 32 20 41 4e 44 20 78 20 3d 20  E a = 2 AND x = 
0d30: 31 20 41 4e 44 20 79 20 49 4e 20 24 69 6e 65 78  1 AND y IN $inex
0d40: 70 72 20 0a 20 20 20 20 20 20 4f 52 44 45 52 20  pr .      ORDER 
0d50: 42 59 20 78 20 41 53 43 2c 20 79 20 44 45 53 43  BY x ASC, y DESC
0d60: 3b 0a 20 20 20 20 22 20 7b 32 20 31 20 35 20 20  ;.    " {2 1 5  
0d70: 32 20 31 20 34 20 20 32 20 31 20 32 7d 0a 0a 20  2 1 4  2 1 2}.. 
0d80: 20 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65     do_execsql_te
0d90: 73 74 20 32 2e 24 74 6e 31 2e 24 74 6e 32 2e 39  st 2.$tn1.$tn2.9
0da0: 20 22 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   ".      SELECT 
0db0: 61 2c 20 78 2c 20 79 20 46 52 4f 4d 20 74 32 2c  a, x, y FROM t2,
0dc0: 20 74 33 20 57 48 45 52 45 20 61 20 3d 20 34 20   t3 WHERE a = 4 
0dd0: 41 4e 44 20 78 20 3d 20 31 20 41 4e 44 20 79 20  AND x = 1 AND y 
0de0: 49 4e 20 24 69 6e 65 78 70 72 20 0a 20 20 20 20  IN $inexpr .    
0df0: 20 20 4f 52 44 45 52 20 42 59 20 61 2c 20 78 20    ORDER BY a, x 
0e00: 44 45 53 43 2c 20 79 20 41 53 43 3b 0a 20 20 20  DESC, y ASC;.   
0e10: 20 22 20 7b 34 20 31 20 32 20 20 34 20 31 20 34   " {4 1 2  4 1 4
0e20: 20 20 34 20 31 20 35 7d 0a 20 20 20 20 64 6f 5f    4 1 5}.    do_
0e30: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 24  execsql_test 2.$
0e40: 74 6e 31 2e 31 30 20 22 0a 20 20 20 20 20 20 53  tn1.10 ".      S
0e50: 45 4c 45 43 54 20 61 2c 20 78 2c 20 79 20 46 52  ELECT a, x, y FR
0e60: 4f 4d 20 74 32 2c 20 74 33 20 57 48 45 52 45 20  OM t2, t3 WHERE 
0e70: 61 20 3d 20 32 20 41 4e 44 20 78 20 3d 20 31 20  a = 2 AND x = 1 
0e80: 41 4e 44 20 79 20 49 4e 20 24 69 6e 65 78 70 72  AND y IN $inexpr
0e90: 20 0a 20 20 20 20 20 20 4f 52 44 45 52 20 42 59   .      ORDER BY
0ea0: 20 78 20 44 45 53 43 2c 20 79 20 41 53 43 3b 0a   x DESC, y ASC;.
0eb0: 20 20 20 20 22 20 7b 32 20 31 20 32 20 20 32 20      " {2 1 2  2 
0ec0: 31 20 34 20 20 32 20 31 20 35 7d 0a 0a 20 20 20  1 4  2 1 5}..   
0ed0: 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74   do_execsql_test
0ee0: 20 32 2e 24 74 6e 31 2e 24 74 6e 32 2e 31 31 20   2.$tn1.$tn2.11 
0ef0: 22 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 61  ".      SELECT a
0f00: 2c 20 78 2c 20 79 20 46 52 4f 4d 20 74 32 2c 20  , x, y FROM t2, 
0f10: 74 33 20 57 48 45 52 45 20 61 20 3d 20 34 20 41  t3 WHERE a = 4 A
0f20: 4e 44 20 78 20 3d 20 31 20 41 4e 44 20 79 20 49  ND x = 1 AND y I
0f30: 4e 20 24 69 6e 65 78 70 72 20 0a 20 20 20 20 20  N $inexpr .     
0f40: 20 4f 52 44 45 52 20 42 59 20 61 2c 20 78 20 44   ORDER BY a, x D
0f50: 45 53 43 2c 20 79 20 44 45 53 43 3b 0a 20 20 20  ESC, y DESC;.   
0f60: 20 22 20 7b 34 20 31 20 35 20 20 34 20 31 20 34   " {4 1 5  4 1 4
0f70: 20 20 34 20 31 20 32 7d 0a 20 20 20 20 64 6f 5f    4 1 2}.    do_
0f80: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 24  execsql_test 2.$
0f90: 74 6e 31 2e 24 74 6e 32 2e 31 32 20 22 0a 20 20  tn1.$tn2.12 ".  
0fa0: 20 20 20 20 53 45 4c 45 43 54 20 61 2c 20 78 2c      SELECT a, x,
0fb0: 20 79 20 46 52 4f 4d 20 74 32 2c 20 74 33 20 57   y FROM t2, t3 W
0fc0: 48 45 52 45 20 61 20 3d 20 32 20 41 4e 44 20 78  HERE a = 2 AND x
0fd0: 20 3d 20 31 20 41 4e 44 20 79 20 49 4e 20 24 69   = 1 AND y IN $i
0fe0: 6e 65 78 70 72 20 0a 20 20 20 20 20 20 4f 52 44  nexpr .      ORD
0ff0: 45 52 20 42 59 20 78 20 44 45 53 43 2c 20 79 20  ER BY x DESC, y 
1000: 44 45 53 43 3b 0a 20 20 20 20 22 20 7b 32 20 31  DESC;.    " {2 1
1010: 20 35 20 20 32 20 31 20 34 20 20 32 20 31 20 32   5  2 1 4  2 1 2
1020: 7d 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f 65 78 65 63  }.  }.}..do_exec
1030: 73 71 6c 5f 74 65 73 74 20 33 2e 30 20 7b 0a 20  sql_test 3.0 {. 
1040: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 37   CREATE TABLE t7
1050: 28 78 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  (x);.  INSERT IN
1060: 54 4f 20 74 37 20 56 41 4c 55 45 53 20 28 31 29  TO t7 VALUES (1)
1070: 2c 20 28 32 29 2c 20 28 33 29 3b 0a 20 20 43 52  , (2), (3);.  CR
1080: 45 41 54 45 20 49 4e 44 45 58 20 69 37 20 4f 4e  EATE INDEX i7 ON
1090: 20 74 37 28 78 29 3b 0a 0a 20 20 43 52 45 41 54   t7(x);..  CREAT
10a0: 45 20 54 41 42 4c 45 20 74 38 28 79 29 3b 0a 20  E TABLE t8(y);. 
10b0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20   INSERT INTO t8 
10c0: 56 41 4c 55 45 53 20 28 31 29 2c 20 28 32 29 2c  VALUES (1), (2),
10d0: 20 28 33 29 3b 0a 7d 0a 0a 66 6f 72 65 61 63 68   (3);.}..foreach
10e0: 20 7b 74 6e 20 69 64 78 64 69 72 20 73 6f 72 74   {tn idxdir sort
10f0: 64 69 72 20 73 6f 72 74 64 61 74 61 7d 20 7b 0a  dir sortdata} {.
1100: 20 20 31 20 41 53 43 20 20 41 53 43 20 20 7b 31    1 ASC  ASC  {1
1110: 20 32 20 33 7d 0a 20 20 32 20 41 53 43 20 20 44   2 3}.  2 ASC  D
1120: 45 53 43 20 7b 33 20 32 20 31 7d 0a 20 20 33 20  ESC {3 2 1}.  3 
1130: 44 45 53 43 20 41 53 43 20 20 7b 31 20 32 20 33  DESC ASC  {1 2 3
1140: 7d 0a 20 20 34 20 41 53 43 20 20 44 45 53 43 20  }.  4 ASC  DESC 
1150: 7b 33 20 32 20 31 7d 0a 7d 20 7b 0a 0a 20 20 64  {3 2 1}.} {..  d
1160: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33  o_execsql_test 3
1170: 2e 24 74 6e 20 22 0a 20 20 20 20 44 52 4f 50 20  .$tn ".    DROP 
1180: 49 4e 44 45 58 20 49 46 20 45 58 49 53 54 53 20  INDEX IF EXISTS 
1190: 69 38 3b 0a 20 20 20 20 43 52 45 41 54 45 20 55  i8;.    CREATE U
11a0: 4e 49 51 55 45 20 49 4e 44 45 58 20 69 38 20 4f  NIQUE INDEX i8 O
11b0: 4e 20 74 38 28 79 20 24 69 64 78 64 69 72 29 3b  N t8(y $idxdir);
11c0: 0a 20 20 20 20 53 45 4c 45 43 54 20 78 20 46 52  .    SELECT x FR
11d0: 4f 4d 20 74 37 20 57 48 45 52 45 20 78 20 49 4e  OM t7 WHERE x IN
11e0: 20 28 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20   (SELECT y FROM 
11f0: 74 38 29 20 4f 52 44 45 52 20 42 59 20 78 20 24  t8) ORDER BY x $
1200: 73 6f 72 74 64 69 72 3b 0a 20 20 22 20 24 73 6f  sortdir;.  " $so
1210: 72 74 64 61 74 61 0a 7d 0a 0a 66 69 6e 69 73 68  rtdata.}..finish
1220: 5f 74 65 73 74 0a                                _test.