Skip to content

Commit 224b831

Browse files
committed
Further tests for the push-down optimization with window functions.
1 parent 1e6b5eb commit 224b831

File tree

2 files changed

+86
-2
lines changed

2 files changed

+86
-2
lines changed

test/windowfault.test

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,14 +246,15 @@ do_faultsim_test 10 -faults oom* -prep {
246246
faultsim_test_result {0 {}}
247247
}
248248

249+
#-------------------------------------------------------------------------
249250
reset_db
250251
do_execsql_test 11.0 {
251252
DROP TABLE IF EXISTS t0;
252253
CREATE TABLE t0(c0 INTEGER UNIQUE);
253254
INSERT INTO t0 VALUES(0);
254255
} {}
255256

256-
do_faultsim_test 11 -faults oom* -prep {
257+
do_faultsim_test 11.1 -faults oom* -prep {
257258
} -body {
258259
execsql {
259260
SELECT * FROM t0 WHERE
@@ -263,7 +264,7 @@ do_faultsim_test 11 -faults oom* -prep {
263264
faultsim_test_result {0 {}}
264265
}
265266

266-
do_faultsim_test 11 -faults oom* -prep {
267+
do_faultsim_test 11.2 -faults oom* -prep {
267268
} -body {
268269
execsql {
269270
VALUES(false),(current_date collate binary)
@@ -274,4 +275,21 @@ do_faultsim_test 11 -faults oom* -prep {
274275
faultsim_test_result {0 {}}
275276
}
276277

278+
#-------------------------------------------------------------------------
279+
reset_db
280+
do_execsql_test 12.0 {
281+
CREATE TABLE t1(a, b, c);
282+
} {}
283+
do_faultsim_test 12 -faults oom* -prep {
284+
} -body {
285+
execsql {
286+
WITH v(a, b, row_number) AS (
287+
SELECT a, b, row_number() OVER (PARTITION BY a ORDER BY b) FROM t1
288+
)
289+
SELECT * FROM v WHERE a=2
290+
}
291+
} -test {
292+
faultsim_test_result {0 {}}
293+
}
294+
277295
finish_test

test/windowpushd.test

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,16 @@ do_execsql_test 2.0 {
8484
max(d) OVER (PARTITION BY b),
8585
row_number() OVER (PARTITION BY b)
8686
FROM t1;
87+
88+
CREATE TABLE t2(x, y, z);
89+
INSERT INTO t2 VALUES('W', 3, 1);
90+
INSERT INTO t2 VALUES('W', 2, 2);
91+
INSERT INTO t2 VALUES('X', 1, 4);
92+
INSERT INTO t2 VALUES('X', 5, 7);
93+
INSERT INTO t2 VALUES('Y', 1, 9);
94+
INSERT INTO t2 VALUES('Y', 4, 2);
95+
INSERT INTO t2 VALUES('Z', 3, 3);
96+
INSERT INTO t2 VALUES('Z', 3, 4);
8797
}
8898

8999
foreach tn {0 1} {
@@ -149,6 +159,62 @@ foreach tn {0 1} {
149159
do_eqp_test 2.$tn.3.3 {
150160
SELECT * FROM v3 WHERE b='E'
151161
} {USING INDEX i2 (b=?)}
162+
do_eqp_test 2.$tn.3.4 {
163+
SELECT * FROM v3 WHERE b>'C'
164+
} {USING INDEX i2 (b>?)}
165+
}
166+
167+
do_execsql_test 2.$tn.4.1 {
168+
SELECT * FROM (
169+
SELECT x, sum(y) AS s, max(z) AS m
170+
FROM t2 GROUP BY x
171+
)
172+
} {
173+
W 5 2
174+
X 6 7
175+
Y 5 9
176+
Z 6 4
177+
}
178+
179+
do_execsql_test 2.$tn.4.1 {
180+
SELECT * FROM (
181+
SELECT x, sum(y) AS s, max(z) AS m,
182+
max( max(z) ) OVER (PARTITION BY sum(y)
183+
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
184+
)
185+
FROM t2 GROUP BY x
186+
)
187+
} {
188+
W 5 2 9
189+
Y 5 9 9
190+
X 6 7 7
191+
Z 6 4 7
192+
}
193+
194+
do_execsql_test 2.$tn.4.2 {
195+
SELECT * FROM (
196+
SELECT x, sum(y) AS s, max(z) AS m,
197+
max( max(z) ) OVER (PARTITION BY sum(y)
198+
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
199+
)
200+
FROM t2 GROUP BY x
201+
) WHERE s=6
202+
} {
203+
X 6 7 7
204+
Z 6 4 7
205+
}
206+
207+
do_execsql_test 2.$tn.4.3 {
208+
SELECT * FROM (
209+
SELECT x, sum(y) AS s, max(z) AS m,
210+
max( max(z) ) OVER (PARTITION BY sum(y)
211+
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
212+
)
213+
FROM t2 GROUP BY x
214+
) WHERE s<6
215+
} {
216+
W 5 2 9
217+
Y 5 9 9
152218
}
153219

154220
}

0 commit comments

Comments
 (0)