Changeset: a0592c6f2061 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a0592c6f2061
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
clients/Tests/exports.stable.out
gdk/gdk.h
gdk/gdk_batop.c
monetdb5/mal/mal.h
monetdb5/mal/mal_instruction.c
monetdb5/mal/mal_resource.c
monetdb5/modules/mal/sysmon.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_rank.c
sql/backends/monet5/sql_upgrades.c
sql/common/sql_types.c
sql/test/emptydb/Tests/check.stable.out
sql/test/emptydb/Tests/check.stable.out.32bit
sql/test/emptydb/Tests/check.stable.out.int128
Branch: default
Log Message:
Merge with Jul2021 branch.
diffs (truncated from 3513 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);
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/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -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_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -1085,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();
@@ -1111,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);
@@ -1141,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;
}
@@ -1151,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);
+ while (BATcount(b) < updid) {
+ if (BUNappend(b, ATOMnilptr(b->ttype),
force) != GDK_SUCCEED)
+ return GDK_FAIL;
+ }
+ if (BUNappend(b, new, force) != GDK_SUCCEED)
+ return GDK_FAIL;
+ continue;
+ }
+
const void *old = BUNtvar(bi, updid);
- const void *new = BUNtvar(ni, i);
bool isnil = atomcmp(new, nil) == 0;
anynil |= isnil;
if (b->tnil &&
@@ -1254,7 +1269,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;
}
@@ -1263,13 +1279,23 @@ BATreplace(BAT *b, BAT *p, BAT *n, bool
GDKerror("updating committed value\n");
return GDK_FAIL;
}
-
+ if (updid >= BATcount(b)) {
+ assert(mayappend);
+ while (BATcount(b) < updid) {
+ if (BUNappend(b, &(msk){false}, force)
!= GDK_SUCCEED)
+ return GDK_FAIL;
+ }
+ if (BUNappend(b, &(msk){mskGetVal(n, i)},
force) != GDK_SUCCEED)
+ return GDK_FAIL;
+ continue;
+ }
mskSetVal(b, updid, mskGetVal(n, i));
}
} else if (BATtdense(p)) {
oid updid = BUNtoid(p, 0);
- if (updid < b->hseqbase || updid + BATcount(p) > hseqend) {
+ if (updid < b->hseqbase ||
+ (!mayappend && updid + BATcount(p) > hseqend)) {
GDKerror("id out of range\n");
return GDK_FAIL;
}
@@ -1279,6 +1305,19 @@ BATreplace(BAT *b, BAT *p, BAT *n, bool
return GDK_FAIL;
}
+ if (updid >= BATcount(b)) {
+ assert(mayappend);
+ while (BATcount(b) < updid) {
+ if (BUNappend(b, ATOMnilptr(b->ttype), force)
!= GDK_SUCCEED)
+ return GDK_FAIL;
+ }
+ return BATappend(b, n, NULL, force);
+ }
+ while (updid + BATcount(n) > BATcount(b)) {
+ if (BUNappend(b, ATOMnilptr(b->ttype), force) !=
GDK_SUCCEED)
+ return GDK_FAIL;
+ }
+
/* we copy all of n, so if there are nils in n we get
* nils in b (and else we don't know) */
b->tnil = n->tnil;
@@ -1397,7 +1436,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;
}
@@ -1407,8 +1447,20 @@ BATreplace(BAT *b, BAT *p, BAT *n, bool
return GDK_FAIL;
}
+ const void *new = BUNtail(ni, i);
+
+ if (updid >= BATcount(b)) {
+ assert(mayappend);
+ while (BATcount(b) < updid) {
+ if (BUNappend(b, ATOMnilptr(b->ttype),
force) != GDK_SUCCEED)
+ return GDK_FAIL;
+ }
+ if (BUNappend(b, new, force) != GDK_SUCCEED)
+ return GDK_FAIL;
+ continue;
+ }
+
const void *old = BUNtloc(bi, updid);
- const void *new = BUNtail(ni, i);
bool isnil = atomcmp(new, nil) == 0;
anynil |= isnil;
if (b->tnil &&
@@ -1496,6 +1548,19 @@ BATreplace(BAT *b, BAT *p, BAT *n, bool
return GDK_SUCCEED;
}
+/* replace values from b at locations specified in p with values in n */
+gdk_return
+BATreplace(BAT *b, BAT *p, BAT *n, bool force)
+{
+ return BATappend_or_update(b, p, n, false, force);
+}
+
+/* like BATreplace, but p may specify locations beyond the end of b */
+gdk_return
+BATupdate(BAT *b, BAT *p, BAT *n, bool force)
+{
+ return BATappend_or_update(b, p, n, true, force);
+}
/*
* BAT Selections
diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h
--- a/monetdb5/mal/mal.h
+++ b/monetdb5/mal/mal.h
@@ -190,6 +190,10 @@ typedef struct MALBLK {
short keephistory; /* do we need the history at all */
int maxarg; /* keep track on the maximal
arguments used */
ptr replica; /* for the replicator tests */
+
+ /* During the run we keep track on the maximum number of concurrent
threads and memory claim */
+ int workers;
+ lng memory;
lng starttime; /* track when the query started, for
resource management */
lng runtime; /* average execution time of block in
ticks */
int calls; /* number of calls */
@@ -226,7 +230,7 @@ typedef struct MALSTK {
int pcup; /* saved pc upon a recursive
all */
oid tag; /* unique invocation call tag */
int workers; /* Actual number of concurrent
workers */
- lng memory; /* Actual memory claim
highwater mark */
+ lng memory; /* Actual memory claims for
highwater mark */
struct MALSTK *up; /* stack trace list */
struct MALBLK *blk; /* associated definition */
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
@@ -120,6 +120,8 @@ newMalBlk(int elements)
mb->help = NULL;
mb->binding[0] = 0;
mb->tag = 0;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list