Changeset: 5728fe610d68 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/5728fe610d68
Modified Files:
sql/server/rel_optimize_sel.c
sql/test/BugTracker-2026/Tests/All
Branch: default
Log Message:
exp_merge_range change le/re variables localy and didn't revert those when the
range didn't match, causing issues on next expression matched.
local copied variables lle/lre are used now.
diffs (96 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
@@ -372,21 +372,22 @@ exp_merge_range(visitor *v, sql_rel *rel
sql_exp *f = m->data;
sql_exp *lf = f->l;
sql_exp *rf = f->r;
+ sql_exp *lle = le, *lre = re;
if (f->type == e_cmp && f->flag < cmp_equal &&
!f->f &&
rf->card > CARD_ATOM && !is_anti(f)) {
sql_exp *ne, *t;
int swap = 0, lt = 0, gt = 0;
comp_type ef = (comp_type) e->flag, ff
= (comp_type) f->flag;
- int c_re = is_numeric_upcast(re), c_rf
= is_numeric_upcast(rf);
- int c_le = is_numeric_upcast(le), c_lf
= is_numeric_upcast(lf), c;
+ int c_re = is_numeric_upcast(lre), c_rf
= is_numeric_upcast(rf);
+ int c_le = is_numeric_upcast(lle), c_lf
= is_numeric_upcast(lf), c;
sql_subtype super;
/* both swapped ? */
if (exp_match_exp(c_re?re->l:re,
c_rf?rf->l:rf)) {
- t = re;
- re = le;
- le = t;
+ t = lre;
+ lre = lle;
+ lle = t;
c = c_re; c_re = c_le; c_le = c;
ef = swap_compare(ef);
t = rf;
@@ -397,16 +398,16 @@ exp_merge_range(visitor *v, sql_rel *rel
}
/* is left swapped ? */
- if (exp_match_exp(c_re?re->l:re,
c_lf?lf->l:lf)) {
- t = re;
- re = le;
- le = t;
+ if (exp_match_exp(c_re?lre->l:lre,
c_lf?lf->l:lf)) {
+ t = lre;
+ lre = lle;
+ lle = t;
c = c_re; c_re = c_le; c_le = c;
ef = swap_compare(ef);
}
/* is right swapped ? */
- if (exp_match_exp(c_le?le->l:le,
c_rf?rf->l:rf)) {
+ if (exp_match_exp(c_le?lle->l:lle,
c_rf?rf->l:rf)) {
t = rf;
rf = lf;
lf = t;
@@ -414,7 +415,7 @@ exp_merge_range(visitor *v, sql_rel *rel
ff = swap_compare(ff);
}
- if (!exp_match_exp(c_le?le->l:le,
c_lf?lf->l:lf))
+ if (!exp_match_exp(c_le?lle->l:lle,
c_lf?lf->l:lf))
continue;
/* for now only c1 <[=] x <[=] c2 */
@@ -426,18 +427,18 @@ exp_merge_range(visitor *v, sql_rel *rel
if (lt && (ff == cmp_lt || ff ==
cmp_lte))
continue;
- cmp_supertype(&super, exp_subtype(le),
exp_subtype(lf), false);
+ cmp_supertype(&super, exp_subtype(lle),
exp_subtype(lf), false);
if (!(rf = exp_check_type(v->sql,
&super, rel, rf, type_equal)) ||
- !(le = exp_check_type(v->sql,
&super, rel, le, type_equal)) ||
- !(re = exp_check_type(v->sql,
&super, rel, re, type_equal))) {
+ !(lle = exp_check_type(v->sql,
&super, rel, lle, type_equal)) ||
+ !(lre = exp_check_type(v->sql,
&super, rel, lre, type_equal))) {
v->sql->session->status
= 0;
v->sql->errstr[0] = 0;
continue;
}
if (!swap)
- ne = exp_compare2(v->sql->sa,
le, re, rf, compare2range(ef, ff), 0);
+ ne = exp_compare2(v->sql->sa,
lle, lre, rf, compare2range(ef, ff), 0);
else
- ne = exp_compare2(v->sql->sa,
le, rf, re, compare2range(ff, ef), 0);
+ ne = exp_compare2(v->sql->sa,
lle, rf, lre, compare2range(ff, ef), 0);
list_remove_data(exps, NULL, e);
list_remove_data(exps, NULL, f);
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
@@ -193,5 +193,5 @@ KNOWNFAIL?8007-lag-lead-window-functions
KNOWNFAIL?8008-numeric-range-frame-bug
KNOWNFAIL?8009-numeric-range-nulls-last-bug
KNOWNFAIL?8010-first_value-last_value-partition-range-bug
-KNOWNFAIL?8013-triple-same-predicate-bug
+8013-triple-same-predicate-bug
8014-rel_bin-exp_bin-assert-failure
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]