Changeset: 56de54b2cf2a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=56de54b2cf2a
Modified Files:
sql/server/rel_optimizer.c
Branch: default
Log Message:
some functions missed the case for handling in lists
diffs (67 lines):
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
@@ -1164,14 +1164,19 @@
return e;
case e_cmp:
if (e->flag == cmp_or) {
- list *l;
- list *r;
-
- l = exps_push_down(sql, e->l, f, t);
- r = exps_push_down(sql, e->r, f, t);
+ list *l = exps_push_down(sql, e->l, f, t);
+ list *r = exps_push_down(sql, e->r, f, t);
+
if (!l || !r)
return NULL;
return exp_or(sql->sa, l, r);
+ } else if (e->flag == cmp_in || e->flag == cmp_notin) {
+ sql_exp *l = _exp_push_down(sql, e->l, f, t);
+ list *r = exps_push_down(sql, e->r, f, t);
+
+ if (!l || !r)
+ return NULL;
+ return exp_in(sql->sa, l, r, e->flag);
} else {
l = _exp_push_down(sql, e->l, f, t);
r = _exp_push_down(sql, e->r, f, t);
@@ -1467,14 +1472,19 @@
return e;
case e_cmp:
if (e->flag == cmp_or) {
- list *l;
- list *r;
-
- l = exps_push_down_prj(sql, e->l, f, t);
- r = exps_push_down_prj(sql, e->r, f, t);
+ list *l = exps_push_down_prj(sql, e->l, f, t);
+ list *r = exps_push_down_prj(sql, e->r, f, t);
+
if (!l || !r)
return NULL;
return exp_or(sql->sa, l, r);
+ } else if (e->flag == cmp_in || e->flag == cmp_notin) {
+ sql_exp *l = exp_push_down_prj(sql, e->l, f, t);
+ list *r = exps_push_down_prj(sql, e->r, f, t);
+
+ if (!l || !r)
+ return NULL;
+ return exp_in(sql->sa, l, r, e->flag);
} else {
l = exp_push_down_prj(sql, e->l, f, t);
r = exp_push_down_prj(sql, e->r, f, t);
@@ -3183,6 +3193,13 @@
l = e->r;
for (n = l->h; n != NULL; n = n->next)
exp_mark_used(subrel, n->data);
+ } else if (e->flag == cmp_in || e->flag == cmp_notin) {
+ list *r = e->r;
+ node *n;
+
+ exp_mark_used(subrel, e->l);
+ for (n = r->h; n != NULL; n = n->next)
+ exp_mark_used(subrel, n->data);
} else {
exp_mark_used(subrel, e->l);
exp_mark_used(subrel, e->r);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list