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 -- [email protected]
To unsubscribe send an email to [email protected]