Changeset: 67069f2e0deb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=67069f2e0deb
Modified Files:
        .hgtags
        MonetDB.spec
        NT/monetdb_config.h.in
        NT/rules.msc
        clients/mapilib/mapi.rc
        clients/odbc/driver/driver.rc
        clients/odbc/winsetup/setup.rc
        configure.ag
        debian/changelog
        gdk/gdk_heap.c
        gdk/gdk_join.c
        gdk/gdk_storage.c
        gdk/libbat.rc
        libversions
        monetdb5/tools/libmonetdb5.rc
        sql/server/rel_optimizer.c
        sql/server/rel_select.c
        sql/server/rel_unnest.c
        sql/storage/bat/bat_storage.c
        sql/storage/store.c
        sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out
        sql/test/analytics/Tests/analytics13.sql
        sql/test/subquery/Tests/subquery2.sql
        sql/test/subquery/Tests/subquery2.stable.out
        sql/test/subquery/Tests/subquery3.sql
        sql/test/subquery/Tests/subquery3.stable.out
        vertoo.data
Branch: grouping-analytics
Log Message:

Merge with default


diffs (truncated from 709 to 300 lines):

diff --git a/.hgtags b/.hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -739,3 +739,6 @@ 6566d90185b83ed95129db9ea68baf52f2de5cc7
 d4c1a8c3cbcd965169f1836eaa635101436db81c Nov2019_root
 90486f8f87ff0602f3ab143c629ba0aed2153d64 Nov2019_1
 90486f8f87ff0602f3ab143c629ba0aed2153d64 Nov2019_release
+13efc12c95a279d41dbc4440369defc1d7c21d0f Nov2019_3
+90486f8f87ff0602f3ab143c629ba0aed2153d64 Nov2019_release
+13efc12c95a279d41dbc4440369defc1d7c21d0f Nov2019_release
diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -1059,6 +1059,13 @@ fi
 %postun -p /sbin/ldconfig
 
 %changelog
+* Mon Nov 25 2019 Sjoerd Mullender <sjo...@acm.org> - 11.35.3-20191125
+- Rebuilt.
+- BZ#3533: SQL aggregate functions avg(), sum() and median() return an
+  error when used on a column with datatype interval second
+- BZ#6723: columns aliases duplicates should not be allowed. automatic
+  aliasing required.
+
 * Mon Nov 18 2019 Sjoerd Mullender <sjo...@acm.org> - 11.35.1-20191118
 - Rebuilt.
 - BZ#6134: Query produces error: HEAPalloc: Insufficient space for HEAP
diff --git a/debian/changelog b/debian/changelog
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,13 @@
+monetdb (11.35.3) unstable; urgency=low
+
+  * Rebuilt.
+  * BZ#3533: SQL aggregate functions avg(), sum() and median() return an
+    error when used on a column with datatype interval second
+  * BZ#6723: columns aliases duplicates should not be allowed. automatic
+    aliasing required.
+
+ -- Sjoerd Mullender <sjo...@acm.org>  Mon, 25 Nov 2019 12:34:22 +0100
+
 monetdb (11.35.1) unstable; urgency=low
 
   * Rebuilt.
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -61,7 +61,7 @@ HEAPcreatefile(int farmid, size_t *maxsz
                fn = path;
        }
        /* round up to mulitple of GDK_mmap_pagesize */
-       fd = GDKfdlocate(NOFARM, fn, "wxb", NULL);
+       fd = GDKfdlocate(NOFARM, fn, "wb", NULL);
        if (fd >= 0) {
                close(fd);
                base = GDKload(NOFARM, fn, NULL, *maxsz, maxsz, STORE_MMAP);
@@ -417,7 +417,7 @@ GDKupgradevarheap(BAT *b, var_t v, bool 
                const char *base = b->theap.base;
 
                /* first save heap in file with extra .tmp extension */
-               if ((fd = GDKfdlocate(b->theap.farmid, b->theap.filename, 
"wxb", "tmp")) < 0)
+               if ((fd = GDKfdlocate(b->theap.farmid, b->theap.filename, "wb", 
"tmp")) < 0)
                        return GDK_FAIL;
                while (size > 0) {
                        ret = write(fd, base, (unsigned) MIN(1 << 30, size));
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -3787,7 +3787,7 @@ BATrangejoin(BAT **r1p, BAT **r2p, BAT *
        struct canditer lci, rci;
        BAT *r1, *r2;
        BUN maxsize;
-       lng t0;
+       lng t0 = 0;
 
        ALGODEBUG t0 = GDKusec();
        *r1p = NULL;
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -212,8 +212,6 @@ GDKfdlocate(int farmid, const char *nme,
 
        if (strchr(mode, 'w')) {
                flags |= O_WRONLY | O_CREAT;
-               if (strchr(mode, 'x'))
-                       flags |= O_EXCL;
        } else if (!strchr(mode, '+')) {
                flags |= O_RDONLY;
        } else {
diff --git a/libversions b/libversions
--- a/libversions
+++ b/libversions
@@ -36,13 +36,13 @@
 
 # version of the GDK library (subdirectory gdk; also includes
 # common/options and common/utils)
-GDK_VERSION=19:0:0
+GDK_VERSION=19:1:0
 
 # version of the MAPI library (subdirectory clients/mapilib)
 MAPI_VERSION=12:2:0
 
 # version of the MONETDB5 library (subdirectory monetdb5, not including extras 
or sql)
-MONETDB5_VERSION=28:0:0
+MONETDB5_VERSION=28:1:0
 
 # version of the STREAM library (subdirectory common/stream)
 STREAM_VERSION=13:3:0
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
@@ -7493,7 +7493,7 @@ rel_simplify_predicates(int *changes, mv
                                        sql_subfunc *f = l->f;
                                        
                                        /* rewrite isnull(x) = TRUE/FALSE => x 
=/<> NULL */
-                                       if (!f->func->s && 
!strcmp(f->func->base.name, "isnull") && 
+                                       if (is_select(rel->op) && !f->func->s 
&& !strcmp(f->func->base.name, "isnull") && 
                                             is_atom(r->type) && r->l) { /* 
direct literal */
                                                atom *a = r->l;
                                                int flag = a->data.val.bval;
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -3070,7 +3070,7 @@ rel_binop(sql_query *query, sql_rel **re
        if (!l || !r)
                return NULL;
 
-       if (rel_check_card(*rel, l, r)) 
+       if (0 && rel_check_card(*rel, l, r)) 
                return NULL;
        return rel_binop_(sql, rel ? *rel : NULL, l, r, s, fname, ek.card);
 }
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
@@ -562,6 +562,77 @@ rel_bound_exp(mvc *sql, sql_rel *rel )
        return NULL;
 }
 
+/*
+ * join j was just rewriten, but some join expressions may now 
+ * be too low in de relation rel. These need to move up.
+ * */
+static void
+move_join_exps(mvc *sql, sql_rel *j, sql_rel *rel)
+{
+       node *n;
+       list *exps = rel->exps;
+       
+       if (!exps)
+               return;
+       rel->exps = sa_list(sql->sa);
+       if (!j->exps)
+               j->exps = sa_list(sql->sa);
+       for(n = exps->h; n; n = n->next){
+               sql_exp *e = n->data;
+
+               if (rel_find_exp(rel, e)) {
+                       if (exp_has_freevar(sql, e))
+                               rel_bind_var(sql, rel->l, e);
+                       append(rel->exps, e);
+               } else {
+                       if (exp_has_freevar(sql, e))
+                               rel_bind_var(sql, j->l, e);
+                       append(j->exps, e);
+               }
+       }
+}
+
+static sql_rel *
+rel_general_unnest(mvc *sql, sql_rel *rel, list *ad)
+{
+       /* current unnest only possible for equality joins, <, <> etc needs 
more work */
+       if (rel && (is_join(rel->op) || is_semi(rel->op)) && is_dependent(rel) 
&& ad) {
+               list *fd;
+               node *n, *m;
+               int nr;
+
+               sql_rel *l = rel->l, *r = rel->r;
+               /* rewrite T1 dependent join T2 -> T1 join D dependent join T2, 
where the T1/D join adds (equality) predicates (for the Domain (ad)) and D is 
are the distinct(projected(ad) from T1)  */
+               sql_rel *D = rel_project(sql->sa, rel_dup(l), exps_copy(sql, 
ad));
+               set_distinct(D);
+
+               r = rel_crossproduct(sql->sa, D, r, rel->op);
+               r->op = /*is_semi(rel->op)?op_left:*/op_join;
+               move_join_exps(sql, rel, r);
+               set_dependent(r);
+               r = rel_project(sql->sa, r, 
(is_semi(r->op))?sa_list(sql->sa):rel_projections(sql, r->r, NULL, 1, 1));
+               /* append ad + rename */
+               nr = sql->label+1;
+               sql->label += list_length(ad);
+               fd = exps_label(sql->sa, exps_copy(sql, ad), nr);
+               for (n = ad->h, m = fd->h; n && m; n = n->next, m = m->next) {
+                       sql_exp *l = n->data, *r = m->data, *e;
+
+                       l = exp_ref(sql->sa, l);
+                       r = exp_ref(sql->sa, r);
+                       e = exp_compare(sql->sa, l, r, 
(is_outerjoin(rel->op)|is_semi(rel->op))?cmp_equal_nil:cmp_equal);
+                       if (!rel->exps)
+                               rel->exps = sa_list(sql->sa);
+                       append(rel->exps, e);
+               }
+               list_merge(r->exps, fd, (fdup)NULL);
+               rel->r = r;
+               reset_dependent(rel);
+               return rel;
+       }
+       return rel;
+}
+
 static sql_rel *
 push_up_project(mvc *sql, sql_rel *rel, list *ad) 
 {
@@ -734,10 +805,25 @@ push_up_topn(mvc *sql, sql_rel *rel)
 }
 
 static sql_rel *
-push_up_select(mvc *sql, sql_rel *rel) 
+push_up_select(mvc *sql, sql_rel *rel, list *ad) 
 {
-       /* input rel is dependent join with on the right a project */ 
-       if (rel && /*(is_join(rel->op) ||*/( is_semi(rel->op)) && 
is_dependent(rel)) {
+       sql_rel *d = rel->l;
+       sql_rel *r = rel->r;
+       int inner = 0;
+
+       if (rel && is_dependent(rel) && r && r->op == op_select) {
+               sql_rel *rl = r->l;
+
+               if (rl && rel_has_freevar(sql, rl)) {
+                       list *inner_ad = rel_dependent_var(sql, d, rl);
+
+                       inner = !list_empty(inner_ad);
+               }
+       }
+       if (inner && is_left(rel->op) && !need_distinct(d)) 
+               return rel_general_unnest(sql, rel, ad);
+       /* input rel is dependent join with on the right a select */ 
+       if ((!inner || is_semi(rel->op)) && rel && is_dependent(rel)) {
                sql_rel *r = rel->r;
 
                if (r && r->op == op_select) { /* move into join */
@@ -754,9 +840,10 @@ push_up_select(mvc *sql, sql_rel *rel)
                        /* remove select */
                        rel->r = rel_dup(r->l);
                        rel_destroy(r);
+                       if (!inner)
+                               reset_dependent(rel);
                }
-       }
-       if (rel && is_join(rel->op) && is_dependent(rel)) {
+       } else if (rel && is_join(rel->op) && is_dependent(rel)) {
                sql_rel *r = rel->r;
                list *exps = r->exps;
 
@@ -920,36 +1007,6 @@ push_up_groupby(mvc *sql, sql_rel *rel, 
        return rel;
 }
 
-/*
- * join j was just rewriten, but some join expressions may now 
- * be too low in de relation rel. These need to move up.
- * */
-static void
-move_join_exps(mvc *sql, sql_rel *j, sql_rel *rel)
-{
-       node *n;
-       list *exps = rel->exps;
-       
-       if (!exps)
-               return;
-       rel->exps = sa_list(sql->sa);
-       if (!j->exps)
-               j->exps = sa_list(sql->sa);
-       for(n = exps->h; n; n = n->next){
-               sql_exp *e = n->data;
-
-               if (rel_find_exp(rel, e)) {
-                       if (exp_has_freevar(sql, e))
-                               rel_bind_var(sql, rel->l, e);
-                       append(rel->exps, e);
-               } else {
-                       if (exp_has_freevar(sql, e))
-                               rel_bind_var(sql, j->l, e);
-                       append(j->exps, e);
-               }
-       }
-}
-
 static sql_rel *
 push_up_select_l(mvc *sql, sql_rel *rel) 
 {
@@ -1131,47 +1188,6 @@ push_up_table(mvc *sql, sql_rel *rel, li
        return rel;
 }
 
-static sql_rel *
-rel_general_unnest(mvc *sql, sql_rel *rel, list *ad)
-{
-       /* current unnest only possible for equality joins, <, <> etc needs 
more work */
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to