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

Reply via email to