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]