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

Reply via email to