Changeset: 1591d642835e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1591d642835e
Modified Files:
monetdb5/optimizer/opt_pushselect.c
sql/backends/monet5/sql_execute.c
sql/backends/monet5/sql_gencode.c
Branch: default
Log Message:
merged with Jun2016
diffs (109 lines):
diff --git a/monetdb5/optimizer/opt_pushselect.c
b/monetdb5/optimizer/opt_pushselect.c
--- a/monetdb5/optimizer/opt_pushselect.c
+++ b/monetdb5/optimizer/opt_pushselect.c
@@ -516,13 +516,14 @@ OPTpushselectImplementation(Client cntxt
int var = getArg(p, 1);
InstrPtr r = old[vars[var]];
- if (isSlice(r) && rslices[getArg(p,1)] != 0 &&
getArg(r, 0) == getArg(p, 1)) {
+ if (r && isSlice(r) && rslices[getArg(p,1)] != 0 &&
getArg(r, 0) == getArg(p, 1)) {
InstrPtr q = newAssignment(mb);
getArg(q, 0) = getArg(p, 0);
(void) pushArgument(mb, q, getArg(p, 2));
actions++;
freeInstruction(p);
+ old[i] = NULL;
continue;
}
} else if (p->argc >= 2 && slices[getArg(p, 1)] != 0) {
@@ -586,6 +587,7 @@ OPTpushselectImplementation(Client cntxt
u->typechk = TYPE_UNKNOWN;
pushInstruction(mb,u);
freeInstruction(p);
+ old[i] = NULL;
continue;
}
}
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
@@ -567,6 +567,11 @@ SQLengineIntern(Client c, backend *be)
#endif
if (c->curprg->def->stop == 1) {
+ if (mvc_status(m)) {
+ if (*m->errstr)
+ msg = createException(PARSE, "SQLparser", "%s",
m->errstr);
+ goto cleanup_engine;
+ }
sqlcleanup(be->mvc, 0);
return MAL_SUCCEED;
}
diff --git a/sql/backends/monet5/sql_gencode.c
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -2848,8 +2848,6 @@ backend_dumpproc(backend *be, Client c,
node *n;
backup = c->curprg;
-
- /* later we change this to a factory ? */
if (cq)
c->curprg = newFunction(userRef, putName(cq->name),
FUNCTIONsymbol);
else
@@ -2875,8 +2873,9 @@ backend_dumpproc(backend *be, Client c,
snprintf(arg, IDLENGTH, "A%d", argc);
a->varid = varid = newVariable(mb, arg,strlen(arg),
type);
curInstr = pushArgument(mb, curInstr, varid);
- if (curInstr == NULL)
- return NULL;
+ assert(curInstr);
+ if (curInstr == NULL)
+ goto cleanup;
setVarType(mb, varid, type);
setVarUDFtype(mb, 0);
}
@@ -2890,15 +2889,16 @@ backend_dumpproc(backend *be, Client c,
snprintf(arg, IDLENGTH, "A%d", argc);
varid = newVariable(mb, arg,strlen(arg), type);
curInstr = pushArgument(mb, curInstr, varid);
- if (curInstr == NULL)
- return NULL;
+ assert(curInstr);
+ if (curInstr == NULL)
+ goto cleanup;
setVarType(mb, varid, type);
setVarUDFtype(mb, varid);
}
}
- if (backend_dumpstmt(be, mb, s, 1, 1) < 0)
- return NULL;
+ if (backend_dumpstmt(be, mb, s, 1, 1) < 0)
+ goto cleanup;
// Always keep the SQL query around for monitoring
// if (m->history || QLOGisset()) {
@@ -2917,7 +2917,7 @@ backend_dumpproc(backend *be, Client c,
q = newStmt(mb, querylogRef, defineRef);
if (q == NULL) {
GDKfree(tt);
- return NULL;
+ goto cleanup;
}
q->token = REMsymbol; // will be patched
setVarType(mb, getArg(q, 0), TYPE_void);
@@ -2933,6 +2933,12 @@ backend_dumpproc(backend *be, Client c,
if (backup)
c->curprg = backup;
return curPrg;
+
+cleanup:
+ freeSymbol(curPrg);
+ if (backup)
+ c->curprg = backup;
+ return NULL;
}
void
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list