1# 2015-10-06 2# 3# The author disclaims copyright to this source code. In place of 4# a legal notice, here is a blessing: 5# 6# May you do good and not evil. 7# May you find forgiveness for yourself and forgive others. 8# May you share freely, never taking more than you give. 9# 10#*********************************************************************** 11# 12# This file implements test cases for the [b65cb2c8d91f6685841d7d1e13b6] 13# bug: Correct handling of LIMIT and OFFSET on a UNION ALL query where 14# the right-hand SELECT contains an ORDER BY in a subquery. 15# 16 17set testdir [file dirname $argv0] 18source $testdir/tester.tcl 19 20ifcapable !compound { 21 finish_test 22 return 23} 24 25do_execsql_test offset1-1.1 { 26 CREATE TABLE t1(a,b); 27 INSERT INTO t1 VALUES(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e'); 28 CREATE TABLE t2(x,y); 29 INSERT INTO t2 VALUES(8,'y'),(9,'z'),(6,'w'),(7,'x'); 30 SELECT count(*) FROM t1, t2; 31} {20} 32 33do_execsql_test offset1-1.2.0 { 34 SELECT a, b FROM t1 35 UNION ALL 36 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 37 LIMIT 3 OFFSET 0; 38} {1 a 2 b 3 c} 39do_execsql_test offset1-1.2.1 { 40 SELECT a, b FROM t1 41 UNION ALL 42 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 43 LIMIT 3 OFFSET 1; 44} {2 b 3 c 4 d} 45do_execsql_test offset1-1.2.2 { 46 SELECT a, b FROM t1 47 UNION ALL 48 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 49 LIMIT 3 OFFSET 2; 50} {3 c 4 d 5 e} 51do_execsql_test offset1-1.2.3 { 52 SELECT a, b FROM t1 53 UNION ALL 54 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 55 LIMIT 3 OFFSET 3; 56} {4 d 5 e 6 w} 57do_execsql_test offset1-1.2.4 { 58 SELECT a, b FROM t1 59 UNION ALL 60 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 61 LIMIT 3 OFFSET 4; 62} {5 e 6 w 7 x} 63do_execsql_test offset1-1.2.5 { 64 SELECT a, b FROM t1 65 UNION ALL 66 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 67 LIMIT 3 OFFSET 5; 68} {6 w 7 x 8 y} 69do_execsql_test offset1-1.2.6 { 70 SELECT a, b FROM t1 71 UNION ALL 72 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 73 LIMIT 3 OFFSET 6; 74} {7 x 8 y 9 z} 75do_execsql_test offset1-1.2.7 { 76 SELECT a, b FROM t1 77 UNION ALL 78 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 79 LIMIT 3 OFFSET 7; 80} {8 y 9 z} 81do_execsql_test offset1-1.2.8 { 82 SELECT a, b FROM t1 83 UNION ALL 84 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 85 LIMIT 3 OFFSET 8; 86} {9 z} 87do_execsql_test offset1-1.2.9 { 88 SELECT a, b FROM t1 89 UNION ALL 90 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 91 LIMIT 3 OFFSET 9; 92} {} 93 94do_execsql_test offset1-1.3.0 { 95 SELECT * FROM t1 LIMIT 0; 96} {} 97 98do_execsql_test offset1-1.4.0 { 99 SELECT a, b FROM t1 100 UNION ALL 101 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 102 LIMIT 0 OFFSET 1; 103} {} 104do_execsql_test offset1-1.4.1 { 105 SELECT a, b FROM t1 106 UNION ALL 107 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 108 LIMIT 1 OFFSET 1; 109} {2 b} 110do_execsql_test offset1-1.4.2 { 111 SELECT a, b FROM t1 112 UNION ALL 113 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 114 LIMIT 2 OFFSET 1; 115} {2 b 3 c} 116do_execsql_test offset1-1.4.3 { 117 SELECT a, b FROM t1 118 UNION ALL 119 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 120 LIMIT 3 OFFSET 1; 121} {2 b 3 c 4 d} 122do_execsql_test offset1-1.4.4 { 123 SELECT a, b FROM t1 124 UNION ALL 125 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 126 LIMIT 4 OFFSET 1; 127} {2 b 3 c 4 d 5 e} 128do_execsql_test offset1-1.4.5 { 129 SELECT a, b FROM t1 130 UNION ALL 131 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 132 LIMIT 5 OFFSET 1; 133} {2 b 3 c 4 d 5 e 6 w} 134do_execsql_test offset1-1.4.6 { 135 SELECT a, b FROM t1 136 UNION ALL 137 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 138 LIMIT 6 OFFSET 1; 139} {2 b 3 c 4 d 5 e 6 w 7 x} 140do_execsql_test offset1-1.4.7 { 141 SELECT a, b FROM t1 142 UNION ALL 143 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 144 LIMIT 7 OFFSET 1; 145} {2 b 3 c 4 d 5 e 6 w 7 x 8 y} 146do_execsql_test offset1-1.4.8 { 147 SELECT a, b FROM t1 148 UNION ALL 149 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 150 LIMIT 8 OFFSET 1; 151} {2 b 3 c 4 d 5 e 6 w 7 x 8 y 9 z} 152do_execsql_test offset1-1.4.9 { 153 SELECT a, b FROM t1 154 UNION ALL 155 SELECT * FROM (SELECT x, y FROM t2 ORDER BY y) 156 LIMIT 9 OFFSET 1; 157} {2 b 3 c 4 d 5 e 6 w 7 x 8 y 9 z} 158 159 160 161finish_test 162