Changeset: 3c74e4b2f5b8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/3c74e4b2f5b8
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/server/rel_unnest.c
Branch: default
Log Message:

delay fetching from bats until we need the value in return or exception


diffs (53 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1149,9 +1149,8 @@ exp_bin(backend *be, sql_exp *e, stmt *l
                                                list_append(l, const_column(be, 
(stmt*)n->data));
                                        r = stmt_list(be, l);
                                } else if (r->type == st_table && e->card == 
CARD_ATOM) { /* fetch value */
-                                       sql_rel *ll = (sql_rel*) l->l;
                                        r = lst->op4.lval->h->data;
-                                       if (!r->aggr && lastexp(ll)->card > 
CARD_ATOM) /* if the cardinality is atom, no fetch call needed */
+                                       if (!r->aggr) /* if the cardinality is 
atom, no fetch call needed */
                                                r = stmt_fetch(be, r);
                                }
                                if (r->type == st_list)
@@ -1204,6 +1203,8 @@ exp_bin(backend *be, sql_exp *e, stmt *l
                        stmt *cond = exp_bin(be, e->l, left, right, grp, ext, 
cnt, sel, 0, 0, push);
                        if (!cond)
                                return NULL;
+                       if (cond->nrcols)
+                               cond = stmt_fetch(be, cond);
                        return stmt_exception(be, cond, (const char *) e->r, 0);
                }
                break;
@@ -2194,8 +2195,6 @@ rel2bin_table(backend *be, sql_rel *rel,
                        const char *rnme = exp_relname(c);
 
                        s = stmt_alias(be, s, rnme, nme);
-                       if (fr->card <= CARD_ATOM) /* single value, get result 
from bat */
-                               s = stmt_fetch(be, s);
                        list_append(l, s);
                }
                sub = stmt_list(be, l);
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
@@ -3038,13 +3038,10 @@ rewrite_compare(visitor *v, sql_rel *rel
                        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 (is_values(re) && 
list_length(re->f) == 1 && !is_values(le)) {
-                                                       list *exps = re->f;
-                                                       re = exps->h->data;
-                                               }
+                                       if (is_values(ire) && 
list_length(ire->f) == 1 && !is_values(le)) {
+                                               list *exps = ire->f;
+                                               re = exps->h->data;
+                                               rsq = 
exp_rel_get_rel(v->sql->sa, re);
                                        }
                                }
                                if (rsq)
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to