Changeset: 50b8854b9af7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=50b8854b9af7
Modified Files:
        sql/server/rel_psm.c
        sql/server/rel_select.c
        sql/server/rel_updates.c
Branch: Nov2019
Log Message:

Added more defensive exp_labels before exp_ref


diffs (85 lines):

diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -492,8 +492,11 @@ rel_psm_return( sql_query *query, sql_su
 
                        if (!cname)
                                cname = sa_strdup(sql->sa, number2name(name, 
sizeof(name), ++sql->label));
-                       if (!isproject) 
+                       if (!isproject) {
+                               if (!exp_name(e))
+                                       exp_label(sql->sa, e, ++sql->label);
                                e = exp_ref(sql->sa, e);
+                       }
                        e = rel_check_type(sql, &ce->type, oexps_rel, e, 
type_equal);
                        if (!e)
                                return NULL;
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -4928,6 +4928,8 @@ rel_order_by(sql_query *query, sql_rel *
                                                e = exps_get_exp(rel->exps, nr);
                                                if (!e)
                                                        return sql_error(sql, 
02, SQLSTATE(42000) "SELECT: the order by column number (%d) is not in the 
number of projections range (%d)", nr, list_length(rel->exps));
+                                               if (!exp_name(e))
+                                                       exp_label(sql->sa, e, 
++sql->label);
                                                e = exp_ref(sql->sa, e);
                                                /* do not cache this query */
                                                if (e)
@@ -5460,6 +5462,8 @@ rel_rankop(sql_query *query, sql_rel **r
                                lr = p->l;
                        }
                        in = lr->exps->h->data;
+                       if (!exp_name(in))
+                               exp_label(sql->sa, in, ++sql->label);
                        in = exp_ref(sql->sa, in);
                        if(!in)
                                return NULL;
@@ -5509,6 +5513,8 @@ rel_rankop(sql_query *query, sql_rel **r
                                        lr = p->l;
                                }
                                in = lr->exps->h->data;
+                               if (!exp_name(in))
+                                       exp_label(sql->sa, in, ++sql->label);
                                in = exp_ref(sql->sa, in);
                                append(fargs, in);
                                append(fargs, exp_atom_bool(sql->sa, 0)); 
//don't ignore nills
@@ -5747,6 +5753,8 @@ rel_value_exp2(sql_query *query, sql_rel
                if (sql->errstr[0] != '\0')
                        return NULL;
                if (exp) {
+                       if (!exp_name(exp))
+                               exp_label(sql->sa, exp, ++sql->label);
                        sql_exp *res = exp_ref(sql->sa, exp);
                        if(se->token == SQL_AGGR) {
                                dlist *l = se->data.lval;
diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c
--- a/sql/server/rel_updates.c
+++ b/sql/server/rel_updates.c
@@ -1495,6 +1495,8 @@ merge_into_table(sql_query *query, dlist
 
                                //select bt values which are not null (they had 
a match in the join)
                                project_first = 
extra_project->exps->h->next->data; // this expression must come from bt!!
+                               if (!exp_name(project_first))
+                                       exp_label(sql->sa, project_first, 
++sql->label);
                                project_first = exp_ref(sql->sa, project_first);
                                nils = rel_unop_(query, extra_project, 
project_first, NULL, "isnull", card_value);
                                extra_select = rel_select(sql->sa, 
extra_project, exp_compare(sql->sa, nils, exp_atom_bool(sql->sa, 1), 
cmp_notequal));
@@ -1523,6 +1525,8 @@ merge_into_table(sql_query *query, dlist
 
                                //select bt values which are not null (they had 
a match in the join)
                                project_first = 
extra_project->exps->h->next->data; // this expression must come from bt!!
+                               if (!exp_name(project_first))
+                                       exp_label(sql->sa, project_first, 
++sql->label);
                                project_first = exp_ref(sql->sa, project_first);
                                nils = rel_unop_(query, extra_project, 
project_first, NULL, "isnull", card_value);
                                extra_select = rel_select(sql->sa, 
extra_project, exp_compare(sql->sa, nils, exp_atom_bool(sql->sa, 1), 
cmp_notequal));
@@ -1559,6 +1563,8 @@ merge_into_table(sql_query *query, dlist
 
                        //select bt values which are null (they didn't have 
match in the join)
                        project_first = extra_project->exps->h->next->data; // 
this expression must come from bt!!
+                       if (!exp_name(project_first))
+                               exp_label(sql->sa, project_first, ++sql->label);
                        project_first = exp_ref(sql->sa, project_first);
                        nils = rel_unop_(query, extra_project, project_first, 
NULL, "isnull", card_value);
                        extra_select = rel_select(sql->sa, extra_project, 
exp_compare(sql->sa, nils, exp_atom_bool(sql->sa, 1), cmp_equal));
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to