Changeset: 09dcf90b2ddc for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/09dcf90b2ddc Modified Files: sql/ChangeLog.Dec2023 sql/server/rel_distribute.c sql/server/rel_exp.c Branch: Dec2023 Log Message:
Fixed issue where equal column aliases where created. diffs (74 lines): diff --git a/sql/ChangeLog.Dec2023 b/sql/ChangeLog.Dec2023 --- a/sql/ChangeLog.Dec2023 +++ b/sql/ChangeLog.Dec2023 @@ -1,3 +1,7 @@ # ChangeLog file for sql # This file is updated with Maddlog +* Tue Mar 19 2024 Sjoerd Mullender <sjo...@acm.org> +- Fixed issue where equal column aliases where created. When those + aliases where parsed on the remote side it could give crashes. + diff --git a/sql/server/rel_distribute.c b/sql/server/rel_distribute.c --- a/sql/server/rel_distribute.c +++ b/sql/server/rel_distribute.c @@ -24,6 +24,30 @@ typedef struct rmt_prop_state { bool no_rmt_branch_rpl_leaf; } rps; +static sql_rel* +rel_unique_exps(mvc *sql, sql_rel *rel) +{ + list *l; + + if (!is_project(rel->op)) + return rel; + l = sa_list(sql->sa); + for (node *n = rel->exps->h; n; n = n->next) { + sql_exp *e = n->data; + if (e->type == e_column) { + const char *name = exp_name(e); + const char *rname = exp_relname(e); + + /* If there are two identical expression names, there will be ambiguity */ + if (name && rname && exps_bind_column2(l, rname, name, NULL)) + exp_label(sql->sa, e, ++sql->label); + } + append(l,e); + } + rel->exps = l; + return rel; +} + static int has_remote_or_replica( sql_rel *rel ) { @@ -497,6 +521,7 @@ rel_remote_func_(visitor *v, sql_rel *re if (find_prop(rel->p, PROP_REMOTE) != NULL) { list *exps = rel_projections(v->sql, rel, NULL, 1, 1); + rel = rel_unique_exps(v->sql, rel); /* remove any duplicate results (aliases) */ rel = rel_relational_func(v->sql->sa, rel, exps); } return rel; 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 @@ -2641,6 +2641,8 @@ exps_bind_column2(list *exps, const char *multiple = 1; if (!res) res = e; + if (res && res->alias.label) /* aliases maybe used multiple times without problems */ + return res; } } return res; @@ -2653,6 +2655,8 @@ exps_bind_column2(list *exps, const char *multiple = 1; if (!res) res = e; + if (res && res->alias.label) /* aliases maybe used multiple times without problems */ + return res; } } } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org