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