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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list