Changeset: 33b67ef60fd8 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/33b67ef60fd8 Modified Files: sql/storage/store.c Branch: iso Log Message:
Merged with Jul2021 diffs (truncated from 2607 to 300 lines): diff --git a/common/utils/matomic.h b/common/utils/matomic.h --- a/common/utils/matomic.h +++ b/common/utils/matomic.h @@ -261,8 +261,8 @@ typedef volatile int ATOMIC_TYPE; #define ATOMIC_XCG(var, val) __atomic_exchange_n(var, (ATOMIC_BASE_TYPE) (val), __ATOMIC_SEQ_CST) #define ATOMIC_CAS(var, exp, des) __atomic_compare_exchange_n(var, exp, (ATOMIC_BASE_TYPE) (des), false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) #define ATOMIC_ADD(var, val) __atomic_fetch_add(var, (ATOMIC_BASE_TYPE) (val), __ATOMIC_SEQ_CST) -#define ATOMIC_SUB(var, val) __atomic_fetch_sub(var, (ATOMIC_BASE_TYPE) (val), __ATOMIC_SEQ_CST)# -define ATOMIC_INC(var) __atomic_add_fetch(var, 1, __ATOMIC_SEQ_CST) +#define ATOMIC_SUB(var, val) __atomic_fetch_sub(var, (ATOMIC_BASE_TYPE) (val), __ATOMIC_SEQ_CST) +#define ATOMIC_INC(var) __atomic_add_fetch(var, 1, __ATOMIC_SEQ_CST) #define ATOMIC_DEC(var) __atomic_sub_fetch(var, 1, __ATOMIC_SEQ_CST) #define ATOMIC_OR(var, val) __atomic_fetch_or(var, (ATOMIC_BASE_TYPE) (val), __ATOMIC_SEQ_CST) #define ATOMIC_AND(var, val) __atomic_fetch_and(var, (ATOMIC_BASE_TYPE) (val), __ATOMIC_SEQ_CST) diff --git a/common/utils/mstring.h b/common/utils/mstring.h --- a/common/utils/mstring.h +++ b/common/utils/mstring.h @@ -29,7 +29,10 @@ strcpy_len(char *restrict dst, const cha if ((dst[i] = src[i]) == 0) return i; } - dst[n - 1] = 0; + /* for correctness, the decrement isn't needed (just assigning 0 + * to dst[n-1] would be sufficient), but to work around a too + * strict GNU C compiler, we do need it */ + dst[--n] = 0; /* in some versions of GCC (at least gcc (Ubuntu 7.5.0-3ubuntu1~18.04) * 7.5.0), the error just can't be turned off when using * --enable-strict, so we just use the (more) expensive way of getting the diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -2183,7 +2183,6 @@ logger_flush(logger *lg, ulng ts) } logger_unlock(lg); } - assert(res==LOG_OK); if (lid && res == LOG_OK) logger_cleanup_range(lg); return res == LOG_ERR ? GDK_FAIL : GDK_SUCCEED; diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c --- a/gdk/gdk_system.c +++ b/gdk/gdk_system.c @@ -383,6 +383,8 @@ join_threads(void) bool waited; struct winthread *self = TlsGetValue(threadslot); + if (!self) + return; EnterCriticalSection(&winthread_cs); do { waited = false; diff --git a/gdk/gdk_tracer.c b/gdk/gdk_tracer.c --- a/gdk/gdk_tracer.c +++ b/gdk/gdk_tracer.c @@ -280,7 +280,14 @@ gdk_return GDKtracer_stop(void) { set_level_for_layer(MDB_ALL, DEFAULT_LOG_LEVEL); - return GDKtracer_flush_buffer(); + if (active_tracer) { + if (active_tracer != stderr) + fclose(active_tracer); + else + fflush(active_tracer); + active_tracer = NULL; + } + return GDK_SUCCEED; } gdk_return diff --git a/monetdb5/modules/atoms/batxml.c b/monetdb5/modules/atoms/batxml.c --- a/monetdb5/modules/atoms/batxml.c +++ b/monetdb5/modules/atoms/batxml.c @@ -1250,7 +1250,7 @@ BATxmlaggr(BAT **bnp, BAT *b, BAT *g, BA if (BATsort(&t1, &t2, NULL, g, NULL, NULL, false, false, true) != GDK_SUCCEED) { BBPreclaim(bn); bn = NULL; - err = "internal sort failed"; + err = GDK_EXCEPTION; goto out; } if (freeg) diff --git a/monetdb5/modules/atoms/json.c b/monetdb5/modules/atoms/json.c --- a/monetdb5/modules/atoms/json.c +++ b/monetdb5/modules/atoms/json.c @@ -2431,7 +2431,7 @@ JSONjsonaggr(BAT **bnp, BAT *b, BAT *g, if (g) { /* stable sort g */ if (BATsort(&t1, &t2, NULL, g, NULL, NULL, false, false, true) != GDK_SUCCEED) { - err = "internal sort failed"; + err = GDK_EXCEPTION; goto out; } if (freeg) diff --git a/monetdb5/modules/kernel/algebra.c b/monetdb5/modules/kernel/algebra.c --- a/monetdb5/modules/kernel/algebra.c +++ b/monetdb5/modules/kernel/algebra.c @@ -786,29 +786,19 @@ ALGcrossproduct(bat *l, bat *r, const ba BAT *sl = NULL, *sr = NULL; gdk_return ret; - if ((L = BATdescriptor(*left)) == NULL) { + if ((L = BBPquickdesc(*left, false)) == NULL) throw(MAL, "algebra.crossproduct", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); - } - if ((R = BATdescriptor(*right)) == NULL) { - BBPunfix(L->batCacheid); + if ((R = BBPquickdesc(*right, false)) == NULL) throw(MAL, "algebra.crossproduct", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); - } - if (slid && !is_bat_nil(*slid) && (sl = BATdescriptor(*slid)) == NULL) { - BBPunfix(L->batCacheid); - BBPunfix(R->batCacheid); + if (slid && !is_bat_nil(*slid) && (sl = BATdescriptor(*slid)) == NULL) throw(MAL, "algebra.crossproduct", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); - } if (srid && !is_bat_nil(*srid) && (sr = BATdescriptor(*srid)) == NULL) { - BBPunfix(L->batCacheid); - BBPunfix(R->batCacheid); if (sl) BBPunfix(sl->batCacheid); throw(MAL, "algebra.crossproduct", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); } ret = BATsubcross(&bn1, r ? &bn2 : NULL, L, R, sl, sr, max_one && !is_bit_nil(*max_one) && *max_one); - BBPunfix(L->batCacheid); - BBPunfix(R->batCacheid); if (sl) BBPunfix(sl->batCacheid); if (sr) @@ -907,7 +897,7 @@ ALGsort33(bat *result, bat *norder, bat if (g) BBPunfix(g->batCacheid); BBPunfix(b->batCacheid); - throw(MAL, "algebra.sort", OPERATION_FAILED); + throw(MAL, "algebra.sort", GDK_EXCEPTION); } BBPunfix(b->batCacheid); if (o) @@ -1248,16 +1238,14 @@ ALGprojecttail(Client cntxt, MalBlkPtr m (void) mb; if( isaBatType(getArgType(mb,pci,2)) ) throw(MAL,"algebra.project","Scalar value expected"); - if ((b = BATdescriptor(bid)) == NULL) + if ((b = BBPquickdesc(bid, false)) == NULL) throw(MAL, "algebra.project", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); bn = BATconstant(b->hseqbase, v->vtype, VALptr(v), BATcount(b), TRANSIENT); - BBPunfix(b->batCacheid); if (bn == NULL) { *ret = bat_nil; throw(MAL, "algebra.project", SQLSTATE(HY013) MAL_MALLOC_FAIL); } - *ret= bn->batCacheid; - BBPkeepref(bn->batCacheid); + BBPkeepref(*ret= bn->batCacheid); return MAL_SUCCEED; } diff --git a/monetdb5/modules/kernel/bat5.c b/monetdb5/modules/kernel/bat5.c --- a/monetdb5/modules/kernel/bat5.c +++ b/monetdb5/modules/kernel/bat5.c @@ -833,7 +833,7 @@ BKCshrinkBAT(bat *ret, const bat *bid, c if (res != GDK_SUCCEED) { BBPunfix(b->batCacheid); BBPunfix(bn->batCacheid); - throw(MAL, "bat.shrink", SQLSTATE(HY013) MAL_MALLOC_FAIL ); + throw(MAL, "bat.shrink", GDK_EXCEPTION); } o = (oid*)Tloc(bs, 0); @@ -864,7 +864,7 @@ BKCshrinkBAT(bat *ret, const bat *bid, c if (BUNappend(bn, BUNtail(bi, p), false) != GDK_SUCCEED) { BBPunfix(b->batCacheid); BBPunfix(bn->batCacheid); - throw(MAL, "bat.shrink", SQLSTATE(HY013) MAL_MALLOC_FAIL); + throw(MAL, "bat.shrink", GDK_EXCEPTION); } cnt++; } @@ -928,7 +928,7 @@ BKCshrinkBATmap(bat *ret, const bat *bid if (res != GDK_SUCCEED) { BBPunfix(b->batCacheid); BBPunfix(bn->batCacheid); - throw(MAL, "bat.shrinkMap", SQLSTATE(HY013) MAL_MALLOC_FAIL ); + throw(MAL, "bat.shrinkMap", GDK_EXCEPTION); } o = (oid*)Tloc(bs, 0); @@ -1001,7 +1001,7 @@ BKCreuseBAT(bat *ret, const bat *bid, co if (res != GDK_SUCCEED) { BBPunfix(b->batCacheid); BBPunfix(bn->batCacheid); - throw(MAL, "bat.reuse", SQLSTATE(HY013) MAL_MALLOC_FAIL ); + throw(MAL, "bat.reuse", GDK_EXCEPTION); } const oid *o = (const oid *) Tloc(bs, 0); @@ -1098,7 +1098,7 @@ BKCreuseBATmap(bat *ret, const bat *bid, if (res != GDK_SUCCEED) { BBPunfix(b->batCacheid); BBPunfix(bn->batCacheid); - throw(MAL, "bat.shrinkMap", SQLSTATE(HY013) MAL_MALLOC_FAIL ); + throw(MAL, "bat.shrinkMap", GDK_EXCEPTION); } const oid *o = (const oid *) Tloc(bs, 0); @@ -1147,7 +1147,7 @@ BKCmergecand(bat *ret, const bat *aid, c BBPunfix(a->batCacheid); BBPunfix(b->batCacheid); if (bn == NULL) - throw(MAL, "bat.mergecand", OPERATION_FAILED); + throw(MAL, "bat.mergecand", GDK_EXCEPTION); *ret = bn->batCacheid; BBPkeepref(*ret); return MAL_SUCCEED; @@ -1169,7 +1169,7 @@ BKCintersectcand(bat *ret, const bat *ai BBPunfix(a->batCacheid); BBPunfix(b->batCacheid); if (bn == NULL) - throw(MAL, "bat.intersectcand", OPERATION_FAILED); + throw(MAL, "bat.intersectcand", GDK_EXCEPTION); *ret = bn->batCacheid; BBPkeepref(*ret); return MAL_SUCCEED; @@ -1191,7 +1191,7 @@ BKCdiffcand(bat *ret, const bat *aid, co BBPunfix(a->batCacheid); BBPunfix(b->batCacheid); if (bn == NULL) - throw(MAL, "bat.diffcand", OPERATION_FAILED); + throw(MAL, "bat.diffcand", GDK_EXCEPTION); *ret = bn->batCacheid; BBPkeepref(*ret); return MAL_SUCCEED; diff --git a/monetdb5/optimizer/opt_mergetable.c b/monetdb5/optimizer/opt_mergetable.c --- a/monetdb5/optimizer/opt_mergetable.c +++ b/monetdb5/optimizer/opt_mergetable.c @@ -401,7 +401,7 @@ mat_assign(MalBlkPtr mb, InstrPtr p, mat return r; } -static InstrPtr +static int mat_apply1(MalBlkPtr mb, InstrPtr p, matlist_t *ml, int m, int var) { int tpe, k, is_select = isSelect(p), is_mirror = (getFunctionId(p) == mirrorRef); @@ -421,14 +421,14 @@ mat_apply1(MalBlkPtr mb, InstrPtr p, mat } if((r = newInstructionArgs(mb, matRef, packRef, mat[m].mi->argc)) == NULL) - return NULL; + return -1; getArg(r, 0) = getArg(p,0); tpe = getArgType(mb,p,0); if (is_identity) { if((q = newInstruction(mb, NULL,NULL)) == NULL) { freeInstruction(r); - return NULL; + return -1; } getArg(q, 0) = newTmpVariable(mb, TYPE_oid); q->retc = 1; @@ -441,7 +441,7 @@ mat_apply1(MalBlkPtr mb, InstrPtr p, mat int res = 0; if((q = copyInstruction(p)) == NULL) { freeInstruction(r); - return NULL; + return -1; } if (is_assign) @@ -471,11 +471,14 @@ mat_apply1(MalBlkPtr mb, InstrPtr p, mat res = setPartnr(ml, -1, getArg(q,0), k); if(res) { freeInstruction(r); - return NULL; + return -1; } r = addArgument(mb, r, getArg(q, 0)); } - return r; + if(!r || mat_add(ml, r, mat_type(ml->v, m), getFunctionId(p))) { + return -1; + } + return 0; } static int @@ -483,6 +486,9 @@ mat_apply(MalBlkPtr mb, InstrPtr p, matl { int matvar[8], fargument[8], k, l, parts = 0; + if (nrmats == 1 && + ((getModuleId(p) == batcalcRef && getFunctionId(p) == identityRef) || (getModuleId(p) == batRef && getFunctionId(p) == mirrorRef))) + return mat_apply1(mb, p, ml, is_a_mat(getArg(p,1),ml), 1); assert(nrmats <= 8); for(k=p->retc, l=0; k < p->argc; k++) { @@ -2345,12 +2351,7 @@ OPTmergetableImplementation(Client cntxt _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list