blob: 91dc0b00a14bdb11277a439afc5d655fb43114ae [file] [log] [blame]
drh9f1ef452015-10-06 17:27:18 +00001# 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