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

Reply via email to