Changeset: d788347f7b7b for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d788347f7b7b Modified Files: sql/server/rel_unnest.c Branch: Jun2020 Log Message:
Don't run rewrite_ifthenelse again for the same expression once the isnull condition has been added diffs (48 lines): 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 @@ -2616,7 +2616,7 @@ rewrite_ifthenelse(mvc *sql, sql_rel *re set_single(usq); e = exp_rel(sql, usq); } else - if ((has_nil(cond) || (inner && is_outerjoin(inner->op))) && (cond->type != e_func || !is_isnull_func(nf))) { + if (!e->used && (has_nil(cond) || (inner && is_outerjoin(inner->op))) && (cond->type != e_func || !is_isnull_func(nf))) { /* add is null */ sql_exp *condnil = rel_unop_(sql, rel, cond, NULL, "isnull", card_value); @@ -2624,6 +2624,7 @@ rewrite_ifthenelse(mvc *sql, sql_rel *re cond = exp_copy(sql, cond); cond = rel_nop_(sql, rel, condnil, exp_atom_bool(sql->sa, 0), cond, NULL, NULL, "ifthenelse", card_value); l->h->data = cond; + e->used = 1; } } return e; @@ -2995,6 +2996,18 @@ rewrite_values(mvc *sql, sql_rel *rel, i return rel; } +static sql_exp * +reset_exp_used(mvc *sql, sql_rel *rel, sql_exp *e, int depth, int *changes) +{ + (void) sql; + (void) rel; + (void) depth; + (void) changes; + + e->used = 0; + return e; +} + sql_rel * rel_unnest(mvc *sql, sql_rel *rel) { @@ -3016,6 +3029,8 @@ rel_unnest(mvc *sql, sql_rel *rel) rel = rel_exp_visitor_bottomup(sql, rel, &rewrite_complex, &changes); rel = rel_exp_visitor_bottomup(sql, rel, &rewrite_ifthenelse, &changes); /* add isnull handling */ + rel = rel_exp_visitor_bottomup(sql, rel, &reset_exp_used, &changes); /* reset used flag from ifthenelse re-writer, so it can be used again by the rel_dce optimizer */ + rel = rel_visitor_bottomup(sql, rel, &rewrite_values, &changes); rel = rel_exp_visitor_bottomup(sql, rel, &rewrite_exp_rel, &changes); rel = rel_visitor_bottomup(sql, rel, &rewrite_join2semi, &changes); /* where possible convert anyequal functions into marks */ _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list