Changeset: 77f8a3ad521e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/77f8a3ad521e
Modified Files:
        sql/server/rel_optimize_proj.c
        sql/test/BugTracker-2025/Tests/All
Branch: default
Log Message:

merged with mar2025


diffs (125 lines):

diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -1215,10 +1215,6 @@ static int
 UUIDcompare(const void *L, const void *R)
 {
        const uuid *l = L, *r = R;
-       if (is_uuid_nil(*r))
-               return !is_uuid_nil(*l);
-       if (is_uuid_nil(*l))
-               return -1;
        return memcmp(l->u, r->u, UUID_SIZE);
 }
 
diff --git a/sql/server/rel_optimize_proj.c b/sql/server/rel_optimize_proj.c
--- a/sql/server/rel_optimize_proj.c
+++ b/sql/server/rel_optimize_proj.c
@@ -3347,19 +3347,13 @@ rel_merge_unions(visitor *v, sql_rel *re
                list *l = rel->l;
                for(node *n = l->h; n; ) {
                        node *next = n->next;
-                       sql_rel *oc = n->data;
-                       sql_rel *c = oc;
-
-                       /* account for any group-bys pushed down between 
stacked munions */
-                       if (oc->op == op_groupby)
-                               c = oc->l;
-
+                       sql_rel *c = n->data;
                        if (is_munion(c->op)) {
                                c = rel_dup(c);
                                list_remove_node(l, NULL, n);
                                l = list_merge(l, c->l, (fdup)NULL);
                                c->l = NULL;
-                               rel_destroy(oc);
+                               rel_destroy(c);
                                if (!next)
                                        next = l->h;
                                v->changes++;
diff --git a/sql/test/BugTracker-2025/Tests/7647-munion-optimizer-bug.test 
b/sql/test/BugTracker-2025/Tests/7647-munion-optimizer-bug.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2025/Tests/7647-munion-optimizer-bug.test
@@ -0,0 +1,31 @@
+statement ok
+CREATE TABLE "test_bug_repro" (
+  "year_" TIMESTAMP,
+  "event_date_" TIMESTAMP,
+  "position_" BIGINT,
+  "final_rank_driver_" BIGINT
+)
+
+query I
+WITH "second_place_days" AS (
+  SELECT COUNT(DISTINCT "event_date_") AS "count" FROM "test_bug_repro" WHERE 
"position_" = 2
+),
+"championship_years" AS (
+  SELECT COUNT(DISTINCT "year_") AS "count" FROM "test_bug_repro" WHERE 
"final_rank_driver_" = 1
+),
+"race_days" AS (
+  SELECT COUNT(DISTINCT "event_date_") AS "count" FROM "test_bug_repro"
+),
+"podium_days" AS (
+  SELECT COUNT(DISTINCT "event_date_") AS "count" FROM "test_bug_repro" WHERE 
"position_" IN (1, 2, 3)
+),
+"results" AS (
+  SELECT '2nd' FROM "second_place_days"
+  UNION ALL
+  SELECT 'Championships' FROM "championship_years"
+  UNION ALL
+  SELECT 'Podium finishes' FROM "podium_days", "race_days"
+)
+SELECT COUNT(*) FROM "results"
+----
+3
diff --git a/sql/test/BugTracker-2025/Tests/All 
b/sql/test/BugTracker-2025/Tests/All
--- a/sql/test/BugTracker-2025/Tests/All
+++ b/sql/test/BugTracker-2025/Tests/All
@@ -16,6 +16,7 @@ 7643_select_0_optimizer_bug
 7644_antijoin_crash
 7645_not_likeselect
 7646_leftjoin_crash
+7647-munion-optimizer-bug
 7648_rightjoin_crash
 7650_right_join_crash
 7653_incorrect_join_results
diff --git a/sql/test/rel-optimizers/Tests/merge-unions.test 
b/sql/test/rel-optimizers/Tests/merge-unions.test
--- a/sql/test/rel-optimizers/Tests/merge-unions.test
+++ b/sql/test/rel-optimizers/Tests/merge-unions.test
@@ -248,17 +248,25 @@ project (
 | group by (
 | | munion (
 | | | group by (
-| | | | table("sys"."f1") [ "f1"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
-| | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ],
-| | | group by (
-| | | | table("sys"."f2") [ "f2"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
-| | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ],
+| | | | munion (
+| | | | | group by (
+| | | | | | table("sys"."f1") [ "f1"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
+| | | | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ],
+| | | | | group by (
+| | | | | | table("sys"."f2") [ "f2"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
+| | | | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ]
+| | | | ) [ "f_merge_rec"."n" NOT NULL, "%1"."%1" NOT NULL ]
+| | | ) [ "f_merge_rec"."n" NOT NULL ] [ "f_merge_rec"."n" NOT NULL, 
"sys"."sum" no nil ("%1"."%1" NOT NULL) NOT NULL as "%1"."%1" ],
 | | | group by (
-| | | | table("sys"."f3") [ "f3"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
-| | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ],
-| | | group by (
-| | | | table("sys"."f4") [ "f4"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
-| | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ]
+| | | | munion (
+| | | | | group by (
+| | | | | | table("sys"."f3") [ "f3"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
+| | | | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ],
+| | | | | group by (
+| | | | | | table("sys"."f4") [ "f4"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
+| | | | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ]
+| | | | ) [ "f_merge_rec"."n" NOT NULL, "%1"."%1" NOT NULL ]
+| | | ) [ "f_merge_rec"."n" NOT NULL ] [ "f_merge_rec"."n" NOT NULL, 
"sys"."sum" no nil ("%1"."%1" NOT NULL) NOT NULL as "%1"."%1" ]
 | | ) [ "f_merge_rec"."n" NOT NULL, "%1"."%1" NOT NULL ]
 | ) [ "f_merge_rec"."n" NOT NULL ] [ "f_merge_rec"."n" NOT NULL, "sys"."sum" 
no nil ("%1"."%1" NOT NULL) NOT NULL as "%1"."%1" ]
 ) [ "f_merge_rec"."n" NOT NULL UNIQUE, "%1"."%1" NOT NULL ]
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to