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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list