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