Changeset: 7bc61183af34 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7bc61183af34
Branch: default
Log Message:

Merge with Oct2020 branch.


diffs (144 lines):

diff --git a/monetdb5/modules/mal/mal_mapi.c b/monetdb5/modules/mal/mal_mapi.c
--- a/monetdb5/modules/mal/mal_mapi.c
+++ b/monetdb5/modules/mal/mal_mapi.c
@@ -441,8 +441,8 @@ SERVERlistenThread(SOCKET *Sock)
                                        TRC_CRITICAL(MAL_SERVER, "Unknown 
command type in first byte\n");
                                        continue;
                        }
+               }
 #endif
-               }
 
                data = GDKmalloc(sizeof(*data));
                if( data == NULL){
@@ -709,15 +709,11 @@ SERVERlisten(int port, const char *usock
                throw(ILLARG, "mal_mapi.listen", OPERATION_FAILED ": port 
number should be between 0 and 65535");
        }
 
-       psock = GDKmalloc(sizeof(socks));
-       if (psock == NULL)
-               throw(MAL,"mal_mapi.listen", SQLSTATE(HY013) MAL_MALLOC_FAIL);
        socks[0] = socks[1] = socks[2] = INVALID_SOCKET;
 
        if (listenaddr == NULL || strcmp(listenaddr, "none") != 0) {
                char *msg = start_listen(socks, &port, listenaddr, host, 
sizeof(host), maxusers);
                if (msg != MAL_SUCCEED) {
-                       GDKfree(psock);
                        return msg;
                }
        }
@@ -732,7 +728,6 @@ SERVERlisten(int port, const char *usock
                                closesocket(socks[0]);
                        if (socks[1] != INVALID_SOCKET)
                                closesocket(socks[1]);
-                       GDKfree(psock);
                        throw(MAL, "mal_mapi.listen",
                                  OPERATION_FAILED ": UNIX socket path too 
long: %s",
                                  usockfile);
@@ -753,7 +748,6 @@ SERVERlisten(int port, const char *usock
                                closesocket(socks[0]);
                        if (socks[1] != INVALID_SOCKET)
                                closesocket(socks[1]);
-                       GDKfree(psock);
                        throw(IO, "mal_mapi.listen",
                                  OPERATION_FAILED ": creation of UNIX socket 
failed: %s", err);
                }
@@ -772,7 +766,6 @@ SERVERlisten(int port, const char *usock
                        if (socks[1] != INVALID_SOCKET)
                                closesocket(socks[1]);
                        closesocket(socks[2]);
-                       GDKfree(psock);
                        return e;
                }
                if (bind(socks[2], (struct sockaddr *) &userver, length) == 
SOCKET_ERROR) {
@@ -787,7 +780,6 @@ SERVERlisten(int port, const char *usock
                                closesocket(socks[1]);
                        closesocket(socks[2]);
                        (void) remove(usockfile);
-                       GDKfree(psock);
                        throw(IO, "mal_mapi.listen",
                                  OPERATION_FAILED
                                  ": binding to UNIX socket file %s failed: %s",
@@ -805,7 +797,6 @@ SERVERlisten(int port, const char *usock
                                closesocket(socks[1]);
                        closesocket(socks[2]);
                        (void) remove(usockfile);
-                       GDKfree(psock);
                        throw(IO, "mal_mapi.listen",
                                  OPERATION_FAILED
                                  ": setting UNIX socket file %s to listen 
failed: %s",
@@ -818,17 +809,21 @@ SERVERlisten(int port, const char *usock
         * predictable... */
        srand((unsigned int) GDKusec());
 
+       psock = GDKmalloc(sizeof(socks));
+       if (psock == NULL) {
+               for (int i = 0; i < 3; i++) {
+                       if (socks[i] != INVALID_SOCKET)
+                               closesocket(socks[i]);
+               }
+               throw(MAL,"mal_mapi.listen", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+       }
        memcpy(psock, socks, sizeof(socks));
        if (MT_create_thread(&pid, (void (*)(void *)) SERVERlistenThread, psock,
                                                 MT_THR_DETACHED, 
"listenThread") != 0) {
-               if (socks[0] != INVALID_SOCKET)
-                       closesocket(socks[0]);
-               if (socks[1] != INVALID_SOCKET)
-                       closesocket(socks[1]);
-#ifdef HAVE_SYS_UN_H
-               if (socks[2] != INVALID_SOCKET)
-                       closesocket(socks[2]);
-#endif
+               for (int i = 0; i < 3; i++) {
+                       if (socks[i] != INVALID_SOCKET)
+                               closesocket(socks[i]);
+               }
                GDKfree(psock);
                throw(MAL, "mal_mapi.listen", OPERATION_FAILED ": starting 
thread failed");
        }
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -5983,15 +5983,6 @@ rel_groupby_distinct(visitor *v, sql_rel
                }
        }
 
-       /*if the input expressions are atoms, drop distinct property */
-       if (is_groupby(rel->op) && !list_empty(rel->exps)) {
-               for (n=rel->exps->h; n ; n = n->next) {
-                       sql_exp *e = n->data;
-                       if (e->type == e_aggr && need_distinct(e) && (!e->l || 
exps_are_atoms(e->l)))
-                               set_nodistinct(e);
-               }
-       }
-
        if (is_groupby(rel->op)) {
                sql_rel *l = rel->l;
                if (!l || is_groupby(l->op))
diff --git a/sql/test/miscellaneous/Tests/groupby_error.sql 
b/sql/test/miscellaneous/Tests/groupby_error.sql
--- a/sql/test/miscellaneous/Tests/groupby_error.sql
+++ b/sql/test/miscellaneous/Tests/groupby_error.sql
@@ -193,7 +193,7 @@ SELECT CAST(COUNT ( DISTINCT + CAST ( NU
        -- 93
        -- 93
 select group_concat(distinct 'a') from tab0;
-       -- a,a,a
+       -- a
 INSERT INTO "tab0" VALUES (83, 0, 38), (26, 0, 79), (43, 81, 24);
 select group_concat(distinct col1, col2) from tab0 group by col0;
        -- 0
diff --git a/sql/test/miscellaneous/Tests/groupby_error.stable.out 
b/sql/test/miscellaneous/Tests/groupby_error.stable.out
--- a/sql/test/miscellaneous/Tests/groupby_error.stable.out
+++ b/sql/test/miscellaneous/Tests/groupby_error.stable.out
@@ -501,8 +501,8 @@ project (
 % .%1 # table_name
 % %1 # name
 % clob # type
-% 5 # length
-[ "a,a,a"      ]
+% 1 # length
+[ "a"  ]
 #INSERT INTO "tab0" VALUES (83, 0, 38), (26, 0, 79), (43, 81, 24);
 [ 3    ]
 #ROLLBACK;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to