/ Hex Artifact Content
Login

Artifact 8619d06a3debdcd80a27c0fdea5c40b468854b99:


0000: 23 20 32 30 31 33 20 4a 61 6e 75 61 72 79 20 30  # 2013 January 0
0010: 39 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  9.#.# 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 23 20 54 68 69 73 20 66  *******.# This f
0170: 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72  ile implements r
0180: 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
0190: 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61  for SQLite libra
01a0: 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75 73  ry.  The.# focus
01b0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73   of this file is
01c0: 20 74 65 73 74 69 6e 67 20 74 68 61 74 20 74 68   testing that th
01d0: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  e optimizations 
01e0: 74 68 61 74 20 64 69 73 61 62 6c 65 0a 23 20 4f  that disable.# O
01f0: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 20  RDER BY clauses 
0200: 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f  work correctly o
0210: 6e 20 61 20 33 2d 77 61 79 20 6a 6f 69 6e 2e 20  n a 3-way join. 
0220: 20 53 65 65 20 74 69 63 6b 65 74 0a 23 20 68 74   See ticket.# ht
0230: 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  tp://www.sqlite.
0240: 6f 72 67 2f 73 72 63 2f 39 35 36 65 34 64 37 66  org/src/956e4d7f
0250: 38 39 0a 23 0a 0a 0a 73 65 74 20 74 65 73 74 64  89.#...set testd
0260: 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ir [file dirname
0270: 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20   $argv0].source 
0280: 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e  $testdir/tester.
0290: 74 63 6c 0a 73 65 74 20 3a 3a 74 65 73 74 70 72  tcl.set ::testpr
02a0: 65 66 69 78 20 6f 72 64 65 72 62 79 33 0a 0a 23  efix orderby3..#
02b0: 20 47 65 6e 65 72 61 74 65 20 74 65 73 74 20 64   Generate test d
02c0: 61 74 61 20 66 6f 72 20 61 20 6a 6f 69 6e 2e 20  ata for a join. 
02d0: 20 56 65 72 69 66 79 20 74 68 61 74 20 74 68 65   Verify that the
02e0: 20 6a 6f 69 6e 20 67 65 74 73 20 74 68 65 0a 23   join gets the.#
02f0: 20 63 6f 72 72 65 63 74 20 61 6e 73 77 65 72 2e   correct answer.
0300: 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
0310: 73 74 20 31 2e 30 20 7b 0a 20 20 43 52 45 41 54  st 1.0 {.  CREAT
0320: 45 20 54 41 42 4c 45 20 74 31 28 61 20 49 4e 54  E TABLE t1(a INT
0330: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
0340: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
0350: 45 20 74 32 28 62 20 49 4e 54 45 47 45 52 20 50  E t2(b INTEGER P
0360: 52 49 4d 41 52 59 20 4b 45 59 2c 20 63 20 49 4e  RIMARY KEY, c IN
0370: 54 45 47 45 52 29 3b 0a 20 20 43 52 45 41 54 45  TEGER);.  CREATE
0380: 20 54 41 42 4c 45 20 74 33 28 64 20 49 4e 54 45   TABLE t3(d INTE
0390: 47 45 52 29 3b 0a 20 20 20 20 0a 20 20 49 4e 53  GER);.    .  INS
03a0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
03b0: 45 53 28 31 29 2c 28 32 29 2c 28 33 29 3b 0a 20  ES(1),(2),(3);. 
03c0: 20 20 20 0a 20 20 49 4e 53 45 52 54 20 49 4e 54     .  INSERT INT
03d0: 4f 20 74 32 20 56 41 4c 55 45 53 28 33 2c 20 31  O t2 VALUES(3, 1
03e0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
03f0: 20 74 32 20 56 41 4c 55 45 53 28 34 2c 20 32 29   t2 VALUES(4, 2)
0400: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
0410: 74 32 20 56 41 4c 55 45 53 28 35 2c 20 33 29 3b  t2 VALUES(5, 3);
0420: 0a 20 20 20 20 0a 20 20 49 4e 53 45 52 54 20 49  .    .  INSERT I
0430: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 34 29  NTO t3 VALUES(4)
0440: 2c 28 33 29 2c 28 35 29 3b 0a 7d 20 7b 7d 0a 64  ,(3),(5);.} {}.d
0450: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
0460: 2e 31 2e 61 73 63 20 7b 0a 20 20 53 45 4c 45 43  .1.asc {.  SELEC
0470: 54 20 74 31 2e 61 0a 20 20 20 20 46 52 4f 4d 20  T t1.a.    FROM 
0480: 74 31 2c 20 74 32 2c 20 74 33 0a 20 20 20 57 48  t1, t2, t3.   WH
0490: 45 52 45 20 74 31 2e 61 3d 74 32 2e 63 20 41 4e  ERE t1.a=t2.c AN
04a0: 44 20 74 32 2e 62 3d 74 33 2e 64 0a 20 20 20 4f  D t2.b=t3.d.   O
04b0: 52 44 45 52 20 42 59 20 74 31 2e 61 3b 0a 7d 20  RDER BY t1.a;.} 
04c0: 7b 31 20 32 20 33 7d 0a 64 6f 5f 65 78 65 63 73  {1 2 3}.do_execs
04d0: 71 6c 5f 74 65 73 74 20 31 2e 31 2e 64 65 73 63  ql_test 1.1.desc
04e0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 74 31 2e 61   {.  SELECT t1.a
04f0: 0a 20 20 20 20 46 52 4f 4d 20 74 31 2c 20 74 32  .    FROM t1, t2
0500: 2c 20 74 33 0a 20 20 20 57 48 45 52 45 20 74 31  , t3.   WHERE t1
0510: 2e 61 3d 74 32 2e 63 20 41 4e 44 20 74 32 2e 62  .a=t2.c AND t2.b
0520: 3d 74 33 2e 64 0a 20 20 20 4f 52 44 45 52 20 42  =t3.d.   ORDER B
0530: 59 20 74 31 2e 61 20 44 45 53 43 3b 0a 7d 20 7b  Y t1.a DESC;.} {
0540: 33 20 32 20 31 7d 0a 64 6f 5f 65 78 65 63 73 71  3 2 1}.do_execsq
0550: 6c 5f 74 65 73 74 20 31 2e 31 32 33 2e 61 73 63  l_test 1.123.asc
0560: 20 7b 0a 20 20 53 45 4c 45 43 54 20 74 31 2e 61   {.  SELECT t1.a
0570: 0a 20 20 20 20 46 52 4f 4d 20 74 31 20 43 52 4f  .    FROM t1 CRO
0580: 53 53 20 4a 4f 49 4e 20 74 32 20 43 52 4f 53 53  SS JOIN t2 CROSS
0590: 20 4a 4f 49 4e 20 74 33 0a 20 20 20 57 48 45 52   JOIN t3.   WHER
05a0: 45 20 74 31 2e 61 3d 74 32 2e 63 20 41 4e 44 20  E t1.a=t2.c AND 
05b0: 74 32 2e 62 3d 74 33 2e 64 0a 20 20 20 4f 52 44  t2.b=t3.d.   ORD
05c0: 45 52 20 42 59 20 74 31 2e 61 3b 0a 7d 20 7b 31  ER BY t1.a;.} {1
05d0: 20 32 20 33 7d 0a 64 6f 5f 65 78 65 63 73 71 6c   2 3}.do_execsql
05e0: 5f 74 65 73 74 20 31 2e 31 32 33 2e 64 65 73 63  _test 1.123.desc
05f0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 74 31 2e 61   {.  SELECT t1.a
0600: 0a 20 20 20 20 46 52 4f 4d 20 74 31 20 43 52 4f  .    FROM t1 CRO
0610: 53 53 20 4a 4f 49 4e 20 74 32 20 43 52 4f 53 53  SS JOIN t2 CROSS
0620: 20 4a 4f 49 4e 20 74 33 0a 20 20 20 57 48 45 52   JOIN t3.   WHER
0630: 45 20 74 31 2e 61 3d 74 32 2e 63 20 41 4e 44 20  E t1.a=t2.c AND 
0640: 74 32 2e 62 3d 74 33 2e 64 0a 20 20 20 4f 52 44  t2.b=t3.d.   ORD
0650: 45 52 20 42 59 20 74 31 2e 61 20 44 45 53 43 3b  ER BY t1.a DESC;
0660: 0a 7d 20 7b 33 20 32 20 31 7d 0a 64 6f 5f 65 78  .} {3 2 1}.do_ex
0670: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 33 32  ecsql_test 1.132
0680: 2e 61 73 63 20 7b 0a 20 20 53 45 4c 45 43 54 20  .asc {.  SELECT 
0690: 74 31 2e 61 0a 20 20 20 20 46 52 4f 4d 20 74 31  t1.a.    FROM t1
06a0: 20 43 52 4f 53 53 20 4a 4f 49 4e 20 74 33 20 43   CROSS JOIN t3 C
06b0: 52 4f 53 53 20 4a 4f 49 4e 20 74 32 0a 20 20 20  ROSS JOIN t2.   
06c0: 57 48 45 52 45 20 74 31 2e 61 3d 74 32 2e 63 20  WHERE t1.a=t2.c 
06d0: 41 4e 44 20 74 32 2e 62 3d 74 33 2e 64 0a 20 20  AND t2.b=t3.d.  
06e0: 20 4f 52 44 45 52 20 42 59 20 74 31 2e 61 3b 0a   ORDER BY t1.a;.
06f0: 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 65 78 65  } {1 2 3}.do_exe
0700: 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 33 32 2e  csql_test 1.132.
0710: 64 65 73 63 20 7b 0a 20 20 53 45 4c 45 43 54 20  desc {.  SELECT 
0720: 74 31 2e 61 0a 20 20 20 20 46 52 4f 4d 20 74 31  t1.a.    FROM t1
0730: 20 43 52 4f 53 53 20 4a 4f 49 4e 20 74 33 20 43   CROSS JOIN t3 C
0740: 52 4f 53 53 20 4a 4f 49 4e 20 74 32 0a 20 20 20  ROSS JOIN t2.   
0750: 57 48 45 52 45 20 74 31 2e 61 3d 74 32 2e 63 20  WHERE t1.a=t2.c 
0760: 41 4e 44 20 74 32 2e 62 3d 74 33 2e 64 0a 20 20  AND t2.b=t3.d.  
0770: 20 4f 52 44 45 52 20 42 59 20 74 31 2e 61 20 44   ORDER BY t1.a D
0780: 45 53 43 3b 0a 7d 20 7b 33 20 32 20 31 7d 0a 64  ESC;.} {3 2 1}.d
0790: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
07a0: 2e 32 31 33 2e 61 73 63 20 7b 0a 20 20 53 45 4c  .213.asc {.  SEL
07b0: 45 43 54 20 74 31 2e 61 0a 20 20 20 20 46 52 4f  ECT t1.a.    FRO
07c0: 4d 20 74 32 20 43 52 4f 53 53 20 4a 4f 49 4e 20  M t2 CROSS JOIN 
07d0: 74 31 20 43 52 4f 53 53 20 4a 4f 49 4e 20 74 33  t1 CROSS JOIN t3
07e0: 0a 20 20 20 57 48 45 52 45 20 74 31 2e 61 3d 74  .   WHERE t1.a=t
07f0: 32 2e 63 20 41 4e 44 20 74 32 2e 62 3d 74 33 2e  2.c AND t2.b=t3.
0800: 64 0a 20 20 20 4f 52 44 45 52 20 42 59 20 74 31  d.   ORDER BY t1
0810: 2e 61 3b 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f  .a;.} {1 2 3}.do
0820: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e  _execsql_test 1.
0830: 32 31 33 2e 64 65 73 63 20 7b 0a 20 20 53 45 4c  213.desc {.  SEL
0840: 45 43 54 20 74 31 2e 61 0a 20 20 20 20 46 52 4f  ECT t1.a.    FRO
0850: 4d 20 74 32 20 43 52 4f 53 53 20 4a 4f 49 4e 20  M t2 CROSS JOIN 
0860: 74 31 20 43 52 4f 53 53 20 4a 4f 49 4e 20 74 33  t1 CROSS JOIN t3
0870: 0a 20 20 20 57 48 45 52 45 20 74 31 2e 61 3d 74  .   WHERE t1.a=t
0880: 32 2e 63 20 41 4e 44 20 74 32 2e 62 3d 74 33 2e  2.c AND t2.b=t3.
0890: 64 0a 20 20 20 4f 52 44 45 52 20 42 59 20 74 31  d.   ORDER BY t1
08a0: 2e 61 20 44 45 53 43 3b 0a 7d 20 7b 33 20 32 20  .a DESC;.} {3 2 
08b0: 31 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  1}.do_execsql_te
08c0: 73 74 20 31 2e 32 33 31 2e 61 73 63 20 7b 0a 20  st 1.231.asc {. 
08d0: 20 53 45 4c 45 43 54 20 74 31 2e 61 0a 20 20 20   SELECT t1.a.   
08e0: 20 46 52 4f 4d 20 74 32 20 43 52 4f 53 53 20 4a   FROM t2 CROSS J
08f0: 4f 49 4e 20 74 33 20 43 52 4f 53 53 20 4a 4f 49  OIN t3 CROSS JOI
0900: 4e 20 74 31 0a 20 20 20 57 48 45 52 45 20 74 31  N t1.   WHERE t1
0910: 2e 61 3d 74 32 2e 63 20 41 4e 44 20 74 32 2e 62  .a=t2.c AND t2.b
0920: 3d 74 33 2e 64 0a 20 20 20 4f 52 44 45 52 20 42  =t3.d.   ORDER B
0930: 59 20 74 31 2e 61 3b 0a 7d 20 7b 31 20 32 20 33  Y t1.a;.} {1 2 3
0940: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
0950: 74 20 31 2e 32 33 31 2e 64 65 73 63 20 7b 0a 20  t 1.231.desc {. 
0960: 20 53 45 4c 45 43 54 20 74 31 2e 61 0a 20 20 20   SELECT t1.a.   
0970: 20 46 52 4f 4d 20 74 32 20 43 52 4f 53 53 20 4a   FROM t2 CROSS J
0980: 4f 49 4e 20 74 33 20 43 52 4f 53 53 20 4a 4f 49  OIN t3 CROSS JOI
0990: 4e 20 74 31 0a 20 20 20 57 48 45 52 45 20 74 31  N t1.   WHERE t1
09a0: 2e 61 3d 74 32 2e 63 20 41 4e 44 20 74 32 2e 62  .a=t2.c AND t2.b
09b0: 3d 74 33 2e 64 0a 20 20 20 4f 52 44 45 52 20 42  =t3.d.   ORDER B
09c0: 59 20 74 31 2e 61 20 44 45 53 43 3b 0a 7d 20 7b  Y t1.a DESC;.} {
09d0: 33 20 32 20 31 7d 0a 64 6f 5f 65 78 65 63 73 71  3 2 1}.do_execsq
09e0: 6c 5f 74 65 73 74 20 31 2e 33 31 32 2e 61 73 63  l_test 1.312.asc
09f0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 74 31 2e 61   {.  SELECT t1.a
0a00: 0a 20 20 20 20 46 52 4f 4d 20 74 33 20 43 52 4f  .    FROM t3 CRO
0a10: 53 53 20 4a 4f 49 4e 20 74 31 20 43 52 4f 53 53  SS JOIN t1 CROSS
0a20: 20 4a 4f 49 4e 20 74 32 0a 20 20 20 57 48 45 52   JOIN t2.   WHER
0a30: 45 20 74 31 2e 61 3d 74 32 2e 63 20 41 4e 44 20  E t1.a=t2.c AND 
0a40: 74 32 2e 62 3d 74 33 2e 64 0a 20 20 20 4f 52 44  t2.b=t3.d.   ORD
0a50: 45 52 20 42 59 20 74 31 2e 61 3b 0a 7d 20 7b 31  ER BY t1.a;.} {1
0a60: 20 32 20 33 7d 0a 64 6f 5f 65 78 65 63 73 71 6c   2 3}.do_execsql
0a70: 5f 74 65 73 74 20 31 2e 33 31 32 2e 64 65 73 63  _test 1.312.desc
0a80: 20 7b 0a 20 20 53 45 4c 45 43 54 20 74 31 2e 61   {.  SELECT t1.a
0a90: 0a 20 20 20 20 46 52 4f 4d 20 74 33 20 43 52 4f  .    FROM t3 CRO
0aa0: 53 53 20 4a 4f 49 4e 20 74 31 20 43 52 4f 53 53  SS JOIN t1 CROSS
0ab0: 20 4a 4f 49 4e 20 74 32 0a 20 20 20 57 48 45 52   JOIN t2.   WHER
0ac0: 45 20 74 31 2e 61 3d 74 32 2e 63 20 41 4e 44 20  E t1.a=t2.c AND 
0ad0: 74 32 2e 62 3d 74 33 2e 64 0a 20 20 20 4f 52 44  t2.b=t3.d.   ORD
0ae0: 45 52 20 42 59 20 74 31 2e 61 20 44 45 53 43 3b  ER BY t1.a DESC;
0af0: 0a 7d 20 7b 33 20 32 20 31 7d 0a 64 6f 5f 65 78  .} {3 2 1}.do_ex
0b00: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 33 32 31  ecsql_test 1.321
0b10: 2e 61 73 63 20 7b 0a 20 20 53 45 4c 45 43 54 20  .asc {.  SELECT 
0b20: 74 31 2e 61 0a 20 20 20 20 46 52 4f 4d 20 74 33  t1.a.    FROM t3
0b30: 20 43 52 4f 53 53 20 4a 4f 49 4e 20 74 32 20 43   CROSS JOIN t2 C
0b40: 52 4f 53 53 20 4a 4f 49 4e 20 74 31 0a 20 20 20  ROSS JOIN t1.   
0b50: 57 48 45 52 45 20 74 31 2e 61 3d 74 32 2e 63 20  WHERE t1.a=t2.c 
0b60: 41 4e 44 20 74 32 2e 62 3d 74 33 2e 64 0a 20 20  AND t2.b=t3.d.  
0b70: 20 4f 52 44 45 52 20 42 59 20 74 31 2e 61 3b 0a   ORDER BY t1.a;.
0b80: 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 65 78 65  } {1 2 3}.do_exe
0b90: 63 73 71 6c 5f 74 65 73 74 20 31 2e 33 32 31 2e  csql_test 1.321.
0ba0: 64 65 73 63 20 7b 0a 20 20 53 45 4c 45 43 54 20  desc {.  SELECT 
0bb0: 74 31 2e 61 0a 20 20 20 20 46 52 4f 4d 20 74 33  t1.a.    FROM t3
0bc0: 20 43 52 4f 53 53 20 4a 4f 49 4e 20 74 32 20 43   CROSS JOIN t2 C
0bd0: 52 4f 53 53 20 4a 4f 49 4e 20 74 31 0a 20 20 20  ROSS JOIN t1.   
0be0: 57 48 45 52 45 20 74 31 2e 61 3d 74 32 2e 63 20  WHERE t1.a=t2.c 
0bf0: 41 4e 44 20 74 32 2e 62 3d 74 33 2e 64 0a 20 20  AND t2.b=t3.d.  
0c00: 20 4f 52 44 45 52 20 42 59 20 74 31 2e 61 20 44   ORDER BY t1.a D
0c10: 45 53 43 3b 0a 7d 20 7b 33 20 32 20 31 7d 0a 0a  ESC;.} {3 2 1}..
0c20: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.