Changeset: fc702b902a99 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/fc702b902a99
Added Files:
sql/test/BugTracker-2026/Tests/7994-exists-groupby-rollup-bug.test
Modified Files:
sql/test/BugTracker-2026/Tests/All
Branch: Dec2025
Log Message:
Add test for issue #7994
diffs (102 lines):
diff --git a/sql/test/BugTracker-2026/Tests/7994-exists-groupby-rollup-bug.test
b/sql/test/BugTracker-2026/Tests/7994-exists-groupby-rollup-bug.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2026/Tests/7994-exists-groupby-rollup-bug.test
@@ -0,0 +1,89 @@
+statement ok
+CREATE TABLE n4a(x INT)
+
+statement ok
+INSERT INTO n4a VALUES (10),(20),(99)
+
+statement ok
+CREATE TABLE n4b(y INT, z INT)
+
+statement ok
+INSERT INTO n4b VALUES (10,1),(10,2),(10,3),(20,7)
+
+-- (A) BUG: EXISTS with ROLLUP is FALSE for every outer row
+-- observed: (10, false), (20, false), (99, false) WRONG for x=10 and x=20
and x=99
+query IT rowsort
+SELECT a.x,
+ EXISTS (SELECT COUNT(*) FROM n4b WHERE n4b.y = a.x GROUP BY
ROLLUP(n4b.z)) AS e
+FROM n4a a ORDER BY a.x
+----
+10
+True
+20
+True
+99
+True
+
+-- (B) Proof the x=10 subquery genuinely produces 4 rows:
+-- observed: 1, 1, 1, 3 (four rows) -> EXISTS must be TRUE
+query I rowsort
+SELECT COUNT(*) FROM n4b WHERE n4b.y = 10 GROUP BY ROLLUP(n4b.z)
+----
+1
+1
+1
+3
+
+-- observed: 1, 1 (two rows) -> EXISTS must be TRUE
+query I rowsort
+SELECT COUNT(*) FROM n4b WHERE n4b.y = 20 GROUP BY ROLLUP(n4b.z)
+----
+1
+1
+
+-- observed: 0 (one row) -> EXISTS must be TRUE
+query I rowsort
+SELECT COUNT(*) FROM n4b WHERE n4b.y = 99 GROUP BY ROLLUP(n4b.z)
+----
+0
+
+-- (C) Control: plain GROUP BY (no ROLLUP) is correct
+-- observed: (10, true), (20, true), (99, false) correct
+query IT rowsort
+SELECT a.x,
+ EXISTS (SELECT COUNT(*) FROM n4b WHERE n4b.y = a.x GROUP BY n4b.z) AS e
+FROM n4a a ORDER BY a.x
+----
+10
+True
+20
+True
+99
+False
+
+-- (D) Reportability: WHERE EXISTS silently drops all rows
+-- observed: (empty) WRONG — expected {10, 20, 99}
+query I rowsort
+SELECT a.x FROM n4a a
+WHERE EXISTS (SELECT COUNT(*) FROM n4b WHERE n4b.y = a.x GROUP BY
ROLLUP(n4b.z))
+ORDER BY a.x
+----
+10
+20
+99
+
+-- same query by without the ROLLUP. This filters out row 99 correctly
+query I rowsort
+SELECT a.x FROM n4a a
+WHERE EXISTS (SELECT COUNT(*) FROM n4b WHERE n4b.y = a.x GROUP BY (n4b.z))
+ORDER BY a.x
+----
+10
+20
+
+statement ok
+DROP TABLE IF EXISTS n4a
+
+statement ok
+DROP TABLE IF EXISTS n4b
+
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
@@ -174,3 +174,4 @@ KNOWNFAIL?7990-rank-filter-bug
7991-group_concat-null-separator-bug
KNOWNFAIL?7992-window-date-range-interval-bug
KNOWNFAIL?7993-query-groupby-rollup-bug
+KNOWNFAIL?7994-exists-groupby-rollup-bug
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]