Re: MonetDB: Oct2012 - fixed bug 3209, ie first crossproduct if the ...
Hai Niels, Your fix works in Feb2013, but not in Oct2012… Jennie On Dec 15, 2012, at 12:29, Niels Nes wrote:
Changeset: 8650dce52dd8 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8650dce52dd8 Modified Files: sql/server/rel_exp.c sql/server/rel_exp.h Branch: Oct2012 Log Message:
fixed bug 3209, ie first crossproduct if the join expression consists of functions (these should have been pushed down, whenever possible).
diffs (59 lines):
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c --- a/sql/server/rel_exp.c +++ b/sql/server/rel_exp.c @@ -1032,6 +1032,44 @@ exp_is_atom( sql_exp *e ) }
static int +exps_has_func( list *exps) +{ + node *n; + int has_func = 0; + + for(n=exps->h; n && !has_func; n=n->next) + has_func |= exp_has_func(n->data); + return has_func; +} + +int +exp_has_func( sql_exp *e ) +{ + switch (e->type) { + case e_atom: + return 0; + case e_convert: + return exp_has_func(e->l); + case e_func: + case e_aggr: + return 1; + case e_cmp: + if (e->flag == cmp_or) { + return (exps_has_func(e->l) || exps_has_func(e->r)); + } else if (e->flag == cmp_in || e->flag == cmp_notin || e->flag == cmp_filter) { + return (exp_has_func(e->l) || exps_has_func(e->r)); + } else { + return (exp_has_func(e->l) || exp_has_func(e->r) || + (e->f && exp_has_func(e->f))); + } + case e_column: + case e_psm: + return 0; + } + return 0; +} + +static int exp_key( sql_exp *e ) { if (e->name) diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h --- a/sql/server/rel_exp.h +++ b/sql/server/rel_exp.h @@ -105,6 +105,7 @@ extern int exp_is_eqjoin(sql_exp *e); extern int exp_is_correlation(sql_exp *e, sql_rel *r ); extern int exp_is_join_exp(sql_exp *e); extern int exp_is_atom(sql_exp *e); +extern int exp_has_func(sql_exp *e);
extern sql_exp *exps_bind_column( list *exps, char *cname, int *ambiguous); extern sql_exp *exps_bind_column2( list *exps, char *rname, char *cname); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list
_______________________________________________ developers-list mailing list developers-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/developers-list
participants (1)
-
Ying Zhang