Changeset: 87a67db276da for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=87a67db276da Modified Files: clients/mapiclient/stethoscope.c configure.ag monetdb5/mal/mal_interpreter.c monetdb5/mal/mal_listing.c monetdb5/mal/mal_profiler.c monetdb5/mal/mal_scenario.c monetdb5/mal/mal_session.c monetdb5/modules/kernel/batmmath.c monetdb5/modules/kernel/mmath.c monetdb5/optimizer/opt_dataflow.c sql/common/sql_mem.c sql/include/sql_mem.h sql/server/rel_dump.c sql/server/rel_optimizer.c sql/server/rel_schema.c sql/server/rel_semantic.c tools/merovingian/daemon/Makefile.ag Branch: default Log Message:
Merge with Jul2017 branch.
diffs (truncated from 667 to 300 lines):
diff --git a/clients/mapiclient/stethoscope.c b/clients/mapiclient/stethoscope.c
--- a/clients/mapiclient/stethoscope.c
+++ b/clients/mapiclient/stethoscope.c
@@ -425,9 +425,9 @@ main(int argc, char **argv)
printf("%s", response);
if(json) {
if(trace != NULL) {
- fprintf(trace, "%s", response);
+ fprintf(trace, "%s", response + len);
} else {
- printf("%s", response);
+ printf("%s", response + len);
fflush(stdout);
}
}
diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -738,8 +738,12 @@ AS_VAR_IF([enable_sanitizer], [no], [],
AS_VAR_IF([enable_sanitizer], [yes],
[MCHECK_ADD_FLAG([-fsanitize=address])],
[MCHECK_ADD_FLAG([-fsanitize=$enable_sanitizer])
- AS_VAR_IF([enable_sanitizer], [thread],
+ AS_VAR_IF([enable_sanitizer], [thread],
[X_CFLAGS="$X_CFLAGS
-DNO_ATOMIC_INSTRUCTIONS"])])
+ AS_CASE([$X_CFLAGS],
+ [*-fsanitize=*],
+ [],
+ [AC_MSG_ERROR([--enable-sanitizer not supported
by this compiler])])
MCHECK_ADD_FLAG([-fno-omit-frame-pointer])],
[AC_MSG_ERROR([--enable-sanitizer only supported with GCC])])])
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -592,7 +592,7 @@ str runMALsequence(Client cntxt, MalBlkP
* garbage collected are identified. In the post-execution
* phase they are removed.
*/
- for (i = 0; i < pci->retc; i++)
+ for (i = 0; i < pci->retc; i++)
backup[i] = stk->stk[getArg(pci, i)];
if (garbageControl(pci)) {
diff --git a/monetdb5/mal/mal_listing.c b/monetdb5/mal/mal_listing.c
--- a/monetdb5/mal/mal_listing.c
+++ b/monetdb5/mal/mal_listing.c
@@ -412,8 +412,9 @@ shortRenderingTerm(MalBlkPtr mb, MalStkP
ValRecord *val;
char *cv =0;
int varid = getArg(p,idx);
+ size_t len = BUFSIZ;
- s= GDKmalloc(BUFSIZ);
+ s= GDKmalloc(len);
if( s == NULL)
return NULL;
*s = 0;
@@ -421,7 +422,17 @@ shortRenderingTerm(MalBlkPtr mb, MalStkP
if( isVarConstant(mb,varid) ){
val =&getVarConstant(mb, varid);
VALformat(&cv, val);
- snprintf(s,BUFSIZ,"%s",cv);
+ if (strlen(cv) >= len) {
+ char *nbuf;
+ len = strlen(cv);
+ nbuf = GDKrealloc(s, len + 1);
+ if (nbuf == NULL) {
+ GDKfree(s);
+ return NULL;
+ }
+ s = nbuf;
+ }
+ snprintf(s,len + 1,"%s",cv);
} else {
val = &stk->stk[varid];
VALformat(&cv, val);
diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -280,7 +280,7 @@ renderProfilerEvent(MalBlkPtr mb, MalStk
#else
logadd("\"prereq\":%s]%s", prereq, prettify);
#endif
-
+
/* EXAMPLE MAL statement argument decomposition
* The eventparser may assume this layout for ease of parsing
{
@@ -306,14 +306,14 @@ This information can be used to determin
if( j == pci->retc ){
logadd("],%s\"arg\":[",prettify);
- }
+ }
logadd("{");
logadd("\"index\":\"%d\",%s", j,pret);
logadd("\"name\":\"%s\",%s", getVarName(mb,
getArg(pci,j)), pret);
if( getVarSTC(mb,getArg(pci,j))){
InstrPtr stc = getInstrPtr(mb,
getVarSTC(mb,getArg(pci,j)));
if(stc &&
strcmp(getModuleId(stc),"sql") ==0 && strncmp(getFunctionId(stc),"bind",4)==0)
-
logadd("\"alias\":\"%s.%s.%s\",%s",
+
logadd("\"alias\":\"%s.%s.%s\",%s",
getVarConstant(mb,
getArg(stc,stc->retc +1)).val.sval,
getVarConstant(mb,
getArg(stc,stc->retc +2)).val.sval,
getVarConstant(mb,
getArg(stc,stc->retc +3)).val.sval, pret);
@@ -335,16 +335,16 @@ This information can be used to determin
} else
logadd("\"kind\":\"%s\",%s", ( d->batPersistence == PERSISTENT ?
"persistent":"transient"), pret);
total += cnt * d->twidth;
- total += heapinfo(d->tvheap,
d->batCacheid);
- total += hashinfo(d->thash,
d->batCacheid);
+ total += heapinfo(d->tvheap,
d->batCacheid);
+ total += hashinfo(d->thash,
d->batCacheid);
total += IMPSimprintsize(d);
BBPunfix(d->batCacheid);
- }
+ }
logadd("\"bid\":\"%d\",%s", bid,pret);
logadd("\"count\":\""BUNFMT"\",%s",cnt,pret);
logadd("\"size\":" LLFMT",%s",
total,pret);
} else{
- char *truncated;
+ char *truncated = NULL;
tname = getTypeName(tpe);
logadd("\"type\":\"%s\",%s",
tname,pret);
cv = 0;
@@ -355,7 +355,11 @@ This information can be used to determin
GDKfree(stmtq);
stmtq = truncated;
}
- logadd("\"value\":\"%s\",%s",
stmtq,pret);
+ if (stmtq == NULL) {
+
logadd("\"value\":\"(null)\",%s", pret);
+ } else {
+ logadd("\"value\":\"%s\",%s",
stmtq, pret);
+ }
GDKfree(cv);
GDKfree(stmtq);
}
diff --git a/monetdb5/mal/mal_scenario.c b/monetdb5/mal/mal_scenario.c
--- a/monetdb5/mal/mal_scenario.c
+++ b/monetdb5/mal/mal_scenario.c
@@ -468,6 +468,7 @@ resetScenario(Client c)
c->oldscenario = 0;
}
+/*
void
exitScenario(Client c)
{
@@ -480,6 +481,19 @@ exitScenario(Client c)
(*scen->exitSystemCmd) (c);
c->scenario = NULL;
}
+*/
+
+void
+exitScenario(Client c)
+{
+ int i;
+ Scenario scen = scenarioRec;
+
+ for (i = 0; i < MAXSCEN && scen->name; i++, scen++) {
+ if (scen->exitSystemCmd)
+ (*scen->exitSystemCmd)(c);
+ }
+}
/*
* The building blocks of scenarios are routines obeying a strict
diff --git a/monetdb5/mal/mal_session.c b/monetdb5/mal/mal_session.c
--- a/monetdb5/mal/mal_session.c
+++ b/monetdb5/mal/mal_session.c
@@ -488,13 +488,8 @@ MSserveClient(void *dummy)
assert(0);
}
- if (c->mode > FINISHCLIENT) {
- if (isAdministrator(c) /* && moreClients(0)==0 */) {
- if (c->scenario) {
- exitScenario(c);
- }
- }
- }
+ if (c->mode == FINISHCLIENT && isAdministrator(c))
+ exitScenario(c);
if (!isAdministrator(c))
MCcloseClient(c);
if (c->nspace && strcmp(c->nspace->name, "user") == 0) {
diff --git a/monetdb5/modules/kernel/batmmath.c
b/monetdb5/modules/kernel/batmmath.c
--- a/monetdb5/modules/kernel/batmmath.c
+++ b/monetdb5/modules/kernel/batmmath.c
@@ -23,6 +23,9 @@
#else
#define feclearexcept(x)
#define fetestexcept(x) 0
+#define FE_INVALID 0
+#define FE_DIVBYZERO 0
+#define FE_OVERFLOW 0
#endif
#define voidresultBAT(X1,X2)
\
@@ -43,6 +46,8 @@ str CMDscience_bat_##TYPE##_##FUNC(bat *
{
\
BAT *b, *bn;
\
TYPE *o, *p, *q;
\
+ int e = 0, ex = 0;
\
+
\
if ((b = BATdescriptor(*bid)) == NULL) {
\
throw(MAL, #TYPE, RUNTIME_OBJECT_MISSING);
\
}
\
@@ -60,13 +65,20 @@ str CMDscience_bat_##TYPE##_##FUNC(bat *
for (; p < q; o++, p++)
\
*o = *p == TYPE##_nil ? TYPE##_nil : FUNC##SUFF(*p);
\
}
\
- if (errno != 0 ||
\
- fetestexcept(FE_INVALID | FE_DIVBYZERO |
\
- FE_OVERFLOW | FE_UNDERFLOW) != 0) {
\
- int e = errno;
\
+ if ((e = errno) != 0 ||
\
+ (ex = fetestexcept(FE_INVALID | FE_DIVBYZERO |
\
+ FE_OVERFLOW)) != 0) {
\
+ const char *err;
\
BBPunfix(bn->batCacheid);
\
- throw(MAL, "batmmath." #FUNC, "Math exception: %s",
\
- strerror(e));
\
+ if (e) {
\
+ err = strerror(e);
\
+ } else if (ex & FE_DIVBYZERO)
\
+ err = "Divide by zero";
\
+ else if (ex & FE_OVERFLOW)
\
+ err = "Overflow";
\
+ else
\
+ err = "Invalid result";
\
+ throw(MAL, "batmmath." #FUNC, "Math exception: %s", err);
\
}
\
BATsetcount(bn, BATcount(b));
\
bn->tsorted = 0;
\
@@ -85,6 +97,7 @@ str CMDscience_bat_cst_##FUNC##_##TYPE(b
{
\
BAT *b, *bn;
\
TYPE *o, *p, *q;
\
+ int e = 0, ex = 0;
\
\
if ((b = BATdescriptor(*bid)) == NULL) {
\
throw(MAL, #TYPE, RUNTIME_OBJECT_MISSING);
\
@@ -103,13 +116,20 @@ str CMDscience_bat_cst_##FUNC##_##TYPE(b
for (; p < q; o++, p++)
\
*o = *p == TYPE##_nil ? TYPE##_nil : FUNC##SUFF(*p,
*d); \
}
\
- if (errno != 0 ||
\
- fetestexcept(FE_INVALID | FE_DIVBYZERO |
\
- FE_OVERFLOW | FE_UNDERFLOW) != 0) {
\
- int e = errno;
\
+ if ((e = errno) != 0 ||
\
+ (ex = fetestexcept(FE_INVALID | FE_DIVBYZERO |
\
+ FE_OVERFLOW)) != 0) {
\
+ const char *err;
\
BBPunfix(bn->batCacheid);
\
- throw(MAL, "batmmath." #FUNC, "Math exception: %s",
\
- strerror(e));
\
+ if (e) {
\
+ err = strerror(e);
\
+ } else if (ex & FE_DIVBYZERO)
\
+ err = "Divide by zero";
\
+ else if (ex & FE_OVERFLOW)
\
+ err = "Overflow";
\
+ else
\
+ err = "Invalid result";
\
+ throw(MAL, "batmmath." #FUNC, "Math exception: %s", err);
\
}
\
BATsetcount(bn, BATcount(b));
\
bn->tsorted = 0;
\
@@ -127,6 +147,7 @@ str CMDscience_cst_bat_##FUNC##_##TYPE(b
{
\
BAT *b, *bn;
\
TYPE *o, *p, *q;
\
+ int e = 0, ex = 0;
\
\
if ((b = BATdescriptor(*bid)) == NULL) {
\
throw(MAL, #TYPE, RUNTIME_OBJECT_MISSING);
\
@@ -145,13 +166,20 @@ str CMDscience_cst_bat_##FUNC##_##TYPE(b
for (; p < q; o++, p++)
\
*o = *p == TYPE##_nil ? TYPE##_nil : FUNC##SUFF(*d,
*p); \
}
\
- if (errno != 0 ||
\
- fetestexcept(FE_INVALID | FE_DIVBYZERO |
\
- FE_OVERFLOW | FE_UNDERFLOW) != 0) {
\
- int e = errno;
\
+ if ((e = errno) != 0 ||
\
+ (ex = fetestexcept(FE_INVALID | FE_DIVBYZERO |
\
+ FE_OVERFLOW)) != 0) {
\
+ const char *err;
\
BBPunfix(bn->batCacheid);
\
- throw(MAL, "batmmath." #FUNC, "Math exception: %s",
\
- strerror(e));
\
+ if (e) {
\
+ err = strerror(e);
\
+ } else if (ex & FE_DIVBYZERO)
\
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list
