Changeset: d076d57722f7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d076d57722f7
Modified Files:
sql/server/rel_optimize_exps.c
Branch: reducedstack
Log Message:
rewrite not()
diffs (48 lines):
diff --git a/sql/server/rel_optimize_exps.c b/sql/server/rel_optimize_exps.c
--- a/sql/server/rel_optimize_exps.c
+++ b/sql/server/rel_optimize_exps.c
@@ -521,7 +521,34 @@ simplify_isnull_isnotnull_equals_bool(vi
}
static inline sql_exp *
-simplify_not_over_equality_exp(visitor *v, sql_exp *e) {
+simplify_not(visitor *v, sql_exp *e)
+{
+ if (is_func(e->type)) {
+ sql_subfunc *f = e->f;
+ list *l = e->l;
+
+ if (f->func->s || !is_not_func(f) || list_length(l) != 1)
+ return e;
+
+ sql_exp *i = l->h->data;
+
+ if (is_compare(i->type)) {
+ if (is_anti(i))
+ reset_anti(i);
+ else
+ set_anti(i);
+ v->changes++;
+ return i;
+ }
+ v->changes++;
+ return exp_compare(v->sql->sa, i, exp_atom_bool(v->sql->sa, 0),
cmp_equal);
+ }
+ return e;
+}
+
+static inline sql_exp *
+simplify_not_over_equality_exp(visitor *v, sql_exp *e)
+{
if (!(is_compare(e->type) && (e->flag == cmp_equal || e->flag ==
cmp_notequal)))
return e;
sql_exp *l = e->l;
@@ -643,6 +670,8 @@ rel_simplify_predicates(visitor *v, sql_
return res;
}
}
+ if (is_func(e->type) && list_length(e->l) == 1 &&
is_not_func((sql_subfunc*)e->f))
+ return simplify_not(v, e);
if (is_func(e->type) && list_length(e->l) == 4 &&
is_casewhen_func((sql_subfunc*)e->f)) {
/* case x when y then a else b */
list *args = e->l;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]