Changeset: d8260ac0adad for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d8260ac0adad
Modified Files:
        sql/server/rel_optimizer.c
        sql/server/rel_rel.c
        sql/server/rel_unnest.c
Branch: Jun2020
Log Message:

When propagating an expression, call exp_prop_alias so the label can get 
propagated


diffs (277 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
@@ -3070,21 +3070,25 @@ exp_simplify_math( mvc *sql, sql_exp *e,
                        if (exp_is_atom(le) && exp_is_null(sql, le)) {
                                (*changes)++;
                                if (f && f->func && f->func->imp && 
strstr(f->func->imp, "_no_nil") != NULL) {
-                                       exp_setname(sql->sa, re, 
exp_relname(e), exp_name(e));
+                                       if (exp_name(e))
+                                               exp_prop_alias(sql->sa, re, e);
                                        return re;
                                }
                                le = exp_null(sql->sa, et);
-                               exp_setname(sql->sa, le, exp_relname(e), 
exp_name(e));
+                               if (exp_name(e))
+                                       exp_prop_alias(sql->sa, le, e);
                                return le;
                        }
                        if (exp_is_atom(re) && exp_is_null(sql, re)) {
                                (*changes)++;
                                if (f && f->func && f->func->imp && 
strstr(f->func->imp, "_no_nil") != NULL) {
-                                       exp_setname(sql->sa, le, 
exp_relname(e), exp_name(e));
+                                       if (exp_name(e))
+                                               exp_prop_alias(sql->sa, le, e);
                                        return le;
                                }
                                re = exp_null(sql->sa, et);
-                               exp_setname(sql->sa, re, exp_relname(e), 
exp_name(e));
+                               if (exp_name(e))
+                                       exp_prop_alias(sql->sa, re, e);
                                return re;
                        }
                }
@@ -3097,27 +3101,31 @@ exp_simplify_math( mvc *sql, sql_exp *e,
                        if (exp_is_atom(le) && exp_is_zero(sql, le) && 
exp_is_atom(re) && exp_is_not_null(sql, re)) {
                                (*changes)++;
                                le = exp_zero(sql->sa, et);
-                               exp_setname(sql->sa, le, exp_relname(e), 
exp_name(e));
+                               if (exp_name(e))
+                                       exp_prop_alias(sql->sa, le, e);
                                return le;
                        }
                        /* a*0 = 0 */
                        if (exp_is_atom(re) && exp_is_zero(sql, re) && 
exp_is_atom(le) && exp_is_not_null(sql, le)) {
                                (*changes)++;
                                re = exp_zero(sql->sa, et);
-                               exp_setname(sql->sa, re, exp_relname(e), 
exp_name(e));
+                               if (exp_name(e))
+                                       exp_prop_alias(sql->sa, re, e);
                                return re;
                        }
                        /* 1*a = a
                        if (exp_is_atom(le) && exp_is_one(sql, le)) {
                                (*changes)++;
-                               exp_setname(sql->sa, re, exp_relname(e), 
exp_name(e));
+                               if (exp_name(e))
+                                       exp_prop_alias(sql->sa, re, e);
                                return re;
                        }
                        */
                        /* a*1 = a
                        if (exp_is_atom(re) && exp_is_one(sql, re)) {
                                (*changes)++;
-                               exp_setname(sql->sa, le, exp_relname(e), 
exp_name(e));
+                               if (exp_name(e))
+                                       exp_prop_alias(sql->sa, le, e);
                                return le;
                        }
                        */
@@ -3132,7 +3140,8 @@ exp_simplify_math( mvc *sql, sql_exp *e,
                                        if (a && atom_cast(sql->sa, a, 
exp_subtype(e))) {
                                                sql_exp *ne = exp_atom(sql->sa, 
a);
                                                (*changes)++;
-                                               exp_setname(sql->sa, ne, 
exp_relname(e), exp_name(e));
+                                               if (exp_name(e))
+                                                       exp_prop_alias(sql->sa, 
ne, e);
                                                return ne;
                                        }
                                }
@@ -3162,7 +3171,8 @@ exp_simplify_math( mvc *sql, sql_exp *e,
                                append(l, re);
                                (*changes)++;
                                ne = exp_op(sql->sa, l, pow);
-                               exp_setname(sql->sa, ne, exp_relname(e), 
exp_name(e));
+                               if (exp_name(e))
+                                       exp_prop_alias(sql->sa, ne, e);
                                return ne;
                        }
                        /* change a*pow(a,n) or pow(a,n)*a into pow(a,n+1) */
@@ -3176,7 +3186,8 @@ exp_simplify_math( mvc *sql, sql_exp *e,
                                        if (exp_equal(re, lle)==0) {
                                                if (atom_inc(exp_value(sql, 
lre, sql->args, sql->argc))) {
                                                        (*changes)++;
-                                                       exp_setname(sql->sa, 
le, exp_relname(e), exp_name(e));
+                                                       if (exp_name(e))
+                                                               
exp_prop_alias(sql->sa, le, e);
                                                        return le;
                                                }
                                        }
@@ -3211,12 +3222,14 @@ exp_simplify_math( mvc *sql, sql_exp *e,
                        sql_exp *re = l->h->next->data;
                        if (exp_is_atom(le) && exp_is_zero(sql, le)) {
                                (*changes)++;
-                               exp_setname(sql->sa, re, exp_relname(e), 
exp_name(e));
+                               if (exp_name(e))
+                                       exp_prop_alias(sql->sa, re, e);
                                return re;
                        }
                        if (exp_is_atom(re) && exp_is_zero(sql, re)) {
                                (*changes)++;
-                               exp_setname(sql->sa, le, exp_relname(e), 
exp_name(e));
+                               if (exp_name(e))
+                                       exp_prop_alias(sql->sa, le, e);
                                return le;
                        }
                        if (exp_is_atom(le) && exp_is_atom(re)) {
@@ -3229,7 +3242,8 @@ exp_simplify_math( mvc *sql, sql_exp *e,
                                        if (a) {
                                                sql_exp *ne = exp_atom(sql->sa, 
a);
                                                (*changes)++;
-                                               exp_setname(sql->sa, ne, 
exp_relname(e), exp_name(e));
+                                               if (exp_name(e))
+                                                       exp_prop_alias(sql->sa, 
ne, e);
                                                return ne;
                                        }
                                }
@@ -3297,7 +3311,8 @@ exp_simplify_math( mvc *sql, sql_exp *e,
                                        if (a) {
                                                sql_exp *ne = exp_atom(sql->sa, 
a);
                                                (*changes)++;
-                                               exp_setname(sql->sa, ne, 
exp_relname(e), exp_name(e));
+                                               if (exp_name(e))
+                                                       exp_prop_alias(sql->sa, 
ne, e);
                                                return ne;
                                        }
                                }
@@ -3315,7 +3330,8 @@ exp_simplify_math( mvc *sql, sql_exp *e,
                                }
                                ne = exp_atom(sql->sa, a);
                                (*changes)++;
-                               exp_setname(sql->sa, ne, exp_relname(e), 
exp_name(e));
+                               if (exp_name(e))
+                                       exp_prop_alias(sql->sa, ne, e);
                                return ne;
                        }
                        if (is_func(le->type)) {
@@ -3326,7 +3342,8 @@ exp_simplify_math( mvc *sql, sql_exp *e,
                                        sql_exp *lre = ll->h->next->data;
                                        if (exp_equal(re, lre) == 0) {
                                                /* (x+a)-a = x*/
-                                               exp_setname(sql->sa, lle, 
exp_relname(e), exp_name(e));
+                                               if (exp_name(e))
+                                                       exp_prop_alias(sql->sa, 
lle, e);
                                                (*changes)++;
                                                return lle;
                                        }
@@ -4054,7 +4071,8 @@ rel_merge_project_rse(visitor *v, sql_re
                                        if (between) {
                                                sql_exp *ne = 
exp_op(v->sql->sa, ops, between);
 
-                                               exp_setname(v->sql->sa, ne, 
exp_relname(e), exp_name(e));
+                                               if (exp_name(e))
+                                                       
exp_prop_alias(v->sql->sa, ne, e);
                                                e = ne;
                                        }
                                        v->changes++;
@@ -7899,12 +7917,14 @@ rel_simplify_ifthenelse(visitor *v, sql_
 
                        if (exp_is_true(v->sql, ie)) { /* ifthenelse(true, x, 
y) -> x */
                                sql_exp *res = args->h->next->data;
-                               exp_setname(v->sql->sa, res, exp_relname(e), 
exp_name(e));
+                               if (exp_name(e))
+                                       exp_prop_alias(v->sql->sa, res, e);
                                v->changes++;
                                return res;
                        } else if (exp_is_false(v->sql, ie) || 
exp_is_null(v->sql, ie)) { /* ifthenelse(false or null, x, y) -> y */
                                sql_exp *res = args->h->next->next->data;
-                               exp_setname(v->sql->sa, res, exp_relname(e), 
exp_name(e));
+                               if (exp_name(e))
+                                       exp_prop_alias(v->sql->sa, res, e);
                                v->changes++;
                                return res;
                        }
@@ -8733,7 +8753,8 @@ add_nulls(mvc *sql, sql_rel *rel, sql_re
                sql_exp *e = n->data, *ne;
 
                ne = exp_atom(sql->sa, atom_general(sql->sa, exp_subtype(e), 
NULL));
-               exp_setname(sql->sa, ne, exp_relname(e), exp_name(e));
+               if (exp_name(e))
+                       exp_prop_alias(sql->sa, ne, e);
                append(rel->exps, ne);
        }
 }
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -1164,12 +1164,11 @@ rel_safe_project(mvc *sql, sql_rel *rel)
        assert(!list_empty(rel->exps));
        for(node *n = rel->exps->h; n; n=n->next) {
                sql_exp *e = n->data, *ne;
-               const char *cname = exp_name(e);
-               const char *rname = exp_relname(e);
 
                n->data = e = exp_label(sql->sa, e, ++sql->label);
                ne = exp_ref(sql, e);
-               exp_setname(sql->sa, ne, rname, cname);
+               if (exp_name(e))
+                       exp_prop_alias(sql->sa, ne, e);
                append(nexps, ne);
        }
        list_hash_clear(rel->exps);
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -2606,10 +2606,10 @@ rewrite_exists(visitor *v, sql_rel *rel,
                        sql_rel *sq = NULL;
 
                        if (!exp_is_rel(ie)) { /* exists over a constant or a 
single value */
-                               const char *rname = exp_relname(e), *name = 
exp_name(e);
-                               e = exp_atom_bool(v->sql->sa, 
is_exists(sf)?1:0);
-                               exp_setname(v->sql->sa, e, rname, name);
-                               return e;
+                               le = exp_atom_bool(v->sql->sa, 
is_exists(sf)?1:0);
+                               if (exp_name(e))
+                                       exp_prop_alias(v->sql->sa, le, e);
+                               return le;
                        }
 
                        sq = exp_rel_get_rel(v->sql->sa, ie); /* get subquery */
@@ -2836,7 +2836,6 @@ rewrite_fix_count(visitor *v, sql_rel *r
                                sql_exp *e = n->data, *ne;
 
                                if (exp_is_count(e, r)) {
-                                       const char *rname = exp_relname(e), 
*name = exp_name(e);
                                        /* rewrite count in subquery */
                                        list *args, *targs;
                                        sql_subfunc *isnil = 
sql_bind_func(v->sql->sa, NULL, "isnull", exp_subtype(e), NULL, F_FUNC), 
*ifthen;
@@ -2853,9 +2852,10 @@ rewrite_fix_count(visitor *v, sql_rel *r
                                        append(args, ne);
                                        append(args, exp_atom(v->sql->sa, 
atom_zero_value(v->sql->sa, exp_subtype(e))));
                                        append(args, e);
-                                       e = exp_op(v->sql->sa, args, ifthen);
-                                       exp_setname(v->sql->sa, e, rname, name);
-                                       n->data = e;
+                                       ne = exp_op(v->sql->sa, args, ifthen);
+                                       if (exp_name(e))
+                                               exp_prop_alias(v->sql->sa, ne, 
e);
+                                       n->data = ne;
                                }
                        }
                        if (rel_changes) { /* add project */
@@ -2933,11 +2933,13 @@ rewrite_groupings(visitor *v, sql_rel *r
                                                }
 
                                                ne = exp_atom(v->sql->sa, a);
-                                               exp_setname(v->sql->sa, ne, 
e->alias.rname, e->alias.name);
+                                               if (exp_name(e))
+                                                       
exp_prop_alias(v->sql->sa, ne, e);
                                        } else if (e->type == e_column && 
!exps_find_exp(l, e) && !has_label(e)) {
                                                /* do not include in the output 
of the group by, but add to the project as null */
                                                ne = exp_atom(v->sql->sa, 
atom_general(v->sql->sa, exp_subtype(e), NULL));
-                                               exp_setname(v->sql->sa, ne, 
e->alias.rname, e->alias.name);
+                                               if (exp_name(e))
+                                                       
exp_prop_alias(v->sql->sa, ne, e);
                                        } else {
                                                ne = exp_ref(v->sql, e);
                                                append(exps, e);
@@ -2984,7 +2986,8 @@ rewrite_groupings(visitor *v, sql_rel *r
 
                                        if (e->type == e_aggr && !agr->func->s 
&& !strcmp(agr->func->base.name, "grouping")) {
                                                ne = exp_atom(v->sql->sa, 
atom_int(v->sql->sa, bt, 0));
-                                               exp_setname(v->sql->sa, ne, 
e->alias.rname, e->alias.name);
+                                               if (exp_name(e))
+                                                       
exp_prop_alias(v->sql->sa, ne, e);
                                        } else {
                                                ne = exp_ref(v->sql, e);
                                                append(exps, e);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to