Changeset: 48c0efcc0345 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/48c0efcc0345
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk_system.c
Branch: default
Log Message:
Merged with Jul2021
diffs (truncated from 2910 to 300 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -541,8 +541,8 @@ gdk_return log_bat_transient(logger *lg,
gdk_return log_constant(logger *lg, int type, ptr val, log_id id, lng offset,
lng cnt);
gdk_return log_delta(logger *lg, BAT *uid, BAT *uval, log_id id);
gdk_return log_sequence(logger *lg, int seq, lng id);
-gdk_return log_tend(logger *lg);
-gdk_return log_tstart(logger *lg, ulng commit_ts, bool flush);
+gdk_return log_tend(logger *lg, ulng commit_ts);
+gdk_return log_tstart(logger *lg, bool flush);
gdk_return logger_activate(logger *lg);
lng logger_changes(logger *lg);
logger *logger_create(int debug, const char *fn, const char *logdir, int
version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, void
*funcdata);
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -809,12 +809,12 @@ COLcopy(BAT *b, int tt, bool writable, r
/* first try case (1); create a view, possibly with different
* atom-types */
- if (role == b->batRole &&
+ if (!writable &&
+ role == b->batRole &&
b->batRestricted == BAT_READ &&
ATOMstorage(b->ttype) != TYPE_msk && /* no view on TYPE_msk */
(!VIEWtparent(b) ||
- BBP_cache(VIEWtparent(b))->batRestricted == BAT_READ) &&
- !writable) {
+ BBP_cache(VIEWtparent(b))->batRestricted == BAT_READ)) {
bn = VIEWcreate(b->hseqbase, b);
if (bn == NULL)
return NULL;
@@ -875,8 +875,8 @@ COLcopy(BAT *b, int tt, bool writable, r
strconcat_len(thp.filename, sizeof(thp.filename),
BBP_physical(bn->batCacheid),
".theap", NULL);
- if ((b->ttype && HEAPcopy(&bthp, b->theap) !=
GDK_SUCCEED) ||
- (bn->tvheap && HEAPcopy(&thp, b->tvheap) !=
GDK_SUCCEED)) {
+ if ((b->ttype && HEAPcopy(&bthp, b->theap, b->tbaseoff
<< b->tshift) != GDK_SUCCEED) ||
+ (bn->tvheap && HEAPcopy(&thp, b->tvheap, 0) !=
GDK_SUCCEED)) {
HEAPfree(&thp, true);
HEAPfree(&bthp, true);
BBPreclaim(bn);
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -32,7 +32,7 @@ unshare_varsized_heap(BAT *b)
h->farmid = BBPselectfarm(b->batRole, TYPE_str, varheap);
strconcat_len(h->filename, sizeof(h->filename),
BBP_physical(b->batCacheid), ".theap", NULL);
- if (HEAPcopy(h, b->tvheap) != GDK_SUCCEED) {
+ if (HEAPcopy(h, b->tvheap, 0) != GDK_SUCCEED) {
HEAPfree(h, true);
GDKfree(h);
return GDK_FAIL;
@@ -496,7 +496,7 @@ append_varsized_bat(BAT *b, BAT *n, stru
h->farmid = BBPselectfarm(b->batRole, b->ttype, varheap);
strconcat_len(h->filename, sizeof(h->filename),
BBP_physical(b->batCacheid), ".theap", NULL);
- if (HEAPcopy(h, b->tvheap) != GDK_SUCCEED) {
+ if (HEAPcopy(h, b->tvheap, 0) != GDK_SUCCEED) {
HEAPfree(h, true);
GDKfree(h);
return GDK_FAIL;
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -651,11 +651,13 @@ GDKupgradevarheap(BAT *b, var_t v, BUN c
* dst->filename (or NULL), which might be used in HEAPalloc().
*/
gdk_return
-HEAPcopy(Heap *dst, Heap *src)
+HEAPcopy(Heap *dst, Heap *src, size_t offset)
{
- if (HEAPalloc(dst, src->size, 1, 1) == GDK_SUCCEED) {
- dst->free = src->free;
- memcpy(dst->base, src->base, src->free);
+ if (offset > src->free)
+ offset = src->free;
+ if (HEAPalloc(dst, src->free - offset, 1, 1) == GDK_SUCCEED) {
+ dst->free = src->free - offset;
+ memcpy(dst->base, src->base + offset, src->free - offset);
dst->hashash = src->hashash;
dst->cleanhash = src->cleanhash;
dst->dirty = true;
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1072,14 +1072,12 @@ logger_read_transaction(logger *lg)
case LOG_START:
if (l.id > lg->tid)
lg->tid = l.id;
- lng trans_id;
- if (!mnstr_readLng(lg->input_log, &trans_id) ||
- (tr = tr_create(tr, l.id)) == NULL) {
+ if ((tr = tr_create(tr, l.id)) == NULL) {
err = LOG_ERR;
break;
}
if (lg->debug & 1)
- fprintf(stderr, "#logger tstart %d-" LLFMT
"\n", tr->tid, trans_id);
+ fprintf(stderr, "#logger tstart %d\n", tr->tid);
break;
case LOG_END:
if (tr == NULL)
@@ -2537,7 +2535,7 @@ pre_allocate(logger *lg)
}
gdk_return
-log_tend(logger *lg)
+log_tend(logger *lg, ulng commit_ts)
{
logformat l;
gdk_return res = GDK_SUCCEED;
@@ -2552,6 +2550,11 @@ log_tend(logger *lg)
return logger_commit(lg);
}
+ if (lg->current) {
+ lg->current->last_tid = lg->tid;
+ lg->current->last_ts = commit_ts;
+ }
+
if (LOG_DISABLED(lg)) {
lg->end++;
return GDK_SUCCEED;
@@ -2727,7 +2730,7 @@ logger_find_bat(logger *lg, log_id id)
gdk_return
-log_tstart(logger *lg, ulng commit_ts, bool flushnow)
+log_tstart(logger *lg, bool flushnow)
{
logformat l;
@@ -2738,13 +2741,9 @@ log_tstart(logger *lg, ulng commit_ts, b
if (logger_open_output(lg) != GDK_SUCCEED)
return GDK_FAIL;
while (lg->saved_id+1 < lg->id)
- logger_flush(lg, commit_ts);
+ logger_flush(lg, (1ULL<<63));
lg->flushnow = flushnow;
}
- if (lg->current) {
- lg->current->last_tid = lg->tid+1;
- lg->current->last_ts = commit_ts;
- }
if (LOG_DISABLED(lg)) {
lg->end++;
@@ -2756,8 +2755,7 @@ log_tstart(logger *lg, ulng commit_ts, b
if (lg->debug & 1)
fprintf(stderr, "#log_tstart %d\n", lg->tid);
- if (log_write_format(lg, &l) != GDK_SUCCEED ||
- !mnstr_writeLng(lg->output_log, commit_ts))
+ if (log_write_format(lg, &l) != GDK_SUCCEED)
return GDK_FAIL;
return GDK_SUCCEED;
}
diff --git a/gdk/gdk_logger.h b/gdk/gdk_logger.h
--- a/gdk/gdk_logger.h
+++ b/gdk/gdk_logger.h
@@ -68,8 +68,8 @@ gdk_export gdk_return log_delta(logger *
/* mark end of batgroup insert or clear */
//gdk_export gdk_return log_batgroup_end(logger *lg, oid id);
-gdk_export gdk_return log_tstart(logger *lg, ulng commit_ts, bool flush);
-gdk_export gdk_return log_tend(logger *lg);
+gdk_export gdk_return log_tstart(logger *lg, bool flush);
+gdk_export gdk_return log_tend(logger *lg, ulng commit_ts);
gdk_export gdk_return log_sequence(logger *lg, int seq, lng id);
gdk_export log_bid logger_find_bat(logger *lg, log_id id);
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -184,7 +184,7 @@ gdk_return HASHnew(Hash *h, int tpe, BUN
gdk_return HEAPalloc(Heap *h, size_t nitems, size_t itemsize, size_t
itemsizemmap)
__attribute__((__warn_unused_result__))
__attribute__((__visibility__("hidden")));
-gdk_return HEAPcopy(Heap *dst, Heap *src)
+gdk_return HEAPcopy(Heap *dst, Heap *src, size_t offset)
__attribute__((__warn_unused_result__))
__attribute__((__visibility__("hidden")));
gdk_return HEAPdelete(Heap *h, const char *o, const char *ext)
diff --git a/gdk/gdk_project.c b/gdk/gdk_project.c
--- a/gdk/gdk_project.c
+++ b/gdk/gdk_project.c
@@ -747,7 +747,7 @@ BATproject2(BAT *restrict l, BAT *restri
sizeof(bn->tvheap->filename),
BBP_physical(bn->batCacheid), ".theap",
NULL);
- if (HEAPcopy(bn->tvheap, r1->tvheap) != GDK_SUCCEED)
+ if (HEAPcopy(bn->tvheap, r1->tvheap, 0) != GDK_SUCCEED)
goto bailout;
}
bn->ttype = r1->ttype;
diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c
--- a/gdk/gdk_system.c
+++ b/gdk/gdk_system.c
@@ -405,6 +405,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/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)
@@ -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/optimizer/opt_mergetable.c
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -486,7 +486,8 @@ mat_apply(MalBlkPtr mb, InstrPtr p, matl
{
int matvar[8], fargument[8], k, l, parts = 0;
- if (nrmats == 1 && (getFunctionId(p) == identityRef && getModuleId(p)
== batcalcRef))
+ 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);
diff --git a/sql/backends/monet5/UDF/pyapi3/emit3.c
b/sql/backends/monet5/UDF/pyapi3/emit3.c
--- a/sql/backends/monet5/UDF/pyapi3/emit3.c
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list