Changeset: 043bdedcd293 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=043bdedcd293
Modified Files:
        sql/src/common/sql_types.mx
        sql/src/server/rel_bin.mx
        sql/src/server/rel_exp.mx
        sql/src/server/rel_optimizer.mx
        sql/src/server/sql_mvc.mx
Branch: default
Log Message:

merge from Jun2010


diffs (133 lines):

diff -r 6acbf14b23fa -r 043bdedcd293 sql/src/common/sql_types.mx
--- a/sql/src/common/sql_types.mx       Mon Aug 16 17:53:58 2010 +0200
+++ b/sql/src/common/sql_types.mx       Tue Aug 17 08:47:36 2010 +0200
@@ -378,7 +378,7 @@
 sql_subtype *
 sql_bind_subtype(char *name, unsigned int digits, unsigned int scale)
 {
-       sql_subtype *res = NEW(sql_subtype);
+       sql_subtype *res = ZNEW(sql_subtype);
        
        if (!sql_find_subtype(res, name, digits, scale)) {
                _DELETE(res);
diff -r 6acbf14b23fa -r 043bdedcd293 sql/src/server/rel_bin.mx
--- a/sql/src/server/rel_bin.mx Mon Aug 16 17:53:58 2010 +0200
+++ b/sql/src/server/rel_bin.mx Tue Aug 17 08:47:36 2010 +0200
@@ -638,8 +638,13 @@
                                                        tail_type(l), 
tail_type(r));
                                        assert(f);
                                        s = stmt_binop(l, r, f);
-                               } else
+                               } else {
+                                       /* this can still be a join (as 
relationa algebra and single value subquery results still means joins */
                                        s = stmt_uselect(l, r, 
(comp_type)e->flag);
+                                       /* so we still need the proper side */
+                                       if (swapped)
+                                               s = stmt_reverse(s);
+                               }
                        }
                }
                if (is_anti(e))
diff -r 6acbf14b23fa -r 043bdedcd293 sql/src/server/rel_exp.mx
--- a/sql/src/server/rel_exp.mx Mon Aug 16 17:53:58 2010 +0200
+++ b/sql/src/server/rel_exp.mx Tue Aug 17 08:47:36 2010 +0200
@@ -694,13 +694,52 @@
        return -1;
 }
 
+static int
+exp_is_complex( sql_exp *e )
+{
+       switch (e->type) {
+       case e_atom:
+               return 0;
+       case e_convert:
+               return exp_is_complex(e->l);
+       case e_func:
+       case e_aggr:
+       {       
+               int r = (e->card != CARD_ATOM);
+               node *n;
+               list *l = e->l;
+
+               if (r && l)
+                       for (n = l->h; n; n = n->next) 
+                               r |= exp_is_complex(n->data);
+               return r;
+       }
+       case e_column:
+       case e_cmp:
+               return 0;
+       }
+       return 0;
+}
+
+static int
+complex_select(sql_exp *e)
+{
+       sql_exp *l = e->l, *r = e->r;
+
+       if (l->card == CARD_ATOM || r->card == CARD_ATOM) 
+               return 1;
+       if (exp_is_complex(l) || exp_is_complex(r))
+               return 1;
+       return 0;
+}
+
 int
 exp_is_join(sql_exp *e)
 {
        /* only simple compare expressions, ie not or lists
                or range expressions (e->f)
         */ 
-       if (e->type == e_cmp && e->flag != cmp_or && e->l && e->r && !e->f && 
e->card >= CARD_AGGR)
+       if (e->type == e_cmp && e->flag != cmp_or && e->l && e->r && !e->f && 
e->card >= CARD_AGGR && !complex_select(e))
                return 0;
        return -1;
 }
diff -r 6acbf14b23fa -r 043bdedcd293 sql/src/server/rel_optimizer.mx
--- a/sql/src/server/rel_optimizer.mx   Mon Aug 16 17:53:58 2010 +0200
+++ b/sql/src/server/rel_optimizer.mx   Tue Aug 17 08:47:36 2010 +0200
@@ -566,7 +566,7 @@
                        list *lexps = list_map(eje, lr, (fmap) &joinexp_col);
                        list *rexps = list_map(eje, rr, (fmap) &joinexp_col);
                        list *lcols, *rcols;
-
+                       
                        lr = find_basetable(lr);
                        rr = find_basetable(rr);
                        if (!lr || !rr) {
diff -r 6acbf14b23fa -r 043bdedcd293 sql/src/server/sql_mvc.mx
--- a/sql/src/server/sql_mvc.mx Mon Aug 16 17:53:58 2010 +0200
+++ b/sql/src/server/sql_mvc.mx Tue Aug 17 08:47:36 2010 +0200
@@ -1489,6 +1489,7 @@
        sql->vars[sql->topvars].name = _strdup(name);
        sql->vars[sql->topvars].value.vtype = 0;
        sql->vars[sql->topvars].type = *type;
+       assert(sql->vars[sql->topvars].type.comp_type == NULL);
        sql->vars[sql->topvars].view = 0;
        sql->topvars++;
 }
@@ -1504,6 +1505,7 @@
        sql->vars[sql->topvars].name = _strdup(name);
        sql->vars[sql->topvars].value.vtype = 0;
        sql->vars[sql->topvars].type = *type;
+       assert(sql->vars[sql->topvars].type.comp_type != NULL);
        sql->vars[sql->topvars].view = 0;
        sql->topvars++;
 }
@@ -1560,6 +1562,8 @@
        sql->vars[sql->topvars].s = NULL;
        sql->vars[sql->topvars].name = NULL;
        sql->vars[sql->topvars].value.vtype = 0;
+       sql->vars[sql->topvars].view = 0;
+       sql->vars[sql->topvars].type.comp_type = NULL;
        if (name)
                sql->vars[sql->topvars].name = _strdup(name);
        sql->topvars++;
diff -r 6acbf14b23fa -r 043bdedcd293 
sql/src/test/BugTracker/Tests/connect_crash.SF-1436626.timeout
--- a/sql/src/test/BugTracker/Tests/connect_crash.SF-1436626.timeout    Mon Aug 
16 17:53:58 2010 +0200
+++ b/sql/src/test/BugTracker/Tests/connect_crash.SF-1436626.timeout    Tue Aug 
17 08:47:36 2010 +0200
@@ -1,1 +1,1 @@
-0.2
+0.4
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to