Changeset: fbe6baf096f2 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fbe6baf096f2
Modified Files:
sql/backends/monet5/rel_bin.c
Branch: Feb2013
Log Message:
backported fix for bug 3245
diffs (86 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
@@ -2432,14 +2432,21 @@ rel2bin_select( mvc *sql, sql_rel *rel,
if (!sub)
return NULL;
sub = row2cols(sql, sub);
- } else {
+ }
+ if (!sub && !predicate)
predicate = rel2bin_predicate(sql);
- }
+ else if (!predicate)
+ predicate = stmt_const(sql->sa, bin_first_column(sql->sa, sub),
stmt_bool(sql->sa, 1));
if (!rel->exps->h) {
if (sub)
return sub;
return predicate;
}
+ if (!sub && predicate) {
+ list *l = sa_list(sql->sa);
+ append(l, predicate);
+ sub = stmt_list(sql->sa, l);
+ }
/* handle possible index lookups */
/* expressions are in index order ! */
if (sub && (en = rel->exps->h) != NULL) {
@@ -2460,10 +2467,8 @@ rel2bin_select( mvc *sql, sql_rel *rel,
assert(0);
return NULL;
}
- if (s->nrcols == 0){
- if (!predicate)
- predicate = rel2bin_predicate(sql);
- predicate = stmt_uselect(sql->sa, predicate, s,
cmp_equal, NULL);
+ if (s->nrcols == 0){
+ sel = stmt_uselect(sql->sa, predicate, s, cmp_equal,
sel);
} else if (e->type != e_cmp) {
sel = stmt_uselect(sql->sa, s, stmt_bool(sql->sa, 1),
cmp_equal, NULL);
} else {
@@ -2471,14 +2476,6 @@ rel2bin_select( mvc *sql, sql_rel *rel,
}
}
- if (predicate && sel) {
- sel = stmt_reverse(sql->sa, sel);
- sel = stmt_join(sql->sa, sel, predicate, cmp_all);
- sel = stmt_result(sql->sa, sel, 0);
- predicate = NULL;
- if (!sub)
- predicate = sel;
- }
/* construct relation */
l = sa_list(sql->sa);
if (sub && sel) {
@@ -2491,22 +2488,6 @@ rel2bin_select( mvc *sql, sql_rel *rel,
col = stmt_project(sql->sa, sel, col);
list_append(l, col);
}
- } else if (sub && predicate) {
- stmt *h = NULL;
- n = sub->op4.lval->h;
- h = stmt_join(sql->sa, column(sql->sa, n->data), predicate,
cmp_all);
- h = stmt_result(sql->sa, h, 0);
- for( n = sub->op4.lval->h; n; n = n->next ) {
- stmt *col = n->data;
-
- if (col->nrcols == 0) /* constant */
- col = stmt_const(sql->sa, h, col);
- else
- col = stmt_project(sql->sa, h, col);
- list_append(l, col);
- }
- } else if (predicate) {
- list_append(l, predicate);
}
return stmt_list(sql->sa, l);
}
@@ -2683,7 +2664,6 @@ rel2bin_sample( mvc *sql, sql_rel *rel,
sc = column(sql->sa, sc);
sample = stmt_sample(sql->sa, stmt_alias(sql->sa, sc, tname,
cname),s);
- sample = stmt_reverse(sql->sa, stmt_mark_tail(sql->sa, sample,
0));
for ( ; n; n = n->next) {
stmt *sc = n->data;
char *cname = column_name(sql->sa, sc);
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list