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]

Reply via email to