Changeset: b140078bcff0 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b140078bcff0
Modified Files:
gdk/gdk_logger.c
monetdb5/mal/mal_function.c
monetdb5/mal/mal_instruction.c
monetdb5/mal/mal_instruction.h
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_namespace.c
monetdb5/mal/mal_resource.c
monetdb5/mal/mal_resource.h
monetdb5/modules/mal/querylog.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_gencode.c
sql/storage/store.c
sql/test/BugTracker-2014/Tests/querylog.Bug-3607.sql
sql/test/BugTracker-2014/Tests/querylog.Bug-3607.stable.out
Branch: geo
Log Message:
Merge with default branch.
diffs (truncated from 406 to 300 lines):
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1409,7 +1409,15 @@ logger_load(int debug, const char* fn, c
logger_fatal("logger_load: writing log file %s failed",
filename, 0, 0);
}
- if (fclose(fp) < 0) {
+ if (fflush(fp) < 0 ||
+#if defined(_MSC_VER)
+ _commit(_fileno(fp)) < 0 ||
+#elif defined(HAVE_FDATASYNC)
+ fdatasync(fileno(fp)) < 0 ||
+#elif defined(HAVE_FSYNC)
+ fsync(fileno(fp)) < 0 ||
+#endif
+ fclose(fp) < 0) {
unlink(filename);
logger_fatal("logger_load: closing log file %s failed",
filename, 0, 0);
@@ -2040,7 +2048,15 @@ logger_exit(logger *lg)
return LOG_ERR;
}
- if (fclose(fp) < 0) {
+ if (fflush(fp) < 0 ||
+#if defined(_MSC_VER)
+ _commit(_fileno(fp)) < 0 ||
+#elif defined(HAVE_FDATASYNC)
+ fdatasync(fileno(fp)) < 0 ||
+#elif defined(HAVE_FSYNC)
+ fsync(fileno(fp)) < 0 ||
+#endif
+ fclose(fp) < 0) {
fprintf(stderr, "!ERROR: logger_exit: flush of %s
failed\n",
filename);
return LOG_ERR;
diff --git a/monetdb5/mal/mal_function.c b/monetdb5/mal/mal_function.c
--- a/monetdb5/mal/mal_function.c
+++ b/monetdb5/mal/mal_function.c
@@ -476,7 +476,7 @@ debugFunction(stream *fd, MalBlkPtr mb,
if (p->token == REMsymbol)
mnstr_printf(fd,"%-40s\n",ps);
else {
- mnstr_printf(fd,"%-40s\t#[%d] %s ",ps, i,
(p->blk && p->blk->binding? p->blk->binding:""));
+ mnstr_printf(fd,"%-40s\t#[%d] ("BUNFMT") %s
",ps, i, getRowCnt(mb,getArg(p,0)), (p->blk && p->blk->binding?
p->blk->binding:""));
for(j =0; j < p->retc; j++)
mnstr_printf(fd,"%d ",getArg(p,j));
if( p->argc - p->retc > 0)
diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -33,7 +33,7 @@ newSymbol(str nme, int kind)
cur->name = putName(nme, strlen(nme));
cur->kind = kind;
cur->peer = NULL;
- cur->def = newMalBlk(MAXVARS, STMT_INCREMENT);
+ cur->def = newMalBlk(kind == FUNCTIONsymbol?MAXVARS : MAXARG, kind ==
FUNCTIONsymbol? STMT_INCREMENT : 1);
if ( cur->def == NULL){
GDKfree(cur);
return NULL;
@@ -971,9 +971,9 @@ renameVariable(MalBlkPtr mb, int id, str
if (v->name)
GDKfree(v->name);
- nme= GDKmalloc(SMALLBUFSIZ);
+ nme= GDKmalloc(IDLENGTH);
if( nme) {
- snprintf(nme,SMALLBUFSIZ,pattern,newid);
+ snprintf(nme,IDLENGTH,pattern,newid);
v->name = nme;
v->tmpindex = 0;
} else
diff --git a/monetdb5/mal/mal_instruction.h b/monetdb5/mal/mal_instruction.h
--- a/monetdb5/mal/mal_instruction.h
+++ b/monetdb5/mal/mal_instruction.h
@@ -22,11 +22,10 @@
#define DEBUG_MAL_INSTR
/* #define DEBUG_REDUCE */
#define MAXARG 4 /* BEWARE the code depends on
this knowledge */
-#define STMT_INCREMENT 32
+#define STMT_INCREMENT 512
#define MAL_VAR_WINDOW 32
-#define MAXVARS 32
+#define MAXVARS 512 /* >= STMT_INCREMENT */
#define MAXLISTING 64*1024
-#define SMALLBUFSIZ 64
/* Allocation of space assumes a rather exotic number of
* arguments. Access to module and function name are cast in macros to
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
@@ -639,12 +639,14 @@ str runMALsequence(Client cntxt, MalBlkP
if (isaBatType(t)) {
bat bid =
stk->stk[a].val.bval;
+ BAT *_b =
BATdescriptor(bid);
t = getColumnType(t);
assert(stk->stk[a].vtype == TYPE_bat);
assert(bid == 0 ||
bid ==
bat_nil ||
t ==
TYPE_any ||
-
ATOMtype(BBP_cache(bid)->ttype) == ATOMtype(t));
+
ATOMtype(_b->ttype) == ATOMtype(t));
+ if(_b) BBPunfix(bid);
} else {
assert(t ==
stk->stk[a].vtype);
}
diff --git a/monetdb5/mal/mal_namespace.c b/monetdb5/mal/mal_namespace.c
--- a/monetdb5/mal/mal_namespace.c
+++ b/monetdb5/mal/mal_namespace.c
@@ -146,6 +146,7 @@ str putName(const char *nme, size_t len)
n->nme= GDKstrdup(buf);
if (n->nme == NULL) {
/* absolute an error we can not recover from */
+ GDKfree(n);
showException(GDKout, MAL,"initNamespace",MAL_MALLOC_FAIL);
mal_exit();
}
diff --git a/monetdb5/mal/mal_resource.c b/monetdb5/mal/mal_resource.c
--- a/monetdb5/mal/mal_resource.c
+++ b/monetdb5/mal/mal_resource.c
@@ -12,9 +12,6 @@
#include "mal_resource.h"
#include "mal_private.h"
-#define heapinfo(X) if ((X) && (X)->base) vol = (X)->free; else vol = 0;
-#define hashinfo(X) if ((X) && (X) != (Hash *) 1 && (X)->mask) vol =
(((X)->mask + cnt ) * (X)-> width); else vol = 0;
-
/* MEMORY admission does not seem to have a major impact */
lng memorypool = 0; /* memory claimed by concurrent threads */
int memoryclaims = 0; /* number of threads active with expensive operations
*/
@@ -66,9 +63,8 @@ mal_resource_reset(void)
lng
getMemoryClaim(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, int i, int flag)
{
- lng total = 0, vol = 0;
+ lng total = 0;
BAT *b;
- BUN cnt;
(void)mb;
if (stk->stk[getArg(pci, i)].vtype == TYPE_bat) {
@@ -79,15 +75,14 @@ getMemoryClaim(MalBlkPtr mb, MalStkPtr s
BBPunfix(b->batCacheid);
return 0;
}
- cnt = BATcount(b);
- heapinfo(&b->T->heap); total += vol;
+ total += heapinfo(&b->T->heap);
// string heaps can be shared, consider them as space-less views
if ( b->T->vheap && b->T->vheap->parentid ){
- heapinfo(b->T->vheap); total += vol;
+ total += heapinfo(b->T->vheap);
}
- hashinfo(b->T->hash); total += vol;
- total = total > (lng)(MEMORY_THRESHOLD ) ?
(lng)(MEMORY_THRESHOLD ) : total;
+ //total += hashinfo(b->T->hash);
+ //total = total > (lng)(MEMORY_THRESHOLD ) ?
(lng)(MEMORY_THRESHOLD ) : total;
BBPunfix(b->batCacheid);
}
return total;
diff --git a/monetdb5/mal/mal_resource.h b/monetdb5/mal/mal_resource.h
--- a/monetdb5/mal/mal_resource.h
+++ b/monetdb5/mal/mal_resource.h
@@ -15,6 +15,9 @@
#define DELAYUNIT 2 /* ms delay in parallel processing decisions */
#define MAX_DELAYS 1000 /* never wait forever */
+#define heapinfo(X) ((X) && (X)->base ? (X)->free: 0)
+#define hashinfo(X) ( (X)? heapinfo((X)->heap):0)
+
#define USE_MAL_ADMISSION
#ifdef USE_MAL_ADMISSION
mal_export int MALadmission(lng argclaim, lng hotclaim);
diff --git a/monetdb5/modules/mal/querylog.c b/monetdb5/modules/mal/querylog.c
--- a/monetdb5/modules/mal/querylog.c
+++ b/monetdb5/modules/mal/querylog.c
@@ -180,8 +180,8 @@ static void
QLOG_cat_defined = QLOGcreate("cat","defined",TYPE_timestamp);
QLOG_cat_query = QLOGcreate("cat","query",TYPE_str);
QLOG_cat_pipe = QLOGcreate("cat","pipe",TYPE_str);
+ QLOG_cat_plan = QLOGcreate("cat","size",TYPE_str);
QLOG_cat_mal = QLOGcreate("cat","mal",TYPE_int);
- QLOG_cat_plan = QLOGcreate("cat","size",TYPE_str);
QLOG_cat_optimize = QLOGcreate("cat","optimize",TYPE_lng);
QLOG_calls_id = QLOGcreate("calls","id",TYPE_oid);
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -35,6 +35,7 @@
#include <opt_pipes.h>
#include "clients.h"
#include "mal_instruction.h"
+#include "mal_resource.h"
static int
rel_is_table(sql_rel *rel)
@@ -4864,10 +4865,6 @@ sql_storage(Client cntxt, MalBlkPtr mb,
}
BUNappend(atom,
&w, FALSE);
-#define heapinfo(X) ((X) && (X)->base ? (X)->free: 0)
-#define hashinfo(X) ( (X)? heapinfo((X)->heap):0)
-
-
sz =
heapinfo(&bn->T->heap);
BUNappend(size,
&sz, FALSE);
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
@@ -871,7 +871,6 @@ multiplex2(MalBlkPtr mb, char *mod, char
static int backend_create_subfunc(backend *be, sql_subfunc *f, list *ops);
static int backend_create_subaggr(backend *be, sql_subaggr *f);
-#define SMALLBUFSIZ 64
static int
dump_joinN(backend *sql, MalBlkPtr mb, stmt *s)
{
@@ -1023,10 +1022,10 @@ static int
if (sql->mvc->argc &&
sql->mvc->args[s->flag]->varid >= 0) {
q = pushArgument(mb, q,
sql->mvc->args[s->flag]->varid);
} else {
- char *buf = GDKmalloc(SMALLBUFSIZ);
+ char *buf = GDKmalloc(IDLENGTH);
if (buf == NULL)
return -1;
- (void) snprintf(buf, SMALLBUFSIZ,
"A%d", s->flag);
+ (void) snprintf(buf, IDLENGTH, "A%d",
s->flag);
q = pushArgumentId(mb, q, buf);
}
if (q == NULL)
@@ -1810,10 +1809,10 @@ static int
/* delta bat */
if (s->op3) {
- char nme[SMALLBUFSIZ];
+ char nme[IDLENGTH];
int uval = -1;
- snprintf(nme, SMALLBUFSIZ, "r1_%d", r);
+ snprintf(nme, IDLENGTH, "r1_%d", r);
uval = findVariable(mb, nme);
assert(uval >= 0);
@@ -1967,10 +1966,10 @@ static int
if (s->flag)
s->nr = s->op1->op2->nr;
} else if (s->flag) {
- char nme[SMALLBUFSIZ];
+ char nme[IDLENGTH];
int v = -1;
- snprintf(nme, SMALLBUFSIZ, "r%d_%d", s->flag,
l);
+ snprintf(nme, IDLENGTH, "r%d_%d", s->flag, l);
v = findVariable(mb, nme);
assert(v >= 0);
@@ -2843,7 +2842,7 @@ backend_dumpproc(backend *be, Client c,
Symbol curPrg = 0, backup = NULL;
InstrPtr curInstr = 0;
int argc = 0;
- char arg[SMALLBUFSIZ];
+ char arg[IDLENGTH];
node *n;
backup = c->curprg;
@@ -2871,7 +2870,7 @@ backend_dumpproc(backend *be, Client c,
int type = atom_type(a)->type->localtype;
int varid = 0;
- snprintf(arg, SMALLBUFSIZ, "A%d", argc);
+ snprintf(arg, IDLENGTH, "A%d", argc);
a->varid = varid = newVariable(mb, _STRDUP(arg), type);
curInstr = pushArgument(mb, curInstr, varid);
if (curInstr == NULL)
@@ -2886,7 +2885,7 @@ backend_dumpproc(backend *be, Client c,
int type = a->type.type->localtype;
int varid = 0;
- snprintf(arg, SMALLBUFSIZ, "A%d", argc);
+ snprintf(arg, IDLENGTH, "A%d", argc);
varid = newVariable(mb, _STRDUP(arg), type);
curInstr = pushArgument(mb, curInstr, varid);
if (curInstr == NULL)
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -2127,6 +2127,17 @@ sql_trans_tname_conflict( sql_trans *tr,
return 1;
*tp++ = '_';
}
+ tmp = sa_strdup(tr->sa, cname);
+ tp = tmp;
+ while ((tp = strchr(tp, '_')) != NULL) {
+ char *ntmp;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list