Changeset: 0dc45cf2769b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0dc45cf2769b
Added Files:
        sql/test/BugTracker-2026/Tests/7973-groupby-list-null-row-bug.test
Modified Files:
        sql/test/BugTracker-2026/Tests/All
Branch: Dec2025
Log Message:

Add test for #7973


diffs (148 lines):

diff --git a/sql/test/BugTracker-2026/Tests/7973-groupby-list-null-row-bug.test 
b/sql/test/BugTracker-2026/Tests/7973-groupby-list-null-row-bug.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2026/Tests/7973-groupby-list-null-row-bug.test
@@ -0,0 +1,135 @@
+statement ok
+CREATE TABLE br_rollup_t (id INT PRIMARY KEY, c0 INT)
+
+statement ok
+INSERT INTO br_rollup_t VALUES (1,10),(2,20)        -- note: no NULL in c0
+
+-- (1) bare ROLLUP: the super-aggregate row's c0 is projected as NULL -- 
correct
+-- observed: (10,1) (20,1) (NULL,2)                                    correct
+query II rowsort
+SELECT c0, COUNT(*) AS n FROM br_rollup_t GROUP BY ROLLUP(c0)
+----
+10
+1
+20
+1
+
+-- (2) the same row, four ways of asking "is c0 null?" -- they disagree
+-- observed: (10,10,0,'IS NULL -> FALSE',1)
+--           (20,20,0,'IS NULL -> FALSE',1)
+--           (NULL,-1,1,'IS NULL -> FALSE',2)   <-- WRONG: value is NULL, 
GROUPING says 1,
+--                                                  COALESCE says NULL, IS 
NULL says FALSE
+query IIITI rowsort
+SELECT c0, COALESCE(c0,-1) AS coalesced, GROUPING(c0) AS grp,
+       CASE WHEN c0 IS NULL THEN 'IS NULL -> TRUE' ELSE 'IS NULL -> FALSE' END 
AS pred,
+       COUNT(*) AS n
+FROM br_rollup_t GROUP BY ROLLUP(c0)
+----
+10
+10
+0
+IS NULL -> FALSE
+1
+20
+20
+0
+IS NULL -> FALSE
+1
+NULL
+-1
+1
+IS NULL -> TRUE
+2
+
+-- (3) filter the super-aggregate row out: it is not removed
+-- observed: (10,1) (20,1) (NULL,2)   <-- WRONG      expected: (10,1) (20,1)
+query II rowsort
+SELECT c0, n FROM (SELECT c0, COUNT(*) AS n FROM br_rollup_t GROUP BY 
ROLLUP(c0)) x
+WHERE x.c0 IS NOT NULL
+----
+10
+1
+20
+1
+
+-- (4) dual form: select only the super-aggregate row -- nothing comes back
+-- observed: <empty>                  <-- WRONG      expected: (NULL,2)
+query II rowsort
+SELECT c0, n FROM (SELECT c0, COUNT(*) AS n FROM br_rollup_t GROUP BY 
ROLLUP(c0)) x
+WHERE x.c0 IS NULL
+----
+NULL
+2
+
+-- (5) HAVING form
+-- observed: (10,1) (20,1) (NULL,2)   <-- WRONG      expected: (10,1) (20,1)
+query II rowsort
+SELECT c0, COUNT(*) AS n FROM br_rollup_t GROUP BY ROLLUP(c0) HAVING c0 IS NOT 
NULL
+----
+10
+1
+20
+1
+
+-- (6) GROUPING() consistency criterion: a row with GROUPING(c0)=1 must have 
c0 NULL,
+--     so this count must be 0 in every conforming implementation
+-- observed: 1                        <-- WRONG      expected: 0
+query I rowsort
+SELECT COUNT(*) AS should_be_zero
+FROM (SELECT c0 AS k, GROUPING(c0) AS g, COUNT(*) AS n FROM br_rollup_t GROUP 
BY ROLLUP(c0)) x
+WHERE x.g = 1 AND x.k IS NOT NULL
+----
+0
+
+-- (7) CONTROL: same query, one NULL added to c0 -- everything becomes correct
+statement ok
+CREATE TABLE br_rollup_n (id INT PRIMARY KEY, c0 INT)
+
+statement ok
+INSERT INTO br_rollup_n VALUES (1,10),(2,20),(3,NULL)
+
+-- observed: (10,1) (20,1)            correct
+query II rowsort
+SELECT c0, n FROM (SELECT c0, COUNT(*) AS n FROM br_rollup_n GROUP BY 
ROLLUP(c0)) x
+WHERE x.c0 IS NOT NULL
+----
+10
+1
+20
+1
+
+-- observed: 0                        correct
+query I rowsort
+SELECT COUNT(*) AS should_be_zero
+FROM (SELECT c0 AS k, GROUPING(c0) AS g, COUNT(*) AS n FROM br_rollup_n GROUP 
BY ROLLUP(c0)) x
+WHERE x.g = 1 AND x.k IS NOT NULL
+----
+0
+
+-- (8) CUBE and GROUPING SETS are affected identically
+-- observed: (10,1) (20,1) (NULL,2)   <-- WRONG      expected: (10,1) (20,1)
+query II rowsort
+SELECT c0, n FROM (SELECT c0, COUNT(*) AS n FROM br_rollup_t GROUP BY 
CUBE(c0)) x
+WHERE x.c0 IS NOT NULL
+----
+10
+1
+20
+1
+
+-- observed: (10,1) (20,1) (NULL,2)   <-- WRONG      expected: (10,1) (20,1)
+query II rowsort
+SELECT c0, n FROM (SELECT c0, COUNT(*) AS n FROM br_rollup_t GROUP BY GROUPING 
SETS ((c0),())) x
+WHERE x.c0 IS NOT NULL
+----
+10
+1
+20
+1
+
+statement ok
+DROP TABLE IF EXISTS br_rollup_n
+
+statement ok
+DROP TABLE IF EXISTS br_rollup_t
+
diff --git a/sql/test/BugTracker-2026/Tests/All 
b/sql/test/BugTracker-2026/Tests/All
--- a/sql/test/BugTracker-2026/Tests/All
+++ b/sql/test/BugTracker-2026/Tests/All
@@ -156,3 +156,4 @@ KNOWNFAIL?7965-select-1-limit-0-bug
 7970-optimize-where-predicate
 7971-prepare-decimal-parameter-crash
 7972-orderby-limit-subquery-bug
+KNOWNFAIL?7973-groupby-list-null-row-bug
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to