Changeset: 24fa1251ce8b for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=24fa1251ce8b Modified Files: sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_optimizer.c sql/test/BugTracker-2017/Tests/crash-dce.Bug-6330.stable.out Branch: Jul2017 Log Message:
merged with Dec2016 diffs (53 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 @@ -1300,6 +1300,19 @@ exp_is_zero(mvc *sql, sql_exp *e) } int +exp_is_not_null(mvc *sql, sql_exp *e) +{ + if (e->type == e_atom) { + if (e->l) { + return !(atom_null(e->l)); + } else if(sql->emode == m_normal && sql->argc > e->flag && EC_COMPUTE(exp_subtype(e)->type->eclass)) { + return !atom_null(sql->args[e->flag]); + } + } + return 0; +} + +int exp_is_atom( sql_exp *e ) { switch (e->type) { diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h --- a/sql/server/rel_exp.h +++ b/sql/server/rel_exp.h @@ -119,6 +119,7 @@ extern int exp_is_correlation(sql_exp *e extern int exp_is_join_exp(sql_exp *e); extern int exp_is_atom(sql_exp *e); extern int exp_is_zero(mvc *sql, sql_exp *e); +extern int exp_is_not_null(mvc *sql, sql_exp *e); extern int exps_are_atoms(list *exps); extern int exp_has_func(sql_exp *e); extern int exp_unsafe(sql_exp *e); 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 @@ -2695,13 +2695,13 @@ exp_simplify_math( mvc *sql, sql_exp *e, sql_exp *le = l->h->data; sql_exp *re = l->h->next->data; /* 0*a = 0 */ - if (exp_is_atom(le) && exp_is_zero(sql, le)) { + if (exp_is_atom(le) && exp_is_zero(sql, le) && exp_is_not_null(sql, re)) { (*changes)++; exp_setname(sql->sa, le, exp_relname(e), exp_name(e)); return le; } /* a*0 = 0 */ - if (exp_is_atom(re) && exp_is_zero(sql, re)) { + if (exp_is_atom(re) && exp_is_zero(sql, re) && exp_is_not_null(sql, le)) { (*changes)++; exp_setname(sql->sa, re, exp_relname(e), exp_name(e)); return re; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list