Changeset: 9d71fc88713d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9d71fc88713d
Added Files:
        sql/test/BugTracker-2019/Tests/slow-inner-join.Bug-6737.sql
        sql/test/BugTracker-2019/Tests/slow-inner-join.Bug-6737.stable.err
        sql/test/BugTracker-2019/Tests/slow-inner-join.Bug-6737.stable.out
        sql/test/rename/Tests/rename11.py
        sql/test/rename/Tests/rename11.stable.err
        sql/test/rename/Tests/rename11.stable.out
Modified Files:
        .hgtags
        MonetDB.spec
        NT/monetdb_config.h.in
        NT/rules.msc
        buildtools/selinux/monetdb.te
        clients/mapilib/mapi.c
        clients/mapilib/mapi.rc
        clients/odbc/driver/driver.rc
        clients/odbc/winsetup/setup.rc
        configure.ag
        debian/changelog
        gdk/libbat.rc
        monetdb5/mal/mal_profiler.c
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/tools/libmonetdb5.rc
        sql/backends/monet5/sql_upgrades.c
        sql/server/rel_rel.c
        sql/server/rel_unnest.c
        sql/server/rel_updates.c
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_storage.h
        sql/storage/bat/bat_utils.c
        sql/storage/bat/bat_utils.h
        sql/storage/store.c
        
sql/test/BugTracker-2018/Tests/sqlitelogictest-having-not-null-not-in.Bug-6557.sql
        
sql/test/BugTracker-2018/Tests/sqlitelogictest-having-not-null-not-in.Bug-6557.stable.out
        sql/test/BugTracker-2019/Tests/All
        sql/test/rename/Tests/All
        testing/monet_options.py.in
        vertoo.data
Branch: candidate-exceptions
Log Message:

Merge with default branch.


diffs (truncated from 1652 to 300 lines):

diff --git a/.hgtags b/.hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -727,3 +727,6 @@ 643dfa328c71d7891c8358b4969aa9ebf81e0f4c
 2c9089e1dde297caaf347bf27f88b10e5622a735 Apr2019_release
 2366418b3d88b268117a6f981638c4da686497aa Apr2019_5
 2366418b3d88b268117a6f981638c4da686497aa Apr2019_SP1_release
+02147798590c5f9d7c837bec07277313c1fa29cc Apr2019_7
+2366418b3d88b268117a6f981638c4da686497aa Apr2019_SP1_release
+02147798590c5f9d7c837bec07277313c1fa29cc Apr2019_SP1_release
diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -1061,6 +1061,9 @@ done
 %postun -p /sbin/ldconfig
 
 %changelog
+* Wed Aug 07 2019 Panagiotis Koutsourakis <kutsu...@monetdbsolutions.com> - 
11.33.7-20190807
+- Rebuilt.
+
 * Thu Aug 01 2019 Panagiotis Koutsourakis <kutsu...@monetdbsolutions.com> - 
11.33.5-20190801
 - Rebuilt.
 - BZ#6697: Duplicate expressions not eliminated with long CASE statement
diff --git a/buildtools/selinux/monetdb.te b/buildtools/selinux/monetdb.te
--- a/buildtools/selinux/monetdb.te
+++ b/buildtools/selinux/monetdb.te
@@ -1,4 +1,4 @@
-policy_module(monetdb, 0.5)
+policy_module(monetdb, 0.6)
 # The above line declares that this file is a SELinux policy file. Its
 # name is monetdb, so the file should be saved as monetdb.te
 
@@ -8,12 +8,14 @@ require {
        type tmp_t;
        type var_t;
        type user_home_t;
+       type unconfined_service_t;      # for EPEL 7
+       type proc_t;                    # for EPEL 7
        class dir { read };
        class fd { use };
        class fifo_file { getattr read write };
        class file { entrypoint execute getattr manage_file_perms map open read 
};
        class netlink_selinux_socket create_socket_perms;
-       class process { rlimitinh siginh signal sigterm sigkill transition };
+       class process { rlimitinh siginh signal sigchld sigterm sigkill 
transition };
        class tcp_socket create_stream_socket_perms;
        class udp_socket create_stream_socket_perms;
        class unix_dgram_socket create_socket_perms;
@@ -41,6 +43,10 @@ type_transition monetdbd_t mserver5_exec
 
 # monetdbd must be allowed to kill the server it started
 allow monetdbd_t mserver5_t:process { sigterm sigkill };
+# on EPEL 7 we need these as well
+allow mserver5_t monetdbd_t:process sigchld;
+allow monetdbd_t unconfined_service_t:process signal;
+allow mserver5_t proc_t:file { open read getattr };      # read /proc/meminfo
 
 # declare a type for the systemd unit file (monetdbd.service)
 type monetdbd_unit_file_t;
@@ -123,6 +129,9 @@ manage_sock_files_pattern(mserver5_t, ms
 allow mserver5_t monetdbd_t:fifo_file { read write getattr };
 allow mserver5_t monetdbd_t:unix_stream_socket { read write getopt shutdown };
 allow mserver5_t var_t:dir { read };
+# we want to be able to read some cgroup files
+fs_search_cgroup_dirs(mserver5_t);
+fs_read_cgroup_files(mserver5_t);
 allow monetdbd_t var_t:dir { read };
 gen_tunable(mserver5_can_read_home, false)
 tunable_policy(`mserver5_can_read_home', `
diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -2483,6 +2483,24 @@ mapi_reconnect(Mapi mid)
                        return mapi_setError(mid, errbuf, "mapi_reconnect", 
MERROR);
                }
 #endif
+               /* compare our own address with that of our peer and
+                * if they are the same, we were connected to our own
+                * socket, so then we can't use this connection */
+               union {
+                       struct sockaddr s;
+                       struct sockaddr_in i;
+               } myaddr, praddr;
+               socklen_t myaddrlen, praddrlen;
+               myaddrlen = (socklen_t) sizeof(myaddr);
+               praddrlen = (socklen_t) sizeof(praddr);
+               if (getsockname(s, &myaddr.s, &myaddrlen) == 0 &&
+                   getpeername(s, &praddr.s, &praddrlen) == 0 &&
+                   myaddr.i.sin_addr.s_addr == praddr.i.sin_addr.s_addr &&
+                   myaddr.i.sin_port == praddr.i.sin_port) {
+                       closesocket(s);
+                       return mapi_setError(mid, "connected to self",
+                                            "mapi_reconnect", MERROR);
+               }
        }
 
        mid->to = socket_wstream(s, "Mapi client write");
@@ -2989,6 +3007,7 @@ close_connection(Mapi mid)
                close_stream(mid->from);
                mid->from = 0;
        }
+       mid->redircnt = 0;
        mapi_log_record(mid, "Connection closed\n");
 }
 
diff --git a/debian/changelog b/debian/changelog
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+monetdb (11.33.7) unstable; urgency=low
+
+  * Rebuilt.
+
+ -- Panagiotis Koutsourakis <kutsu...@monetdbsolutions.com>  Wed, 07 Aug 2019 
13:35:13 +0200
+
 monetdb (11.33.5) unstable; urgency=low
 
   * Rebuilt.
diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -167,7 +167,7 @@ renderProfilerEvent(MalBlkPtr mb, MalStk
        logadd("\"pc\":%d,%s", mb?getPC(mb,pci):0, prettify);
        logadd("\"tag\":%d,%s", stk?stk->tag:0, prettify);
        logadd("\"module\":\"%s\",%s", pci->modname ? pci->modname : "", 
prettify);
-       if (strcmp(pci->modname, "user") == 0) {
+       if (pci->modname && strcmp(pci->modname, "user") == 0) {
                int caller_tag = 0;
                if(stk && stk->up) {
                        caller_tag = stk->up->tag;
diff --git a/monetdb5/optimizer/opt_mergetable.c 
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -1781,7 +1781,7 @@ OPTmergetableImplementation(Client cntxt
        matlist_t ml;
        int oldtop, fm, fn, fo, fe, i, k, m, n, o, e, slimit, bailout = 0;
        int size=0, match, actions=0, distinct_topn = 0, /*topn_res = 0,*/ 
groupdone = 0, *vars;
-       char buf[256];
+       char buf[256], *group_input;
        lng usec = GDKusec();
        str msg = MAL_SUCCEED;
 
@@ -1794,12 +1794,15 @@ OPTmergetableImplementation(Client cntxt
        fprintFunction(stderr, mb, 0, LIST_MAL_ALL);
 #endif
 
-       vars= (int*) GDKmalloc(sizeof(int)* mb->vtop);
-       if( vars == NULL){
+       vars = (int*) GDKmalloc(sizeof(int)* mb->vtop);
+       group_input = (char*) GDKzalloc(sizeof(char)* mb->vtop);
+       if (vars == NULL || group_input == NULL){
+               if (vars)
+                       GDKfree(vars);
                throw(MAL, "optimizer.mergetable", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
        }
        /* check for bailout conditions */
-       for (i = 1; i < oldtop; i++) {
+       for (i = 1; i < oldtop && !bailout; i++) {
                int j;
 
                p = old[i];
@@ -1820,9 +1823,30 @@ OPTmergetableImplementation(Client cntxt
                        if (getFunctionId(q) == subgroupdoneRef || 
getFunctionId(q) == groupdoneRef)
                                groupdone = 1;
                }
+               /* bail out if there is a input for a group, which has been 
used for a group already (solves problems with qube like groupings) */
+               if (getModuleId(p) == groupRef &&
+                  (getFunctionId(p) == subgroupRef ||
+                       getFunctionId(p) == subgroupdoneRef ||
+                       getFunctionId(p) == groupRef ||
+                       getFunctionId(p) == groupdoneRef)) {
+                       int input = getArg(p, p->retc); /* argument one is 
first input */
+
+                       if (group_input[input]) {
+#ifdef DEBUG_OPT_MERGETABLE
+                               fprintf(stderr,"WARNING::: mergetable bailout 
on group input reuse in group statement \n");
+#endif
+                               bailout = 1;
+                       }
+
+                       group_input[input] = 1;
+               }
                if (getModuleId(p) == algebraRef && 
-                   getFunctionId(p) == selectNotNilRef )
+                   getFunctionId(p) == selectNotNilRef ) {
+#ifdef DEBUG_OPT_MERGETABLE
+                       fprintf(stderr,"WARNING::: mergetable bailout not nil 
ref \n");
+#endif
                        bailout = 1;
+               }
                /*
                if (isTopn(p))
                        topn_res = getArg(p, 0);
@@ -1831,15 +1855,14 @@ OPTmergetableImplementation(Client cntxt
                        //distinct_topn = 1;
        }
        GDKfree(vars);
+       GDKfree(group_input);
 
        ml.horigin = 0;
        ml.torigin = 0;
        ml.v = 0;
        ml.vars = 0;
-       if (bailout){
-               msg = createException(MAL,"optimizer.mergetable", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+       if (bailout)
                goto cleanup;
-       }
 
        /* the number of MATs is limited to the variable stack*/
        ml.size = mb->vtop;
diff --git a/sql/backends/monet5/sql_upgrades.c 
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -1042,6 +1042,7 @@ sql_update_mar2018(Client c, mvc *sql)
                if (schema)
                        pos += snprintf(buf + pos, bufsize - pos, "set schema 
\"%s\";\n", schema);
                pos += snprintf(buf + pos, bufsize - pos, "commit;\n");
+               assert(pos < bufsize);
                printf("Running database upgrade commands:\n%s\n", buf);
                err = SQLstatementIntern(c, &buf, "update", 1, 0, NULL);
        }
@@ -1591,6 +1592,7 @@ sql_update_apr2019(Client c, mvc *sql)
                if (schema)
                        pos += snprintf(buf + pos, bufsize - pos, "set schema 
\"%s\";\n", schema);
                pos += snprintf(buf + pos, bufsize - pos, "commit;\n");
+               assert(pos < bufsize);
                printf("Running database upgrade commands:\n%s\n", buf);
                err = SQLstatementIntern(c, &buf, "update", 1, 0, NULL);
        }
@@ -1976,6 +1978,7 @@ sql_update_deltas(Client c, mvc *sql)
                        " and name in ('deltas') and type = %d;\n", F_UNION);
        if (schema)
                pos += snprintf(buf + pos, bufsize - pos, "set schema 
\"%s\";\n", schema);
+       pos += snprintf(buf + pos, bufsize - pos, "commit;\n");
        assert(pos < bufsize);
 
        printf("Running database upgrade commands:\n%s\n", buf);
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -807,7 +807,8 @@ rel_groupby(mvc *sql, sql_rel *l, list *
                        e->card = rel->card;
                        if (!exp_name(e))
                                exp_label(sql->sa, e, ++sql->label);
-                       ne = exp_column(sql->sa, exp_relname(e), exp_name(e), 
exp_subtype(e), exp_card(e), has_nil(e), 0);
+                       ne = exp_ref(sql->sa, e);
+                       ne = exp_propagate(sql->sa, ne, e);
                        append(aggrs, ne);
                }
        }
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -393,7 +393,7 @@ push_up_project(mvc *sql, sql_rel *rel)
        if (rel && is_join(rel->op) && is_dependent(rel)) {
                sql_rel *r = rel->r;
 
-               if (r && r->op == op_project) {
+               if (r && r->op == op_project && r->l) {
                        node *m;
                        /* move project up, ie all attributes of left + the old 
expression list */
                        sql_rel *n = rel_project( sql->sa, rel, 
@@ -415,6 +415,12 @@ push_up_project(mvc *sql, sql_rel *rel)
                        r->l = NULL;
                        rel_destroy(r);
                        return n;
+               } else if (r && r->op == op_project && !r->l) {
+                       sql_rel *l = rel->l;
+
+                       rel->l = NULL;
+                       rel_destroy(rel);
+                       return l;
                }
        }
        /* a dependent semi/anti join with a project on the right side, could 
be removed */
diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c
--- a/sql/server/rel_updates.c
+++ b/sql/server/rel_updates.c
@@ -1403,7 +1403,7 @@ extern sql_rel *rel_list(sql_allocator *
 
 static sql_rel *
 validate_merge_update_delete(mvc *sql, sql_table *t, str alias, sql_rel 
*joined_table, tokens upd_token,
-                                                        sql_rel *upd_del, 
sql_rel *bt, sql_rel *join_rel)
+                                                        sql_rel *upd_del, 
sql_rel *bt, sql_rel *extra_selection)
 {
        char buf[BUFSIZ];
        sql_exp *aggr, *bigger, *ex;
@@ -1415,7 +1415,7 @@ validate_merge_update_delete(mvc *sql, s
 
        assert(upd_token == SQL_UPDATE || upd_token == SQL_DELETE);
 
-       groupby = rel_groupby(sql, rel_dup(join_rel), NULL); //aggregate by all 
column and count (distinct values)
+       groupby = rel_groupby(sql, rel_dup(extra_selection), NULL); //aggregate 
by all column and count (distinct values)
        groupby->r = rel_projections(sql, bt, NULL, 1, 0);
        aggr = exp_aggr(sql->sa, NULL, cf, 0, 0, groupby->card, 0);
        (void) rel_groupby_add_aggr(sql, groupby, aggr);
@@ -1454,7 +1454,8 @@ merge_into_table(sql_query *query, dlist
        char *sname = qname_schema(qname), *tname = qname_table(qname), 
*alias_name;
        sql_schema *s = NULL;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to