Changeset: 46e4a05e82ac for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=46e4a05e82ac
Modified Files:
Branch:
Log Message:
fix bug #2535 (handle in selection reversed predicates)
diffs (56 lines):
diff -r 1ec3f6727269 -r 46e4a05e82ac sql/src/server/rel_select.mx
--- a/sql/src/server/rel_select.mx Tue May 18 12:54:12 2010 +0200
+++ b/sql/src/server/rel_select.mx Tue May 18 12:56:19 2010 +0200
@@ -2168,13 +2168,17 @@
are correlations with the outer relation */
sql_rel *r = rel_subquery(sql, NULL, ro, ek);
- if (!r && sql->session->status != -ERR_AMBIGUOUS) { /*
correlation, ie return new relation */
+ /* correlation, ie return new relation */
+ if (!r && sql->session->status != -ERR_AMBIGUOUS) {
+
+
sql_exp *e;
/* reset error */
sql->session->status = 0;
sql->errstr[0] = 0;
- r = rel_subquery(sql, *rel, ro, ek);
+ if (!r)
+ r = rel_subquery(sql, *rel, ro, ek);
/* get inner queries result value, ie
get last expression of r */
@@ -2191,7 +2195,8 @@
rs = exp_atom_bool(0);
return rel_binop_(sql, ls, rs, NULL,
"=", 0);
}
- } else if (r) {
+ } else if (r && f != sql_sel) {
+ sql_rel *l = *rel;
rel_setsubquery(r);
rs = rel_lastexp(sql, r);
if (r->card > CARD_ATOM) {
@@ -2199,7 +2204,21 @@
rs = exp_aggr1(rs, zero_or_one, 0, 0,
CARD_ATOM, 0);
}
- *rel = rel_crossproduct(*rel, r, op_join);
+ *rel = rel_crossproduct(l, r, op_join);
+ } else if (r) {
+ sql_rel *l = *rel;
+ list *exps = rel_projections(sql, l, NULL, 0,
1);
+
+ rel_project_add_exp(sql, l, ls);
+ rel_setsubquery(r);
+ rs = rel_lastexp(sql, r);
+ if (r->card > CARD_ATOM) {
+ sql_subaggr *zero_or_one =
sql_bind_aggr(sql->session->schema, "zero_or_one", exp_subtype(rs));
+
+ rs = exp_aggr1(rs, zero_or_one, 0, 0,
CARD_ATOM, 0);
+ }
+ *rel = rel_crossproduct(l, r, op_join);
+ *rel = rel_project(*rel, exps);
}
if (!rs) {
exp_destroy(ls);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list