Skip to content

Commit 2f04527

Browse files
committed
Minor: Improve aggregate test coverage more
1 parent e0cc8c8 commit 2f04527

File tree

1 file changed

+169
-87
lines changed

1 file changed

+169
-87
lines changed

datafusion/core/tests/sqllogictests/test_files/aggregate.slt

Lines changed: 169 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1420,65 +1420,95 @@ select var(sq.column1), var_pop(sq.column1), stddev(sq.column1), stddev_pop(sq.c
14201420
2 1 1.414213562373 1
14211421

14221422

1423-
# sum / count for all nulls
1424-
statement ok
1425-
create table the_nulls as values (null::bigint, 1), (null::bigint, 1), (null::bigint, 2);
14261423

1427-
# counts should be zeros (even for nulls)
1428-
query II
1429-
SELECT count(column1), column2 from the_nulls group by column2 order by column2;
1424+
# aggregates on empty tables
1425+
statement ok
1426+
CREATE TABLE empty (column1 bigint, column2 int);
1427+
1428+
# no group by column
1429+
query IIRIIIII
1430+
SELECT
1431+
count(column1), -- counts should be zero, even for nulls
1432+
sum(column1), -- other aggregates should be null
1433+
avg(column1),
1434+
min(column1),
1435+
max(column1),
1436+
bit_and(column1),
1437+
bit_or(column1),
1438+
bit_xor(column1)
1439+
FROM empty
1440+
----
1441+
0 NULL NULL NULL NULL NULL NULL NULL
1442+
1443+
# Same query but with grouping (no groups, so no output)
1444+
query IIRIIIIII
1445+
SELECT
1446+
count(column1),
1447+
sum(column1),
1448+
avg(column1),
1449+
min(column1),
1450+
max(column1),
1451+
bit_and(column1),
1452+
bit_or(column1),
1453+
bit_xor(column1),
1454+
column2
1455+
FROM empty
1456+
GROUP BY column2
1457+
ORDER BY column2;
14301458
----
1431-
0 1
1432-
0 2
14331459

1434-
# sums should be null
1435-
query II
1436-
SELECT sum(column1), column2 from the_nulls group by column2 order by column2;
1437-
----
1438-
NULL 1
1439-
NULL 2
14401460

1441-
# avg should be null
1442-
query RI
1443-
SELECT avg(column1), column2 from the_nulls group by column2 order by column2;
1444-
----
1445-
NULL 1
1446-
NULL 2
1447-
1448-
# bit_and should be null
1449-
query II
1450-
SELECT bit_and(column1), column2 from the_nulls group by column2 order by column2;
1451-
----
1452-
NULL 1
1453-
NULL 2
1461+
statement ok
1462+
drop table empty
14541463

1455-
# bit_or should be null
1456-
query II
1457-
SELECT bit_or(column1), column2 from the_nulls group by column2 order by column2;
1458-
----
1459-
NULL 1
1460-
NULL 2
1464+
# aggregates on all nulls
1465+
statement ok
1466+
CREATE TABLE the_nulls
1467+
AS VALUES
1468+
(null::bigint, 1),
1469+
(null::bigint, 1),
1470+
(null::bigint, 2);
14611471

1462-
# bit_xor should be null
14631472
query II
1464-
SELECT bit_xor(column1), column2 from the_nulls group by column2 order by column2;
1473+
select * from the_nulls
14651474
----
14661475
NULL 1
1467-
NULL 2
1468-
1469-
# min should be null
1470-
query II
1471-
SELECT min(column1), column2 from the_nulls group by column2 order by column2;
1472-
----
14731476
NULL 1
14741477
NULL 2
14751478

1476-
# max should be null
1477-
query II
1478-
SELECT max(column1), column2 from the_nulls group by column2 order by column2;
1479-
----
1480-
NULL 1
1481-
NULL 2
1479+
# no group by column
1480+
query IIRIIIII
1481+
SELECT
1482+
count(column1), -- counts should be zero, even for nulls
1483+
sum(column1), -- other aggregates should be null
1484+
avg(column1),
1485+
min(column1),
1486+
max(column1),
1487+
bit_and(column1),
1488+
bit_or(column1),
1489+
bit_xor(column1)
1490+
FROM the_nulls
1491+
----
1492+
0 NULL NULL NULL NULL NULL NULL NULL
1493+
1494+
# Same query but with grouping
1495+
query IIRIIIIII
1496+
SELECT
1497+
count(column1), -- counts should be zero, even for nulls
1498+
sum(column1), -- other aggregates should be null
1499+
avg(column1),
1500+
min(column1),
1501+
max(column1),
1502+
bit_and(column1),
1503+
bit_or(column1),
1504+
bit_xor(column1),
1505+
column2
1506+
FROM the_nulls
1507+
GROUP BY column2
1508+
ORDER BY column2;
1509+
----
1510+
0 NULL NULL NULL NULL NULL NULL NULL 1
1511+
0 NULL NULL NULL NULL NULL NULL NULL 2
14821512

14831513

14841514
statement ok
@@ -1489,29 +1519,49 @@ create table bit_aggregate_functions (
14891519
c1 SMALLINT NOT NULL,
14901520
c2 SMALLINT NOT NULL,
14911521
c3 SMALLINT,
1522+
tag varchar
14921523
)
14931524
as values
1494-
(5, 10, 11),
1495-
(33, 11, null),
1496-
(9, 12, null);
1525+
(5, 10, 11, 'A'),
1526+
(33, 11, null, 'B'),
1527+
(9, 12, null, 'A');
1528+
1529+
# query_bit_and, query_bit_or, query_bit_xor
1530+
query IIIIIIIII
1531+
SELECT
1532+
bit_and(c1),
1533+
bit_and(c2),
1534+
bit_and(c3),
1535+
bit_or(c1),
1536+
bit_or(c2),
1537+
bit_or(c3),
1538+
bit_xor(c1),
1539+
bit_xor(c2),
1540+
bit_xor(c3)
1541+
FROM bit_aggregate_functions
1542+
----
1543+
1 8 11 45 15 11 45 13 11
1544+
1545+
# query_bit_and, query_bit_or, query_bit_xor, with group
1546+
query IIIIIIIIIT
1547+
SELECT
1548+
bit_and(c1),
1549+
bit_and(c2),
1550+
bit_and(c3),
1551+
bit_or(c1),
1552+
bit_or(c2),
1553+
bit_or(c3),
1554+
bit_xor(c1),
1555+
bit_xor(c2),
1556+
bit_xor(c3),
1557+
tag
1558+
FROM bit_aggregate_functions
1559+
GROUP BY tag
1560+
ORDER BY tag
1561+
----
1562+
1 8 11 13 14 11 12 6 11 A
1563+
33 11 NULL 33 11 NULL 33 11 NULL B
14971564

1498-
# query_bit_and
1499-
query III
1500-
SELECT bit_and(c1), bit_and(c2), bit_and(c3) FROM bit_aggregate_functions
1501-
----
1502-
1 8 11
1503-
1504-
# query_bit_or
1505-
query III
1506-
SELECT bit_or(c1), bit_or(c2), bit_or(c3) FROM bit_aggregate_functions
1507-
----
1508-
45 15 11
1509-
1510-
# query_bit_xor
1511-
query III
1512-
SELECT bit_xor(c1), bit_xor(c2), bit_xor(c3) FROM bit_aggregate_functions
1513-
----
1514-
45 13 11
15151565

15161566
statement ok
15171567
create table bool_aggregate_functions (
@@ -1883,69 +1933,101 @@ CREATE TABLE test_table (c1 INT, c2 INT, c3 INT)
18831933

18841934
# Inserting data
18851935
statement ok
1886-
INSERT INTO test_table VALUES (1, 10, 50), (1, 20, 60), (2, 10, 70), (2, 20, 80), (3, 10, NULL)
1936+
INSERT INTO test_table VALUES
1937+
(1, 10, 50),
1938+
(1, 20, 60),
1939+
(2, 10, 70),
1940+
(2, 20, 80),
1941+
(3, 10, NULL)
18871942

18881943
# query_group_by_with_filter
1889-
query II rowsort
1890-
SELECT c1, SUM(c2) FILTER (WHERE c2 >= 20) as result FROM test_table GROUP BY c1
1891-
----
1892-
1 20
1893-
2 20
1894-
3 NULL
1944+
query III rowsort
1945+
SELECT
1946+
c1,
1947+
SUM(c2) FILTER (WHERE c2 >= 20),
1948+
SUM(c2) FILTER (WHERE c2 < 1) -- no rows pass filter, so the output should be NULL
1949+
FROM test_table GROUP BY c1
1950+
----
1951+
1 20 NULL
1952+
2 20 NULL
1953+
3 NULL NULL
18951954

18961955
# query_group_by_avg_with_filter
1897-
query IR rowsort
1898-
SELECT c1, AVG(c2) FILTER (WHERE c2 >= 20) AS avg_c2 FROM test_table GROUP BY c1
1899-
----
1900-
1 20
1901-
2 20
1902-
3 NULL
1956+
query IRR rowsort
1957+
SELECT
1958+
c1,
1959+
AVG(c2) FILTER (WHERE c2 >= 20),
1960+
AVG(c2) FILTER (WHERE c2 < 1) -- no rows pass filter, so output should be null
1961+
FROM test_table GROUP BY c1
1962+
----
1963+
1 20 NULL
1964+
2 20 NULL
1965+
3 NULL NULL
19031966

19041967
# query_group_by_with_multiple_filters
19051968
query IIR rowsort
1906-
SELECT c1, SUM(c2) FILTER (WHERE c2 >= 20) AS sum_c2, AVG(c3) FILTER (WHERE c3 <= 70) AS avg_c3 FROM test_table GROUP BY c1
1969+
SELECT
1970+
c1,
1971+
SUM(c2) FILTER (WHERE c2 >= 20) AS sum_c2,
1972+
AVG(c3) FILTER (WHERE c3 <= 70) AS avg_c3
1973+
FROM test_table GROUP BY c1
19071974
----
19081975
1 20 55
19091976
2 20 70
19101977
3 NULL NULL
19111978

19121979
# query_group_by_distinct_with_filter
19131980
query II rowsort
1914-
SELECT c1, COUNT(DISTINCT c2) FILTER (WHERE c2 >= 20) AS distinct_c2_count FROM test_table GROUP BY c1
1981+
SELECT
1982+
c1,
1983+
COUNT(DISTINCT c2) FILTER (WHERE c2 >= 20) AS distinct_c2_count
1984+
FROM test_table GROUP BY c1
19151985
----
19161986
1 1
19171987
2 1
19181988
3 0
19191989

19201990
# query_without_group_by_with_filter
19211991
query I rowsort
1922-
SELECT SUM(c2) FILTER (WHERE c2 >= 20) AS sum_c2 FROM test_table
1992+
SELECT
1993+
SUM(c2) FILTER (WHERE c2 >= 20) AS sum_c2
1994+
FROM test_table
19231995
----
19241996
40
19251997

19261998
# count_without_group_by_with_filter
19271999
query I rowsort
1928-
SELECT COUNT(c2) FILTER (WHERE c2 >= 20) AS count_c2 FROM test_table
2000+
SELECT
2001+
COUNT(c2) FILTER (WHERE c2 >= 20) AS count_c2
2002+
FROM test_table
19292003
----
19302004
2
19312005

19322006
# query_with_and_without_filter
19332007
query III rowsort
1934-
SELECT c1, SUM(c2) FILTER (WHERE c2 >= 20) as result, SUM(c2) as result_no_filter FROM test_table GROUP BY c1;
2008+
SELECT
2009+
c1,
2010+
SUM(c2) FILTER (WHERE c2 >= 20) as result,
2011+
SUM(c2) as result_no_filter
2012+
FROM test_table GROUP BY c1;
19352013
----
19362014
1 20 30
19372015
2 20 30
19382016
3 NULL 10
19392017

19402018
# query_filter_on_different_column_than_aggregate
19412019
query I rowsort
1942-
select sum(c1) FILTER (WHERE c2 < 30) from test_table;
2020+
select
2021+
sum(c1) FILTER (WHERE c2 < 30)
2022+
FROM test_table;
19432023
----
19442024
9
19452025

19462026
# query_test_empty_filter
19472027
query I rowsort
1948-
SELECT SUM(c2) FILTER (WHERE c2 >= 20000000) AS sum_c2 FROM test_table;
2028+
SELECT
2029+
SUM(c2) FILTER (WHERE c2 >= 20000000) AS sum_c2
2030+
FROM test_table;
19492031
----
19502032
NULL
19512033

0 commit comments

Comments
 (0)