[prev in list] [next in list] [prev in thread] [next in thread]
List: monetdb-checkins
Subject: MonetDB: default - Do less expression copying
From: Pedro_Ferreira <commits+pedro.ferreira=monetdbsolutions.com () mon
Date: 2021-03-31 14:06:34
Message-ID: hg.5ebe229dedc9.1617199594.-2087817869338434468 () monetdb-vm0 ! spin-off ! cwi ! nl
[Download RAW message or body]
Changeset: 5ebe229dedc9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/5ebe229dedc9
Modified Files:
sql/server/rel_optimizer.c
Branch: default
Log Message:
Do less expression copying
diffs (168 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
@@ -1248,14 +1248,8 @@ exps_rename(mvc *sql, list *l, sql_rel *
{
if (list_empty(l))
return l;
- for(node *n=l->h; n; n=n->next) {
- sql_exp *arg = n->data;
-
- arg = exp_rename(sql, arg, f, t);
- if (!arg)
- return NULL;
- n->data = arg;
- }
+ for (node *n=l->h; n; n=n->next)
+ n->data = exp_rename(sql, n->data, f, t);
return l;
}
@@ -1263,7 +1257,7 @@ exps_rename(mvc *sql, list *l, sql_rel *
static sql_exp *
exp_rename(mvc *sql, sql_exp *e, sql_rel *f, sql_rel *t)
{
- sql_exp *ne = NULL, *l, *r, *r2;
+ sql_exp *ne = NULL;
switch(e->type) {
case e_column:
@@ -1280,77 +1274,41 @@ exp_rename(mvc *sql, sql_exp *e, sql_rel
e = rel_bind_column2(sql, t, ne->l, ne->r, 0);
if (!e && ne->r)
e = rel_bind_column(sql, t, ne->r, 0, 1);
- sql->session->status = 0;
- sql->errstr[0] = 0;
- if (!e && exp_is_atom(ne))
- return ne;
- return exp_ref(sql ,e);
+ if (!e) {
+ sql->session->status = 0;
+ sql->errstr[0] = 0;
+ if (exp_is_atom(ne))
+ return ne;
+ }
+ return exp_ref(sql, e);
case e_cmp:
if (e->flag == cmp_or || e->flag == cmp_filter) {
- list *l = exps_rename(sql, e->l, f, t);
- list *r = exps_rename(sql, e->r, f, t);
- if (l && r) {
- if (e->flag == cmp_filter)
- ne = exp_filter(sql->sa, l, r, e->f, is_anti(e));
- else
- ne = exp_or(sql->sa, l, r, is_anti(e));
- }
+ e->l = exps_rename(sql, e->l, f, t);
+ e->r = exps_rename(sql, e->r, f, t);
} else if (e->flag == cmp_in || e->flag == cmp_notin) {
- sql_exp *l = exp_rename(sql, e->l, f, t);
- list *r = exps_rename(sql, e->r, f, t);
- if (l && r)
- ne = exp_in(sql->sa, l, r, e->flag);
+ e->l = exp_rename(sql, e->l, f, t);
+ e->r = exps_rename(sql, e->r, f, t);
} else {
- l = exp_rename(sql, e->l, f, t);
- r = exp_rename(sql, e->r, f, t);
- if (e->f) {
- r2 = exp_rename(sql, e->f, f, t);
- if (l && r && r2)
- ne = exp_compare2(sql->sa, l, r, r2, e->flag);
- } else if (l && r) {
- ne = exp_compare(sql->sa, l, r, e->flag);
- }
+ e->l = exp_rename(sql, e->l, f, t);
+ e->r = exp_rename(sql, e->r, f, t);
+ if (e->f)
+ e->f = exp_rename(sql, e->f, f, t);
}
break;
case e_convert:
- l = exp_rename(sql, e->l, f, t);
- if (l)
- ne = exp_convert(sql->sa, l, exp_fromtype(e), exp_totype(e));
+ e->l = exp_rename(sql, e->l, f, t);
break;
case e_aggr:
- case e_func: {
- list *l = e->l, *nl = NULL;
-
- if (!list_empty(l)) {
- nl = exps_rename(sql, l, f, t);
- if (!nl)
- return NULL;
- }
- if (e->type == e_func)
- ne = exp_op(sql->sa, nl, e->f);
- else
- ne = exp_aggr(sql->sa, nl, e->f, need_distinct(e), need_no_nil(e), e->card, has_nil(e));
+ case e_func:
+ e->l = exps_rename(sql, e->l, f, t);
break;
- }
- case e_atom: {
- list *l = e->f, *nl = NULL;
-
- if (!list_empty(l)) {
- nl = exps_rename(sql, l, f, t);
- if (!nl)
- return NULL;
- ne = exp_values(sql->sa, nl);
- } else {
- ne = exp_copy(sql, e);
- }
+ case e_atom:
+ e->f = exps_rename(sql, e->f, f, t);
break;
- }
case e_psm:
- return e;
- }
- if (!ne)
- return NULL;
- return exp_propagate(sql->sa, ne, e);
+ break;
+ }
+ return e;
}
static int
@@ -6594,11 +6552,13 @@ rel_push_project_up(visitor *v, sql_rel
/* rewrite rel from rel->l into rel->l->l */
if (rel->exps) {
for (n = rel->exps->h; n; n = n->next) {
- sql_exp *e = n->data;
-
- e = exp_rename(v->sql, e, l, l->l);
- assert(e);
- n->data = e;
+ sql_exp *e = n->data, *ne;
+
+ ne = exp_rename(v->sql, e, l, l->l);
+ assert(ne);
+ if (ne != e && exp_name(e))
+ exp_propagate(v->sql->sa, ne, e);
+ n->data = ne;
}
}
rel->l = l->l;
@@ -6609,11 +6569,13 @@ rel_push_project_up(visitor *v, sql_rel
/* rewrite rel from rel->r into rel->r->l */
if (rel->exps) {
for (n = rel->exps->h; n; n = n->next) {
- sql_exp *e = n->data;
-
- e = exp_rename(v->sql, e, r, r->l);
- assert(e);
- n->data = e;
+ sql_exp *e = n->data, *ne;
+
+ ne = exp_rename(v->sql, e, r, r->l);
+ assert(ne);
+ if (ne != e && exp_name(e))
+ exp_propagate(v->sql->sa, ne, e);
+ n->data = ne;
}
}
rel->r = r->l;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic