Changeset: 802cab0e3e1d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/802cab0e3e1d
Modified Files:
        sql/server/rel_optimizer.c
Branch: default
Log Message:

Columns are expected to be on the left side of equality comparisons on selects. 
Cleanup


diffs (37 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -7409,24 +7409,23 @@ rel_use_index(visitor *v, sql_rel *rel)
                sql_exp *re = NULL;
 
                for( n = exps->h; n && single_table; n = n->next) {
-                       sql_exp *e = n->data;
-                       sql_exp *nre = e->r;
-
-                       if (is_join(rel->op) && ((left && !rel_find_exp(rel->l, 
e->l)) || (!left && !rel_find_exp(rel->r, e->l))))
-                               nre = e->l;
+                       sql_exp *e = n->data, *nre = e->l;
+
+                       if (is_join(rel->op) && ((left && !rel_find_exp(rel->l, 
nre)) || (!left && rel_find_exp(rel->r, nre))))
+                               nre = e->r;
                        single_table = (!re || (exp_relname(nre) && 
exp_relname(re) && strcmp(exp_relname(nre), exp_relname(re)) == 0));
                        re = nre;
                }
                if (single_table) { /* add PROP_HASHCOL to all column exps */
                        for( n = exps->h; n; n = n->next) {
                                sql_exp *e = n->data;
-                               int anti = is_anti(e), semantics = 
is_semantics(e);
 
                                /* swapped ? */
-                               if (is_join(rel->op) && ((left && 
!rel_find_exp(rel->l, e->l)) || (!left && !rel_find_exp(rel->r, e->l))))
-                                       n->data = e = exp_compare(v->sql->sa, 
e->r, e->l, cmp_equal);
-                               if (anti) set_anti(e);
-                               if (semantics) set_semantics(e);
+                               if (is_join(rel->op) && ((left && 
!rel_find_exp(rel->l, e->l)) || (!left && !rel_find_exp(rel->r, e->l)))) {
+                                       sql_exp *l = e->l;
+                                       e->l = e->r;
+                                       e->r = l;
+                               }
                                p = find_prop(e->p, PROP_HASHCOL);
                                if (!p)
                                        e->p = p = prop_create(v->sql->sa, 
PROP_HASHCOL, e->p);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to