Changeset: 8aa46b5a37d8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/8aa46b5a37d8
Modified Files:
        sql/server/rel_optimize_sel.c
        sql/test/BugTracker-2026/Tests/All
        sql/test/rel-optimizers/Tests/merge-unions.test
Branch: default
Log Message:

fixed issue #7975, ie cleanup redundant join expressions


diffs (73 lines):

diff --git a/sql/server/rel_optimize_sel.c b/sql/server/rel_optimize_sel.c
--- a/sql/server/rel_optimize_sel.c
+++ b/sql/server/rel_optimize_sel.c
@@ -1007,15 +1007,26 @@ cleanup_equal_exps(mvc *sql, sql_rel *re
                }
        }
        if (needed) {
+               allocator *ta = MT_thread_getallocator();
+               int cnt = list_length(exps), i=0, j = 0;
+               char *used = SA_ZNEW_ARRAY(ta, char, cnt);
                list *nexps = sa_list(sql->sa);
 
-               for(node *n = exps->h; n; n = n->next) {
+               for(node *n = exps->h; n; n = n->next, i++) {
+                       if (used[i])
+                               continue;
                        bool done = false;
-                       for (node *m = exps->h; m && !done; m = m->next) {
+                       j = 0;
+                       for (node *m = exps->h; m && !done; m = m->next, j++) {
+                               if (used[j])
+                                       continue;
                                if (n != m && exp_match_exp_semantics(n->data, 
m->data, false)) {
                                        sql_exp *e1 = n->data, *e2 = m->data;
                                        if ((is_any(e1) || is_semantics(e1)) || 
(!is_any(e2) && !is_semantics(e2))) {
                                                append(nexps, e1);
+                                               used[i] = 1;
+                                               used[j] = 1;
+                                               (*changes)++;
                                                if ((!is_any(e2) && 
!is_semantics(e2)) && is_left(rel->op) && list_length(rel->attr) == 1) {
                                                        /* nil is false */
                                                        sql_exp *m = 
rel->attr->h->data;
@@ -1026,8 +1037,10 @@ cleanup_equal_exps(mvc *sql, sql_rel *re
                                        done = true;
                                }
                        }
-                       if (!done)
+                       if (!done) {
+                               used[i] = 1;
                                append(nexps, n->data);
+                       }
                }
                return nexps;
        }
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?7963-having-sum-or-exists-or-s
 7969-optimize-distinct-from-q1-intersect-q2
 7970-optimize-where-predicate
 7971-prepare-decimal-parameter-crash
+7975-cleanup-join-exps
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
@@ -212,7 +212,7 @@ munion (
 | project (
 | | select (
 | | | table("sys"."f1") [ "f1"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
-| | ) [ (int(31) "1") < ("f_merge_rec"."n" NOT NULL UNIQUE) < (int(31) "5"), 
(int(31) "1") < ("f_merge_rec"."n" NOT NULL UNIQUE) < (int(31) "5") ]
+| | ) [ (int(31) "1") < ("f_merge_rec"."n" NOT NULL UNIQUE) < (int(31) "5") ]
 | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ],
 | project (
 | | table("sys"."f2") [ "f2"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
@@ -223,7 +223,7 @@ munion (
 | project (
 | | select (
 | | | table("sys"."f4") [ "f4"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
-| | ) [ (int(31) "1") < ("f_merge_rec"."n" NOT NULL UNIQUE) < (int(31) "5"), 
(int(31) "1") < ("f_merge_rec"."n" NOT NULL UNIQUE) < (int(31) "5") ]
+| | ) [ (int(31) "1") < ("f_merge_rec"."n" NOT NULL UNIQUE) < (int(31) "5") ]
 | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ]
 ) [ "f_merge_rec"."n" NOT NULL ]
 
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to