Changeset: 94b5d2589cba for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=94b5d2589cba
Modified Files:
sql/server/rel_exp.c
sql/server/rel_exp.h
sql/server/rel_optimizer.c
Branch: Dec2016
Log Message:
fix bug 6330, ie handle null*0 in times Zero optimization.
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
@@ -1295,6 +1295,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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list