Changeset: d28ccc6c79d7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d28ccc6c79d7
Modified Files:
Branch:
Log Message:
merge from feb2010
diffs (119 lines):
diff -r 64531233dab6 -r d28ccc6c79d7 sql/src/server/rel_select.mx
--- a/sql/src/server/rel_select.mx Mon May 17 14:29:46 2010 +0200
+++ b/sql/src/server/rel_select.mx Tue May 18 13:00:51 2010 +0200
@@ -2162,13 +2162,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 */
@@ -2185,7 +2189,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) {
@@ -2193,7 +2198,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);
diff -r 64531233dab6 -r d28ccc6c79d7 sql/src/server/sql_atom.mx
--- a/sql/src/server/sql_atom.mx Mon May 17 14:29:46 2010 +0200
+++ b/sql/src/server/sql_atom.mx Tue May 18 13:00:51 2010 +0200
@@ -555,6 +555,9 @@
return 0;
break;
case TYPE_int:
+#if SIZEOF_WRD == SIZEOF_INT
+ case TYPE_wrd:
+#endif
if (at->type->localtype == TYPE_bte)
a->data.val.ival = a->data.val.btval;
else if (at->type->localtype == TYPE_sht)
@@ -563,6 +566,9 @@
return 0;
break;
case TYPE_lng:
+#if SIZEOF_WRD == SIZEOF_LNG
+ case TYPE_wrd:
+#endif
if (at->type->localtype == TYPE_bte)
a->data.val.lval = a->data.val.btval;
else if (at->type->localtype == TYPE_sht)
@@ -597,6 +603,9 @@
return 0;
break;
case TYPE_int:
+#if SIZEOF_WRD == SIZEOF_INT
+ case TYPE_wrd:
+#endif
if (at->type->localtype == TYPE_bte)
a->data.val.ival = a->data.val.btval;
else if (at->type->localtype == TYPE_sht)
@@ -605,6 +614,9 @@
return 0;
break;
case TYPE_lng:
+#if SIZEOF_WRD == SIZEOF_LNG
+ case TYPE_wrd:
+#endif
if (at->type->localtype == TYPE_bte)
a->data.val.lval = a->data.val.btval;
else if (at->type->localtype == TYPE_sht)
@@ -676,6 +688,9 @@
return 0;
break;
case TYPE_int:
+#if SIZEOF_WRD == SIZEOF_INT
+ case TYPE_wrd:
+#endif
if (at->type->localtype == TYPE_bte)
a->data.val.ival = a->data.val.btval;
else if (at->type->localtype == TYPE_sht)
@@ -684,6 +699,9 @@
return 0;
break;
case TYPE_lng:
+#if SIZEOF_WRD == SIZEOF_LNG
+ case TYPE_wrd:
+#endif
if (at->type->localtype == TYPE_bte)
a->data.val.lval = a->data.val.btval;
else if (at->type->localtype == TYPE_sht)
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list