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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list