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

Reply via email to