Changeset: 2a4270b6947c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2a4270b6947c
Branch: default
Log Message:

Merge with Sep2022 branch.


diffs (196 lines):

diff --git a/gdk/ChangeLog.Jan2022 b/gdk/ChangeLog.Jan2022
--- a/gdk/ChangeLog.Jan2022
+++ b/gdk/ChangeLog.Jan2022
@@ -1,3 +1,7 @@
 # ChangeLog file for GDK
 # This file is updated with Maddlog
 
+* Wed Aug 24 2022 Sjoerd Mullender <sjo...@acm.org>
+- The median_avg and quantile_avg returned bogus results in the
+  non-grouped case (i.e. something like SELECT sys.median_avg(i) FROM t).
+
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -3908,8 +3908,16 @@ BATmax(BAT *b, void *aggr)
 
 #define DO_QUANTILE_AVG(TPE)                                           \
        do {                                                            \
-               TPE low = *(TPE*) BUNtloc(bi, r + (BUN) hi);            \
-               TPE high = *(TPE*) BUNtloc(bi, r + (BUN) lo);           \
+               BUN idxlo, idxhi;                                       \
+               if (ords) {                                             \
+                       idxlo = ords[r + (BUN) lo] - b->hseqbase;       \
+                       idxhi = ords[r + (BUN) hi] - b->hseqbase;       \
+               } else {                                                \
+                       idxlo = r + (BUN) lo;                           \
+                       idxhi = r + (BUN) hi;                           \
+               }                                                       \
+               TPE low = *(TPE*) BUNtloc(bi, idxhi);                   \
+               TPE high = *(TPE*) BUNtloc(bi, idxlo);                  \
                if (is_##TPE##_nil(low) || is_##TPE##_nil(high)) {      \
                        val = dbl_nil;                                  \
                        nils++;                                         \
@@ -4074,6 +4082,7 @@ doBATgroupquantile(BAT *b, BAT *g, BAT *
                                double f = (p - r - 1) * quantile;
                                double lo = floor(f);
                                double hi = ceil(f);
+                               const oid *const ords = NULL;
                                switch (ATOMbasetype(tp)) {
                                case TYPE_bte:
                                        DO_QUANTILE_AVG(bte);
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -2180,8 +2180,8 @@ backup_new(Heap *hp, bool lock)
        struct stat st;
 
        /* check for an existing X.new in BATDIR, BAKDIR and SUBDIR */
-       batpath = GDKfilepath(hp->farmid, BATDIR, hp->filename, ".new");
-       bakpath = GDKfilepath(hp->farmid, BAKDIR, hp->filename, ".new");
+       batpath = GDKfilepath(hp->farmid, BATDIR, hp->filename, "new");
+       bakpath = GDKfilepath(hp->farmid, BAKDIR, hp->filename, "new");
        if (batpath != NULL && bakpath != NULL) {
                /* file actions here interact with the global commits */
                if (lock)
diff --git a/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.test 
b/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.test
--- a/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.test
+++ b/sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.test
@@ -6,12 +6,12 @@ 5.500
 query R rowsort
 SELECT median_avg(c1) FROM (VALUES (1), (NULL)) t1(c1)
 ----
-NULL
+1.000
 
 query R rowsort
 SELECT quantile_avg(c1, 0.2) FROM (VALUES (1), (NULL)) t1(c1)
 ----
-NULL
+1.000
 
 query R rowsort
 SELECT quantile_avg(c1, 0.1) FROM (VALUES (1), (10)) t1(c1)
diff --git a/sql/test/sys-schema/Tests/ValidateSystemCatalogTables.SQL.py 
b/sql/test/sys-schema/Tests/ValidateSystemCatalogTables.SQL.py
--- a/sql/test/sys-schema/Tests/ValidateSystemCatalogTables.SQL.py
+++ b/sql/test/sys-schema/Tests/ValidateSystemCatalogTables.SQL.py
@@ -17,7 +17,11 @@ if __name__ == '__main__':
     cmd = ['java', CLIENT, '-h', HOST, '-p', MAPIPORT, '-d', TSTDB, '-f', 
os.path.join(TSTSRCBASE, TSTDIR, 'Tests', 'ValidateSystemCatalogTables.sql')]
     try:
         p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, encoding='utf-8')
-        sys.stderr.write(p.stdout)
-        sys.stderr.write(p.stderr)
+        pout = str(p.stdout)
+        if pout != "":
+            print(pout)
+        perr = str(p.stderr)
+        if perr != "":
+            print(perr)
     except CalledProcessError as e:
         raise SystemExit(e.stderr)
diff --git a/tools/merovingian/ChangeLog.Jan2022 
b/tools/merovingian/ChangeLog.Jan2022
--- a/tools/merovingian/ChangeLog.Jan2022
+++ b/tools/merovingian/ChangeLog.Jan2022
@@ -1,3 +1,7 @@
 # ChangeLog file for sql/src/backends/monet5/merovingian
 # This file is updated with mchangelog
 
+* Wed Aug 24 2022 Sjoerd Mullender <sjo...@acm.org>
+- In certain cases a log message was logged over and over again.
+  This has been fixed.
+
diff --git a/tools/merovingian/daemon/handlers.c 
b/tools/merovingian/daemon/handlers.c
--- a/tools/merovingian/daemon/handlers.c
+++ b/tools/merovingian/daemon/handlers.c
@@ -298,7 +298,7 @@ childhandler(void)
                while (p != NULL) {
                        if (p->pid == pid) {
                                /* log everything that's still in the pipes */
-                               logFD(p, 0, "MSG", p->dbname, (long long 
int)p->pid, _mero_logfile, 1);
+                               logFD(p, 0, "MSG", p->dbname, (long long 
int)p->pid, _mero_logfile, true);
                                p->pid = -1;    /* indicate the process is dead 
*/
 
                                /* close the descriptors */
diff --git a/tools/merovingian/daemon/merovingian.c 
b/tools/merovingian/daemon/merovingian.c
--- a/tools/merovingian/daemon/merovingian.c
+++ b/tools/merovingian/daemon/merovingian.c
@@ -139,6 +139,7 @@ logFD(dpair dp, int fd, const char *type
        time_t now;
        char buf[8096];
        ssize_t len = 0;
+       ssize_t last = 0;
        char *p, *q;
        struct tm *tmp;
        char mytime[20];
@@ -149,8 +150,10 @@ logFD(dpair dp, int fd, const char *type
                        ssize_t n;
                  repeat:
                        n = read(dp->input[fd].fd, buf + len, sizeof(buf) - len 
- 1);
-                       if (n <= 0)
+                       if (n <= 0) {
+                               rest = false;
                                break;
+                       }
                        len += n;
                        buf[len] = 0;
                } while (buf[len - 1] != '\n' && len < (ssize_t) sizeof(buf) - 
1);
@@ -159,7 +162,7 @@ logFD(dpair dp, int fd, const char *type
                now = time(NULL);
                tmp = localtime(&now);
                strftime(mytime, sizeof(mytime), "%Y-%m-%d %H:%M:%S", tmp);
-               for (q = buf; *q; q = p + 1) {
+               for (q = buf + last; *q; q = p + 1) {
                        p = strchr(q, '\n');
                        if (p == NULL) {
                                if (q > buf) {
@@ -167,6 +170,7 @@ logFD(dpair dp, int fd, const char *type
                                         * just continue reading */
                                        len = strlen(q);
                                        memmove(buf, q, len);
+                                       last = 0;
                                        goto repeat;
                                }
                                /* we must have received a ridiculously long 
line */
@@ -177,6 +181,7 @@ logFD(dpair dp, int fd, const char *type
                                                mytime, type, dbname, pid, q);
                                break;
                        }
+                       last = p + 1 - buf;
                        if (p == q) {
                                /* empty line, don't bother */
                                continue;
@@ -299,18 +304,18 @@ logListener(void *x)
                                for (int i = 0; i < nfds; i++) {
                                        if (pfd[i].fd == w->input[0].fd && 
pfd[i].revents & POLLIN)
                                                logFD(w, 0, "MSG", w->dbname,
-                                                         (long long 
int)w->pid, _mero_logfile, 0);
+                                                         (long long 
int)w->pid, _mero_logfile, false);
                                        else if (pfd[i].fd == w->input[1].fd && 
pfd[i].revents & POLLIN)
                                                logFD(w, 1, "ERR", w->dbname,
-                                                         (long long 
int)w->pid, _mero_logfile, 0);
+                                                         (long long 
int)w->pid, _mero_logfile, false);
                                }
 #else
                                if (FD_ISSET(w->input[0].fd, &readfds) != 0)
                                        logFD(w, 0, "MSG", w->dbname,
-                                                 (long long int)w->pid, 
_mero_logfile, 0);
+                                                 (long long int)w->pid, 
_mero_logfile, false);
                                if (w->input[1].fd != w->input[0].fd && 
FD_ISSET(w->input[1].fd, &readfds) != 0)
                                        logFD(w, 1, "ERR", w->dbname,
-                                                 (long long int)w->pid, 
_mero_logfile, 0);
+                                                 (long long int)w->pid, 
_mero_logfile, false);
 #endif
                                w->flag &= ~1;
                        }
diff --git a/tools/merovingian/daemon/multiplex-funnel.c 
b/tools/merovingian/daemon/multiplex-funnel.c
--- a/tools/merovingian/daemon/multiplex-funnel.c
+++ b/tools/merovingian/daemon/multiplex-funnel.c
@@ -866,7 +866,7 @@ multiplexThread(void *d)
        while (p != NULL) {
                if (p->type == MEROFUN && strcmp(p->dbname, m->name) == 0) {
                        /* log everything that's still in the pipes */
-                       logFD(p, 0, "MSG", p->dbname, (long long int)p->pid, 
_mero_logfile, 1);
+                       logFD(p, 0, "MSG", p->dbname, (long long int)p->pid, 
_mero_logfile, true);
                        /* remove from the list */
                        q->next = p->next;
                        /* close the descriptors */
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to