resolve upstream merge conflict in distclean
[sqlcipher.git] / test / offset1.test
blob5b04bd836c5db8970df565f440ca1e6f7cb81f64
1 # 2015-10-06
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
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.
17 set testdir [file dirname $argv0]
18 source $testdir/tester.tcl
20 ifcapable !compound {
21   finish_test
22   return
25 do_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}
33 do_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}
39 do_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}
45 do_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}
51 do_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}
57 do_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}
63 do_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}
69 do_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}
75 do_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}
81 do_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}
87 do_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 } {}
94 do_execsql_test offset1-1.3.0 {
95   SELECT * FROM t1 LIMIT 0;
96 } {}
98 do_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 } {}
104 do_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}
110 do_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}
116 do_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}
122 do_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}
128 do_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}
134 do_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}
140 do_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}
146 do_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}
152 do_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}
159 # 2022-08-04
160 # https://sqlite.org/forum/forumpost/6b5e9188f0657616
162 do_execsql_test offset1-2.0 {
163   CREATE TABLE employees (
164     id integer primary key,
165     name text,
166     city text,
167     department text,
168     salary integer
169   );
170   INSERT INTO employees VALUES
171     (11,'Diane','London','hr',70),
172     (12,'Bob','London','hr',78),
173     (21,'Emma','London','it',84),
174     (22,'Grace','Berlin','it',90),
175     (23,'Henry','London','it',104),
176     (24,'Irene','Berlin','it',104),
177     (25,'Frank','Berlin','it',120),
178     (31,'Cindy','Berlin','sales',96),
179     (32,'Dave','London','sales',96),
180     (33,'Alice','Berlin','sales',100);
181   CREATE VIEW v AS
182     SELECT * FROM (
183       SELECT * FROM employees 
184        WHERE salary < 100
185        ORDER BY salary desc)
186      UNION ALL 
187      SELECT * FROM (
188        SELECT * FROM employees
189        WHERE salary >= 100
190        ORDER BY salary asc);
191 } {}
192 do_execsql_test offset1-2.1 {
193   SELECT * FROM v LIMIT 5 OFFSET 2;
194 } {
195   22  Grace  Berlin  it      90
196   21  Emma   London  it      84
197   12  Bob    London  hr      78
198   11  Diane  London  hr      70
199   33  Alice  Berlin  sales   100
202 finish_test