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