Changeset: 05ce2219e8fa for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=05ce2219e8fa
Modified Files:
        sql/server/rel_exp.c
        sql/server/rel_rel.c
Branch: Oct2020
Log Message:

Project only when required and be more precise when finding specific function


diffs (54 lines):

diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -2581,7 +2581,7 @@ is_identity( sql_exp *e, sql_rel *r)
                return 0;
        case e_func: {
                sql_subfunc *f = e->f;
-               return (strcmp(f->func->base.name, "identity") == 0);
+               return !f->func->s && strcmp(f->func->base.name, "identity") == 
0;
        }
        default:
                return 0;
@@ -2742,12 +2742,12 @@ exp_flatten(mvc *sql, sql_exp *e)
                sql_arg *res = (f->func->res)?(f->func->res->h->data):NULL;
 
                /* TODO handle date + x months */
-               if (strcmp(f->func->base.name, "sql_add") == 0 && 
list_length(l) == 2 && res && EC_NUMBER(res->type.type->eclass)) {
+               if (!f->func->s && strcmp(f->func->base.name, "sql_add") == 0 
&& list_length(l) == 2 && res && EC_NUMBER(res->type.type->eclass)) {
                        atom *l1 = exp_flatten(sql, l->h->data);
                        atom *l2 = exp_flatten(sql, l->h->next->data);
                        if (l1 && l2)
                                return atom_add(l1,l2);
-               } else if (strcmp(f->func->base.name, "sql_sub") == 0 && 
list_length(l) == 2 && res && EC_NUMBER(res->type.type->eclass)) {
+               } else if (!f->func->s && strcmp(f->func->base.name, "sql_sub") 
== 0 && list_length(l) == 2 && res && EC_NUMBER(res->type.type->eclass)) {
                        atom *l1 = exp_flatten(sql, l->h->data);
                        atom *l2 = exp_flatten(sql, l->h->next->data);
                        if (l1 && l2)
@@ -2813,7 +2813,7 @@ exp_sum_scales(sql_subfunc *f, sql_exp *
 int
 exp_aggr_is_count(sql_exp *e)
 {
-       if (e->type == e_aggr && strcmp(((sql_subfunc *)e->f)->func->base.name, 
"count") == 0)
+       if (e->type == e_aggr && !((sql_subfunc *)e->f)->func->s && 
strcmp(((sql_subfunc *)e->f)->func->base.name, "count") == 0)
                return 1;
        return 0;
 }
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
@@ -1497,11 +1497,12 @@ static sql_rel *
        list *exps = rel_projections(sql, rel, NULL, 1, 1);
        sql_exp *e;
 
-       if (list_length(exps) == 0) {
+       if (list_empty(exps)) {
                *exp = NULL;
                return rel;
        }
-       rel = rel_project(sql->sa, rel, exps);
+       if (!is_simple_project(rel->op) || !list_empty(rel->r))
+               rel = rel_project(sql->sa, rel, exps);
        e = rel->exps->h->data;
        e = exp_column(sql->sa, exp_relname(e), exp_name(e), exp_subtype(e), 
rel->card, has_nil(e), is_intern(e));
        e = exp_unop(sql->sa, e, sql_bind_func(sql->sa, NULL, "identity", 
exp_subtype(e), NULL, F_FUNC));
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to