Changeset: 9e00075ee9af for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9e00075ee9af
Modified Files:
        gdk/gdk.h
        gdk/gdk_bat.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql.h
        sql/scripts/26_sysmon.sql
Branch: strheapvacuum
Log Message:

merge default


diffs (truncated from 25491 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -9208,7 +9208,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:int, X_1:lng, 
X_2:str, X_3:str):void ", "sql_analyze;", ""      ]
 [ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:int, X_1:lng, 
X_2:str, X_3:str, X_4:str):void ",        "sql_analyze;", ""      ]
 [ "sql",       "any",  "pattern sql.any(X_0:bit, X_1:bit, X_2:bit):bit ",      
"SQLany_cmp;",  ""      ]
-[ "sql",       "append",       "pattern sql.append(X_0:int, X_1:str, X_2:str, 
X_3:str, X_4:lng, X_5:any):int ",        "mvc_append_wrap;",     ""      ]
+[ "sql",       "append",       "pattern sql.append(X_0:int, X_1:str, X_2:str, 
X_3:str, X_4:bat[:oid], X_5:any):int ",  "mvc_append_wrap;",     ""      ]
 [ "sql",       "argRecord",    "pattern sql.argRecord():str ", 
"SQLargRecord;",        ""      ]
 [ "sql",       "argRecord",    "pattern sql.argRecord(X_0:any...):str ",       
"SQLargRecord;",        ""      ]
 [ "sql",       "assert",       "pattern sql.assert(X_0:bit, X_1:str):void ",   
"SQLassert;",   ""      ]
@@ -9232,7 +9232,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",       "bind_idxbat",  "pattern sql.bind_idxbat(X_0:int, X_1:str, 
X_2:str, X_3:str, X_4:int):bat[:any_1] ",    "mvc_bind_idxbat_wrap;",        "" 
     ]
 [ "sql",       "bind_idxbat",  "pattern sql.bind_idxbat(X_0:int, X_1:str, 
X_2:str, X_3:str, X_4:int, X_5:int, X_6:int) (X_7:bat[:oid], X_8:bat[:any_1]) 
",     "mvc_bind_idxbat_wrap;",        ""      ]
 [ "sql",       "bind_idxbat",  "pattern sql.bind_idxbat(X_0:int, X_1:str, 
X_2:str, X_3:str, X_4:int, X_5:int, X_6:int):bat[:any_1] ",  
"mvc_bind_idxbat_wrap;",        ""      ]
-[ "sql",       "claim",        "unsafe pattern sql.claim(X_0:int, X_1:str, 
X_2:str, X_3:lng):lng ",    "mvc_claim_wrap;",      ""      ]
+[ "sql",       "claim",        "unsafe pattern sql.claim(X_0:int, X_1:str, 
X_2:str, X_3:lng):bat[:oid] ",      "mvc_claim_wrap;",      ""      ]
 [ "sql",       "clear_table",  "unsafe pattern sql.clear_table(X_0:str, 
X_1:str):lng ",        "mvc_clear_table_wrap;",        ""      ]
 [ "sql",       "commit",       "unsafe pattern sql.commit():void ",    
"SQLcommit;",   ""      ]
 [ "sql",       "copy_from",    "unsafe pattern sql.copy_from(X_0:ptr, X_1:str, 
X_2:str, X_3:str, X_4:str, X_5:str, X_6:lng, X_7:lng, X_8:int, X_9:str, 
X_10:int, X_11:int):bat[:any]... ",     "mvc_import_table_wrap;",       ""      
]
@@ -9244,6 +9244,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",       "corr", "pattern sql.corr(X_0:int, X_1:int, X_2:bit, X_3:bit, 
X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcorr;",     ""      ]
 [ "sql",       "corr", "pattern sql.corr(X_0:lng, X_1:lng, X_2:bit, X_3:bit, 
X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcorr;",     ""      ]
 [ "sql",       "corr", "pattern sql.corr(X_0:sht, X_1:sht, X_2:bit, X_3:bit, 
X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcorr;",     ""      ]
+[ "sql",       "count",        "pattern sql.count(X_0:str, X_1:str):lng ",     
"SQLbasecount;",        ""      ]
 [ "sql",       "count",        "pattern sql.count(X_0:any_1, X_1:bit, X_2:bit, 
X_3:bit, X_4:int, X_5:oid, X_6:oid):lng ",      "SQLcount;",    ""      ]
 [ "sql",       "covariance",   "pattern sql.covariance(X_0:bte, X_1:bte, 
X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):dbl ",   "SQLcovar_samp;",       
""      ]
 [ "sql",       "covariance",   "pattern sql.covariance(X_0:dbl, X_1:dbl, 
X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):dbl ",   "SQLcovar_samp;",       
""      ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -12509,7 +12509,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:int, X_1:lng, 
X_2:str, X_3:str):void ", "sql_analyze;", ""      ]
 [ "sql",       "analyze",      "unsafe pattern sql.analyze(X_0:int, X_1:lng, 
X_2:str, X_3:str, X_4:str):void ",        "sql_analyze;", ""      ]
 [ "sql",       "any",  "pattern sql.any(X_0:bit, X_1:bit, X_2:bit):bit ",      
"SQLany_cmp;",  ""      ]
-[ "sql",       "append",       "pattern sql.append(X_0:int, X_1:str, X_2:str, 
X_3:str, X_4:lng, X_5:any):int ",        "mvc_append_wrap;",     ""      ]
+[ "sql",       "append",       "pattern sql.append(X_0:int, X_1:str, X_2:str, 
X_3:str, X_4:bat[:oid], X_5:any):int ",  "mvc_append_wrap;",     ""      ]
 [ "sql",       "argRecord",    "pattern sql.argRecord():str ", 
"SQLargRecord;",        ""      ]
 [ "sql",       "argRecord",    "pattern sql.argRecord(X_0:any...):str ",       
"SQLargRecord;",        ""      ]
 [ "sql",       "assert",       "pattern sql.assert(X_0:bit, X_1:str):void ",   
"SQLassert;",   ""      ]
@@ -12535,7 +12535,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",       "bind_idxbat",  "pattern sql.bind_idxbat(X_0:int, X_1:str, 
X_2:str, X_3:str, X_4:int):bat[:any_1] ",    "mvc_bind_idxbat_wrap;",        "" 
     ]
 [ "sql",       "bind_idxbat",  "pattern sql.bind_idxbat(X_0:int, X_1:str, 
X_2:str, X_3:str, X_4:int, X_5:int, X_6:int) (X_7:bat[:oid], X_8:bat[:any_1]) 
",     "mvc_bind_idxbat_wrap;",        ""      ]
 [ "sql",       "bind_idxbat",  "pattern sql.bind_idxbat(X_0:int, X_1:str, 
X_2:str, X_3:str, X_4:int, X_5:int, X_6:int):bat[:any_1] ",  
"mvc_bind_idxbat_wrap;",        ""      ]
-[ "sql",       "claim",        "unsafe pattern sql.claim(X_0:int, X_1:str, 
X_2:str, X_3:lng):lng ",    "mvc_claim_wrap;",      ""      ]
+[ "sql",       "claim",        "unsafe pattern sql.claim(X_0:int, X_1:str, 
X_2:str, X_3:lng):bat[:oid] ",      "mvc_claim_wrap;",      ""      ]
 [ "sql",       "clear_table",  "unsafe pattern sql.clear_table(X_0:str, 
X_1:str):lng ",        "mvc_clear_table_wrap;",        ""      ]
 [ "sql",       "commit",       "unsafe pattern sql.commit():void ",    
"SQLcommit;",   ""      ]
 [ "sql",       "copy_from",    "unsafe pattern sql.copy_from(X_0:ptr, X_1:str, 
X_2:str, X_3:str, X_4:str, X_5:str, X_6:lng, X_7:lng, X_8:int, X_9:str, 
X_10:int, X_11:int):bat[:any]... ",     "mvc_import_table_wrap;",       ""      
]
@@ -12548,6 +12548,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",       "corr", "pattern sql.corr(X_0:int, X_1:int, X_2:bit, X_3:bit, 
X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcorr;",     ""      ]
 [ "sql",       "corr", "pattern sql.corr(X_0:lng, X_1:lng, X_2:bit, X_3:bit, 
X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcorr;",     ""      ]
 [ "sql",       "corr", "pattern sql.corr(X_0:sht, X_1:sht, X_2:bit, X_3:bit, 
X_4:int, X_5:oid, X_6:oid):dbl ", "SQLcorr;",     ""      ]
+[ "sql",       "count",        "pattern sql.count(X_0:str, X_1:str):lng ",     
"SQLbasecount;",        ""      ]
 [ "sql",       "count",        "pattern sql.count(X_0:any_1, X_1:bit, X_2:bit, 
X_3:bit, X_4:int, X_5:oid, X_6:oid):lng ",      "SQLcount;",    ""      ]
 [ "sql",       "covariance",   "pattern sql.covariance(X_0:bte, X_1:bte, 
X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):dbl ",   "SQLcovar_samp;",       
""      ]
 [ "sql",       "covariance",   "pattern sql.covariance(X_0:dbl, X_1:dbl, 
X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):dbl ",   "SQLcovar_samp;",       
""      ]
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
@@ -203,6 +203,7 @@ void BATtseqbase(BAT *b, oid o);
 void BATundo(BAT *b);
 BAT *BATunique(BAT *b, BAT *s);
 BAT *BATunmask(BAT *b);
+gdk_return BATupdate(BAT *b, BAT *p, BAT *n, bool force) 
__attribute__((__warn_unused_result__));
 BBPrec *BBP[N_BBPINIT];
 gdk_return BBPaddfarm(const char *dirname, uint32_t rolemask, bool logerror);
 void BBPclear(bat bid);
@@ -541,8 +542,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);
@@ -761,6 +762,7 @@ void MCcloseClient(Client c);
 Client MCforkClient(Client father);
 Client MCgetClient(int id);
 Client MCinitClient(oid user, bstream *fin, stream *fout);
+size_t MCmemoryClaim(void);
 int MCpushClientInput(Client c, bstream *new_input, int listing, char *prompt);
 void MCstopClients(Client c);
 str MCsuspendClient(int id);
diff --git a/cmake/monetdb-functions.cmake b/cmake/monetdb-functions.cmake
--- a/cmake/monetdb-functions.cmake
+++ b/cmake/monetdb-functions.cmake
@@ -8,7 +8,15 @@
 
 function(monetdb_hg_revision)
   # Get the current version control revision
-  if(EXISTS "${CMAKE_SOURCE_DIR}/.hg")
+  if(EXISTS "${CMAKE_SOURCE_DIR}/.hg_archival.txt")
+    execute_process(COMMAND "sed" "-n" "s/^node: 
\\([0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]\\).*/\\1/p"
 ".hg_archival.txt" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" RESULT_VARIABLE 
HG_RETURN_CODE
+      OUTPUT_VARIABLE HG_OUPUT_RES OUTPUT_STRIP_TRAILING_WHITESPACE)
+    if(HG_RETURN_CODE EQUAL 0 AND HG_OUPUT_RES)
+      set(MERCURIAL_ID "${HG_OUPUT_RES}" PARENT_SCOPE)
+    else()
+      message(FATAL_ERROR "Failed to find mercurial ID")
+    endif()
+  elseif(EXISTS "${CMAKE_SOURCE_DIR}/.hg")
     find_package(Hg)
     if(HG_FOUND)
       message("hg found: ${HG_EXECUTABLE}")
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.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -557,8 +557,7 @@ typedef struct {
 
        ATOMIC_TYPE refs;       /* reference count for this heap */
        bte farmid;             /* id of farm where heap is located */
-       bool hashash:1,         /* the string heap contains hash values */
-               cleanhash:1,    /* string heaps must clean hash */
+       bool cleanhash:1,       /* string heaps must clean hash */
                dirty:1,        /* specific heap dirty marker */
                remove:1;       /* remove storage file when freeing */
        storage_t storage;      /* storage mode (mmap/malloc). */
@@ -742,9 +741,10 @@ typedef struct {
 #define assert_shift_width(shift,width) assert(((shift) == 0 && (width) == 0) 
|| ((unsigned)1<<(shift)) == (unsigned)(width))
 
 #define GDKLIBRARY_MINMAX_POS  061042U /* first in Nov2019: no min/max 
position; no BBPinfo value */
-#define GDKLIBRARY_TAILN       061043U /* first after Oct2020: str offset 
heaps names don't take width into account */
+#define GDKLIBRARY_TAILN       061043U /* first in Jul2021: str offset heaps 
names don't take width into account */
+#define GDKLIBRARY_HASHASH     061044U /* first in Jul2021: hashash bit in 
string heaps */
 /* if the version number is updated, also fix snapshot_bats() in bat_logger.c 
*/
-#define GDKLIBRARY             061044U /* first after Oct2020 */
+#define GDKLIBRARY             061045U /* first after Jul2021 */
 
 typedef struct BAT {
        /* static bat properties */
@@ -972,6 +972,8 @@ gdk_export gdk_return BATdel(BAT *b, BAT
 
 gdk_export gdk_return BATreplace(BAT *b, BAT *p, BAT *n, bool force)
        __attribute__((__warn_unused_result__));
+gdk_export gdk_return BATupdate(BAT *b, BAT *p, BAT *n, bool force)
+       __attribute__((__warn_unused_result__));
 
 /* Functions to perform a binary search on a sorted BAT.
  * See gdk_search.c for details. */
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -748,7 +748,6 @@ heapmove(Heap *dst, Heap *src)
        dst->size = src->size;
        dst->base = src->base;
        dst->farmid = src->farmid;
-       dst->hashash = src->hashash;
        dst->cleanhash = src->cleanhash;
        dst->storage = src->storage;
        dst->newstorage = src->newstorage;
@@ -809,12 +808,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 +874,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;
@@ -82,8 +82,7 @@ insert_string_bat(BAT *b, BAT *n, struct
        ni = bat_iterator(n);
        tp = NULL;
        if (oldcnt == 0 || (!GDK_ELIMDOUBLES(b->tvheap) &&
-                           !GDK_ELIMDOUBLES(n->tvheap) &&
-                           b->tvheap->hashash == n->tvheap->hashash)) {
+                           !GDK_ELIMDOUBLES(n->tvheap))) {
                if (b->batRole == TRANSIENT || b->tvheap == n->tvheap) {
                        /* If b is in the transient farm (i.e. b will
                         * never become persistent), we try some
@@ -185,15 +184,13 @@ insert_string_bat(BAT *b, BAT *n, struct
                         * individually, but reusing the string in b's
                         * string heap. */
                        int match = 0, i;
-                       size_t len = b->tvheap->hashash ? 1024 * EXTRALEN : 0;
+                       size_t len = 0;
                        for (i = 0; i < 1024; i++) {
                                p = (BUN) (((double) rand() / RAND_MAX) * (cnt 
- 1));
                                p = canditer_idx(ci, p) - n->hseqbase;
                                off = BUNtvaroff(ni, p);
                                if (off < b->tvheap->free &&
-                                   strcmp(b->tvheap->base + off, 
n->tvheap->base + off) == 0 &&
-                                   (!b->tvheap->hashash ||
-                                    ((BUN *) (b->tvheap->base + off))[-1] == 
(n->tvheap->hashash ? ((BUN *) (n->tvheap->base + off))[-1] : 
strHash(n->tvheap->base + off))))
+                                   strcmp(b->tvheap->base + off, 
n->tvheap->base + off) == 0)
                                        match++;
                                len += (strlen(n->tvheap->base + off) + 8) & ~7;
                        }
@@ -358,9 +355,7 @@ insert_string_bat(BAT *b, BAT *n, struct
                        off = BUNtvaroff(ni, p); /* the offset */
                        tp = n->tvheap->base + off; /* the string */
                        if (off < b->tvheap->free &&
-                           strcmp(b->tvheap->base + off, tp) == 0 &&
-                           (!b->tvheap->hashash ||
-                            ((BUN *) (b->tvheap->base + off))[-1] == 
(n->tvheap->hashash ? ((BUN *) tp)[-1] : strHash(tp)))) {
+                           strcmp(b->tvheap->base + off, tp) == 0) {
                                /* we found the string at the same
                                 * offset in b's string heap as it was
                                 * in n's string heap, so we don't
@@ -496,7 +491,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;
@@ -1090,8 +1085,8 @@ BATdel(BAT *b, BAT *d)
  * The last in this series is a BATreplace, which replaces all the
  * buns mentioned.
  */
-gdk_return
-BATreplace(BAT *b, BAT *p, BAT *n, bool force)
+static gdk_return
+BATappend_or_update(BAT *b, BAT *p, BAT *n, bool mayappend, bool force)
 {
        lng t0 = GDKusec();
 
@@ -1116,12 +1111,14 @@ BATreplace(BAT *b, BAT *p, BAT *n, bool 
 
        BATiter bi = bat_iterator(b);
        BATiter ni = bat_iterator(n);
+#if 0 /* questionable: what if p point outside b, even if !mayappend? */
        if (BATcount(b) == 0 ||
            (b->tsorted && b->trevsorted &&
             n->tsorted && n->trevsorted &&
             ATOMcmp(b->ttype, BUNtail(bi, 0), BUNtail(ni, 0)) == 0)) {
                return GDK_SUCCEED;
        }
+#endif
 
        OIDXdestroy(b);
        IMPSdestroy(b);
@@ -1146,7 +1143,8 @@ BATreplace(BAT *b, BAT *p, BAT *n, bool 
                for (BUN i = 0, j = BATcount(p); i < j; i++) {
                        oid updid = BUNtoid(p, i);
 
-                       if (updid < b->hseqbase || updid >= hseqend) {
+                       if (updid < b->hseqbase ||
+                           (!mayappend && updid >= hseqend)) {
                                GDKerror("id out of range\n");
                                return GDK_FAIL;
                        }
@@ -1156,8 +1154,20 @@ BATreplace(BAT *b, BAT *p, BAT *n, bool 
                                return GDK_FAIL;
                        }
 
+                       const void *new = BUNtvar(ni, i);
+
+                       if (updid >= BATcount(b)) {
+                               assert(mayappend);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to