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

Reply via email to