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