Changeset: 7ea943788c59 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7ea943788c59 Modified Files: sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_execute.c sql/server/rel_select.c sql/server/rel_semantic.c Branch: Apr2019 Log Message:
Pop SQL stack frames before returning. diffs (91 lines): diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -3429,19 +3429,20 @@ sql_insert_triggers(backend *be, sql_tab if(!stack_push_frame(sql, "OLD-NEW")) return 0; - if (trigger->event == 0 && trigger->time == time) { - stmt *s = NULL; + if (trigger->event == 0 && trigger->time == time) { const char *n = trigger->new_name; /* add name for the 'inserted' to the stack */ if (!n) n = "new"; - if(!sql_stack_add_inserted(sql, n, t, updates)) + if(!sql_stack_add_inserted(sql, n, t, updates)) { + stack_pop_frame(sql); return 0; - s = sql_parse(be, sql->sa, trigger->statement, m_instantiate); - - if (!s) + } + if (!sql_parse(be, sql->sa, trigger->statement, m_instantiate)) { + stack_pop_frame(sql); return 0; + } } stack_pop_frame(sql); } diff --git a/sql/backends/monet5/sql_execute.c b/sql/backends/monet5/sql_execute.c --- a/sql/backends/monet5/sql_execute.c +++ b/sql/backends/monet5/sql_execute.c @@ -960,8 +960,10 @@ RAstatement2(Client cntxt, MalBlkPtr mb, p = strchr(p, (int)'('); *p++ = 0; tnme = sa_strdup(m->sa, tnme); - if (!tnme) + if (!tnme) { + stack_pop_frame(m); return createException(SQL,"RAstatement2",SQLSTATE(HY001) MAL_MALLOC_FAIL); + } d = strtol(p, &p, 10); p++; /* skip , */ s = strtol(p, &p, 10); @@ -974,11 +976,15 @@ RAstatement2(Client cntxt, MalBlkPtr mb, * */ if (nr >= 0) { append(ops, exp_atom_ref(m->sa, nr, &t)); - if(!sql_set_arg(m, nr, a)) + if(!sql_set_arg(m, nr, a)) { + stack_pop_frame(m); return createException(SQL,"RAstatement2",SQLSTATE(HY001) MAL_MALLOC_FAIL); + } } else { - if(!stack_push_var(m, vnme+1, &t)) + if(!stack_push_var(m, vnme+1, &t)) { + stack_pop_frame(m); return createException(SQL,"RAstatement2",SQLSTATE(HY001) MAL_MALLOC_FAIL); + } append(ops, exp_var(m->sa, sa_strdup(m->sa, vnme+1), &t, m->frame)); } c = strchr(p, (int)','); 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 @@ -314,6 +314,7 @@ rel_with_query(mvc *sql, symbol *q ) sql_rel *nrel; if (frame_find_var(sql, name)) { + stack_pop_frame(sql); return sql_error(sql, 01, SQLSTATE(42000) "Variable '%s' already declared", name); } nrel = rel_semantic(sql, sym); diff --git a/sql/server/rel_semantic.c b/sql/server/rel_semantic.c --- a/sql/server/rel_semantic.c +++ b/sql/server/rel_semantic.c @@ -205,9 +205,11 @@ rel_semantic(mvc *sql, symbol *s) for (d = s->data.lval->h; d; d = d->next) { symbol *sym = d->data.sym; sql_rel *nr = rel_semantic(sql, sym); - - if (!nr) + + if (!nr) { + stack_pop_frame(sql); return NULL; + } if (r) r = rel_list(sql->sa, r, nr); else _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list