Changeset: 86079a1a6efe for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=86079a1a6efe
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_execute.c
sql/server/rel_semantic.c
sql/server/rel_updates.c
Branch: Jun2020
Log Message:
Reset more mvc values at rel_parse calls
diffs (145 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
@@ -1435,11 +1435,18 @@ rel_parse_value(backend *be, char *query
if (m->session->status || m->errstr[0]) {
int status = m->session->status;
- memcpy(o.errstr, m->errstr, sizeof(o.errstr));
+ strcpy(o.errstr, m->errstr);
*m = o;
m->session->status = status;
} else {
+ int label = m->label;
+
+ while (m->topvars > o.topvars) {
+ if (m->vars[--m->topvars].name)
+ c_delete(m->vars[m->topvars].name);
+ }
*m = o;
+ m->label = label;
}
return s;
}
@@ -3595,19 +3602,23 @@ sql_parse(backend *be, sql_allocator *sa
sa_destroy(m->sa);
m->sym = NULL;
{
+ int label = m->label;
int status = m->session->status;
int sizevars = m->sizevars, topvars = m->topvars;
sql_var *vars = m->vars;
/* cascade list maybe removed */
list *cascade_action = m->cascade_action;
+ char *mquery = m->query;
strcpy(o->errstr, m->errstr);
*m = *o;
+ m->label = label;
m->sizevars = sizevars;
m->topvars = topvars;
m->vars = vars;
m->session->status = status;
m->cascade_action = cascade_action;
+ m->query = mquery;
}
_DELETE(o);
return sq;
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
@@ -448,20 +448,16 @@ SQLescapeString(str s)
str
SQLstatementIntern(Client c, str *expr, str nme, bit execute, bit output,
res_table **result)
{
- int status = 0;
- int err = 0;
+ int status = 0, err = 0, oldvtop, oldstop = 1, inited = 0, label, ac,
sizevars, topvars;
mvc *o, *m;
- int ac, sizevars, topvars;
sql_var *vars;
- int oldvtop, oldstop = 1;
buffer *b;
- char *n;
+ char *n, *mquery;
bstream *bs;
stream *buf;
str msg = MAL_SUCCEED;
backend *be, *sql = (backend *) c->sqlcontext;
size_t len = strlen(*expr);
- int inited = 0;
#ifdef _SQL_COMPILE
mnstr_printf(c->fdout, "#SQLstatement:%s\n", *expr);
@@ -700,17 +696,21 @@ endofcompile:
m->sa = NULL;
m->sym = NULL;
/* variable stack maybe resized, ie we need to keep the new stack */
+ label = m->label;
status = m->session->status;
sizevars = m->sizevars;
topvars = m->topvars;
vars = m->vars;
+ mquery = m->query;
*m = *o;
_DELETE(o);
+ m->label = label;
m->sizevars = sizevars;
m->topvars = topvars;
m->vars = vars;
m->session->status = status;
m->session->auto_commit = ac;
+ m->query = mquery;
if (inited)
SQLresetClient(c);
return msg;
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
@@ -94,7 +94,7 @@ rel_parse(mvc *m, sql_schema *s, char *q
if (m->session->status || m->errstr[0]) {
int status = m->session->status;
- memcpy(o.errstr, m->errstr, sizeof(o.errstr));
+ strcpy(o.errstr, m->errstr);
*m = o;
m->session->status = status;
} else {
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
@@ -2043,7 +2043,7 @@ rel_parse_val(mvc *m, char *query, char
m->user_id = USER_MONETDB;
(void) sqlparse(m);
-
+
/* get out the single value as we don't want an enclosing projection! */
if (m->sym && m->sym->token == SQL_SELECT) {
SelectNode *sn = (SelectNode *)m->sym;
@@ -2061,18 +2061,21 @@ rel_parse_val(mvc *m, char *query, char
m->sym = NULL;
o.vars = m->vars; /* may have been realloc'ed */
o.sizevars = m->sizevars;
+ o.query = m->query;
if (m->session->status || m->errstr[0]) {
int status = m->session->status;
- char errstr[ERRSIZE];
- strcpy(errstr, m->errstr);
+ strcpy(o.errstr, m->errstr);
*m = o;
m->session->status = status;
- strcpy(m->errstr, errstr);
} else {
int label = m->label;
+
+ while (m->topvars > o.topvars) {
+ if (m->vars[--m->topvars].name)
+ c_delete(m->vars[m->topvars].name);
+ }
*m = o;
-
m->label = label;
}
return e;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list