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

Reply via email to