Changeset: f70db9773f5d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f70db9773f5d
Modified Files:
        sql/server/rel_exp.c
        sql/server/rel_unnest.c
Branch: default
Log Message:

handle simple value list directly within the rewrite_compare


diffs (43 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
@@ -1672,7 +1672,7 @@ rel_find_exp_and_corresponding_rel_(sql_
                                ne = e;
                } else if ((!list_empty(rel->exps) && (is_project(rel->op) || 
is_base(rel->op))) ||
                                        (!list_empty(rel->attr) && 
is_join(rel->op))) {
-                       list *l = rel->attr ? rel->attr : rel->exps; 
+                       list *l = rel->attr ? rel->attr : rel->exps;
                        if (e->l) {
                                ne = exps_bind_column2(l, e->l, e->r, NULL);
                        } else {
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -2795,8 +2795,17 @@ rewrite_compare(visitor *v, sql_rel *rel
 
                        if (exp_has_rel(re))
                                rsq = exp_rel_get_rel(v->sql->sa, re); /* get 
subquery */
-                       if (rsq)
-                               re = exp_rel_update_exp(v->sql, re);
+                       if (rsq) {
+                               if (!lsq && is_simple_project(rsq->op) && 
!rsq->l) {
+                                       sql_exp *ire = rsq->exps->h->data;
+                                       if (is_values(ire) && 
list_length(ire->f) == 1) {
+                                               rsq = NULL;
+                                               re = ire;
+                                       }
+                               }
+                               if (rsq)
+                                       re = exp_rel_update_exp(v->sql, re);
+                       }
 
                        if (is_values(le)) /* exp_values */
                                is_tuple = 1;
@@ -2820,7 +2829,6 @@ rewrite_compare(visitor *v, sql_rel *rel
                        if (!is_tuple && is_values(re) && 
!exps_have_rel_exp(re->f)) { /* exp_values */
                                list *vals = re->f;
 
-                               assert(0);
                                if (depth == 0 && is_select(rel->op)) {
                                        v->changes++;
                                        return exp_in_compare(v->sql, &le, 
vals, is_anyequal(sf));
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to