Changeset: 64e88b8fedac for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=64e88b8fedac Added Files: sql/test/BugTracker-2014/Tests/aggregates-intervals.Bug-3533.sql sql/test/BugTracker-2014/Tests/aggregates-intervals.Bug-3533.stable.err sql/test/BugTracker-2014/Tests/aggregates-intervals.Bug-3533.stable.out sql/test/BugTracker-2017/Tests/heapextend.Bug-6134.stable.err sql/test/BugTracker-2017/Tests/heapextend.Bug-6134.stable.out Removed Files: sql/test/BugTracker-2016/Tests/consolidated_table.Bug-3954.sql sql/test/BugTracker-2017/Tests/multiplevalues.Bug-6336.sql Modified Files: gdk/ChangeLog.Apr2019 gdk/ChangeLog.Nov2019 sql/backends/monet5/sql_upgrades.c sql/scripts/39_analytics.sql sql/server/rel_dump.c sql/server/rel_optimizer.c sql/server/rel_partition.c sql/server/sql_partition.c sql/test/BugTracker-2014/Tests/All sql/test/BugTracker-2017/Tests/All sql/test/BugTracker-2017/Tests/heapextend.Bug-6134.sql.in sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.int128 sql/test/sys-schema/Tests/systemfunctions.stable.out sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 sql/test/xquery/Tests/create.sql sql/test/xquery/Tests/drop.sql tools/merovingian/ChangeLog.Apr2019 tools/merovingian/ChangeLog.Nov2019 Branch: default Log Message:
Merge with Nov2019 diffs (truncated from 1868 to 300 lines): diff --git a/gdk/ChangeLog.Apr2019 b/gdk/ChangeLog.Apr2019 --- a/gdk/ChangeLog.Apr2019 +++ b/gdk/ChangeLog.Apr2019 @@ -1,3 +1,3 @@ -# ChangeLog file for MonetDB +# ChangeLog file for gdk # This file is updated with Maddlog diff --git a/gdk/ChangeLog.Nov2019 b/gdk/ChangeLog.Nov2019 --- a/gdk/ChangeLog.Nov2019 +++ b/gdk/ChangeLog.Nov2019 @@ -1,4 +1,4 @@ -# ChangeLog file for MonetDB +# ChangeLog file for gdk # This file is updated with Maddlog * Sun Sep 8 2019 Sjoerd Mullender <sjo...@acm.org> 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 @@ -2062,7 +2062,7 @@ bailout: static str sql_update_nov2019(Client c, mvc *sql, const char *prev_schema, bool *systabfixed) { - size_t bufsize = 8192, pos = 0; + size_t bufsize = 16384, pos = 0; char *err = NULL, *buf = GDKmalloc(bufsize); res_table *output; BAT *b; @@ -2241,6 +2241,51 @@ sql_update_nov2019(Client c, mvc *sql, c "update sys.functions set system = true where schema_id = (select id from sys.schemas where name = 'wlr')" " and name in ('master', 'stop', 'accept', 'replicate', 'beat') and type = %d;\n", (int) F_PROC); + /* 39_analytics.sql */ + pos += snprintf(buf + pos, bufsize - pos, + "create aggregate stddev_samp(val INTERVAL SECOND) returns DOUBLE\n" + "external name \"aggr\".\"stdev\";\n" + "GRANT EXECUTE ON AGGREGATE stddev_samp(INTERVAL SECOND) TO PUBLIC;\n" + "create aggregate stddev_samp(val INTERVAL MONTH) returns DOUBLE\n" + "external name \"aggr\".\"stdev\";\n" + "GRANT EXECUTE ON AGGREGATE stddev_samp(INTERVAL MONTH) TO PUBLIC;\n" + + "create aggregate stddev_pop(val INTERVAL SECOND) returns DOUBLE\n" + "external name \"aggr\".\"stdevp\";\n" + "GRANT EXECUTE ON AGGREGATE stddev_pop(INTERVAL SECOND) TO PUBLIC;\n" + "create aggregate stddev_pop(val INTERVAL MONTH) returns DOUBLE\n" + "external name \"aggr\".\"stdevp\";\n" + "GRANT EXECUTE ON AGGREGATE stddev_pop(INTERVAL MONTH) TO PUBLIC;\n" + + "create aggregate var_samp(val INTERVAL SECOND) returns DOUBLE\n" + "external name \"aggr\".\"variance\";\n" + "GRANT EXECUTE ON AGGREGATE var_samp(INTERVAL SECOND) TO PUBLIC;\n" + "create aggregate var_samp(val INTERVAL MONTH) returns DOUBLE\n" + "external name \"aggr\".\"variance\";\n" + "GRANT EXECUTE ON AGGREGATE var_samp(INTERVAL MONTH) TO PUBLIC;\n" + + "create aggregate var_pop(val INTERVAL SECOND) returns DOUBLE\n" + "external name \"aggr\".\"variancep\";\n" + "GRANT EXECUTE ON AGGREGATE var_pop(INTERVAL SECOND) TO PUBLIC;\n" + "create aggregate var_pop(val INTERVAL MONTH) returns DOUBLE\n" + "external name \"aggr\".\"variancep\";\n" + "GRANT EXECUTE ON AGGREGATE var_pop(INTERVAL MONTH) TO PUBLIC;\n" + + "create aggregate median(val INTERVAL SECOND) returns INTERVAL SECOND\n" + "external name \"aggr\".\"median\";\n" + "GRANT EXECUTE ON AGGREGATE median(INTERVAL SECOND) TO PUBLIC;\n" + "create aggregate median(val INTERVAL MONTH) returns INTERVAL MONTH\n" + "external name \"aggr\".\"median\";\n" + "GRANT EXECUTE ON AGGREGATE median(INTERVAL MONTH) TO PUBLIC;\n" + + "create aggregate quantile(val INTERVAL SECOND, q DOUBLE) returns INTERVAL SECOND\n" + "external name \"aggr\".\"quantile\";\n" + "GRANT EXECUTE ON AGGREGATE quantile(INTERVAL SECOND, DOUBLE) TO PUBLIC;\n" + "create aggregate quantile(val INTERVAL MONTH, q DOUBLE) returns INTERVAL MONTH\n" + "external name \"aggr\".\"quantile\";\n" + "GRANT EXECUTE ON AGGREGATE quantile(INTERVAL MONTH, DOUBLE) TO PUBLIC;\n" + ); + /* The MAL implementation of functions json.text(string) and json.text(int) do not exist */ pos += snprintf(buf + pos, bufsize - pos, "drop function json.text(string);\n" diff --git a/sql/scripts/39_analytics.sql b/sql/scripts/39_analytics.sql --- a/sql/scripts/39_analytics.sql +++ b/sql/scripts/39_analytics.sql @@ -32,6 +32,12 @@ GRANT EXECUTE ON AGGREGATE stddev_samp(T create aggregate stddev_samp(val TIMESTAMP) returns DOUBLE external name "aggr"."stdev"; GRANT EXECUTE ON AGGREGATE stddev_samp(TIMESTAMP) TO PUBLIC; +create aggregate stddev_samp(val INTERVAL SECOND) returns DOUBLE + external name "aggr"."stdev"; +GRANT EXECUTE ON AGGREGATE stddev_samp(INTERVAL SECOND) TO PUBLIC; +create aggregate stddev_samp(val INTERVAL MONTH) returns DOUBLE + external name "aggr"."stdev"; +GRANT EXECUTE ON AGGREGATE stddev_samp(INTERVAL MONTH) TO PUBLIC; create aggregate stddev_pop(val TINYINT) returns DOUBLE external name "aggr"."stdevp"; @@ -61,6 +67,12 @@ GRANT EXECUTE ON AGGREGATE stddev_pop(TI create aggregate stddev_pop(val TIMESTAMP) returns DOUBLE external name "aggr"."stdevp"; GRANT EXECUTE ON AGGREGATE stddev_pop(TIMESTAMP) TO PUBLIC; +create aggregate stddev_pop(val INTERVAL SECOND) returns DOUBLE + external name "aggr"."stdevp"; +GRANT EXECUTE ON AGGREGATE stddev_pop(INTERVAL SECOND) TO PUBLIC; +create aggregate stddev_pop(val INTERVAL MONTH) returns DOUBLE + external name "aggr"."stdevp"; +GRANT EXECUTE ON AGGREGATE stddev_pop(INTERVAL MONTH) TO PUBLIC; create aggregate var_samp(val TINYINT) returns DOUBLE external name "aggr"."variance"; @@ -90,6 +102,12 @@ GRANT EXECUTE ON AGGREGATE var_samp(TIME create aggregate var_samp(val TIMESTAMP) returns DOUBLE external name "aggr"."variance"; GRANT EXECUTE ON AGGREGATE var_samp(TIMESTAMP) TO PUBLIC; +create aggregate var_samp(val INTERVAL SECOND) returns DOUBLE + external name "aggr"."variance"; +GRANT EXECUTE ON AGGREGATE var_samp(INTERVAL SECOND) TO PUBLIC; +create aggregate var_samp(val INTERVAL MONTH) returns DOUBLE + external name "aggr"."variance"; +GRANT EXECUTE ON AGGREGATE var_samp(INTERVAL MONTH) TO PUBLIC; create aggregate var_pop(val TINYINT) returns DOUBLE external name "aggr"."variancep"; @@ -119,6 +137,12 @@ GRANT EXECUTE ON AGGREGATE var_pop(TIME) create aggregate var_pop(val TIMESTAMP) returns DOUBLE external name "aggr"."variancep"; GRANT EXECUTE ON AGGREGATE var_pop(TIMESTAMP) TO PUBLIC; +create aggregate var_pop(val INTERVAL SECOND) returns DOUBLE + external name "aggr"."variancep"; +GRANT EXECUTE ON AGGREGATE var_pop(INTERVAL SECOND) TO PUBLIC; +create aggregate var_pop(val INTERVAL MONTH) returns DOUBLE + external name "aggr"."variancep"; +GRANT EXECUTE ON AGGREGATE var_pop(INTERVAL MONTH) TO PUBLIC; create aggregate median(val TINYINT) returns TINYINT external name "aggr"."median"; @@ -151,6 +175,12 @@ GRANT EXECUTE ON AGGREGATE median(TIME) create aggregate median(val TIMESTAMP) returns TIMESTAMP external name "aggr"."median"; GRANT EXECUTE ON AGGREGATE median(TIMESTAMP) TO PUBLIC; +create aggregate median(val INTERVAL SECOND) returns INTERVAL SECOND + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(INTERVAL SECOND) TO PUBLIC; +create aggregate median(val INTERVAL MONTH) returns INTERVAL MONTH + external name "aggr"."median"; +GRANT EXECUTE ON AGGREGATE median(INTERVAL MONTH) TO PUBLIC; create aggregate quantile(val TINYINT, q DOUBLE) returns TINYINT external name "aggr"."quantile"; @@ -174,7 +204,6 @@ create aggregate quantile(val DOUBLE, q external name "aggr"."quantile"; GRANT EXECUTE ON AGGREGATE quantile(DOUBLE, DOUBLE) TO PUBLIC; - create aggregate quantile(val DATE, q DOUBLE) returns DATE external name "aggr"."quantile"; GRANT EXECUTE ON AGGREGATE quantile(DATE, DOUBLE) TO PUBLIC; @@ -184,6 +213,12 @@ GRANT EXECUTE ON AGGREGATE quantile(TIME create aggregate quantile(val TIMESTAMP, q DOUBLE) returns TIMESTAMP external name "aggr"."quantile"; GRANT EXECUTE ON AGGREGATE quantile(TIMESTAMP, DOUBLE) TO PUBLIC; +create aggregate quantile(val INTERVAL SECOND, q DOUBLE) returns INTERVAL SECOND + external name "aggr"."quantile"; +GRANT EXECUTE ON AGGREGATE quantile(INTERVAL SECOND, DOUBLE) TO PUBLIC; +create aggregate quantile(val INTERVAL MONTH, q DOUBLE) returns INTERVAL MONTH + external name "aggr"."quantile"; +GRANT EXECUTE ON AGGREGATE quantile(INTERVAL MONTH, DOUBLE) TO PUBLIC; create aggregate median_avg(val TINYINT) returns DOUBLE external name "aggr"."median_avg"; diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c --- a/sql/server/rel_dump.c +++ b/sql/server/rel_dump.c @@ -447,19 +447,23 @@ rel_print_(mvc *sql, stream *fout, sql_ if (need_distinct(rel)) mnstr_printf(fout, "distinct "); mnstr_printf(fout, "%s (", r); - if (rel_is_ref(rel->l)) { - int nr = find_ref(refs, rel->l); - print_indent(sql, fout, depth+1, decorate); - mnstr_printf(fout, "& REF %d ", nr); - } else - rel_print_(sql, fout, rel->l, depth+1, refs, decorate); + if (rel->l) { + if (rel_is_ref(rel->l)) { + int nr = find_ref(refs, rel->l); + print_indent(sql, fout, depth+1, decorate); + mnstr_printf(fout, "& REF %d ", nr); + } else + rel_print_(sql, fout, rel->l, depth+1, refs, decorate); + } mnstr_printf(fout, ","); - if (rel_is_ref(rel->r)) { - int nr = find_ref(refs, rel->r); - print_indent(sql, fout, depth+1, decorate); - mnstr_printf(fout, "& REF %d ", nr); - } else - rel_print_(sql, fout, rel->r, depth+1, refs, decorate); + if (rel->r) { + if (rel_is_ref(rel->r)) { + int nr = find_ref(refs, rel->r); + print_indent(sql, fout, depth+1, decorate); + mnstr_printf(fout, "& REF %d ", nr); + } else + rel_print_(sql, fout, rel->r, depth+1, refs, decorate); + } print_indent(sql, fout, depth, decorate); mnstr_printf(fout, ")"); exps_print(sql, fout, rel->exps, depth, refs, 1, 0); @@ -519,13 +523,14 @@ rel_print_(mvc *sql, stream *fout, sql_ drop_action ? "cascade" : "restrict"); } - if (rel_is_ref(rel->l)) { - int nr = find_ref(refs, rel->l); - print_indent(sql, fout, depth+1, decorate); - mnstr_printf(fout, "& REF %d ", nr); - } else - rel_print_(sql, fout, rel->l, depth+1, refs, decorate); - + if (rel->l) { + if (rel_is_ref(rel->l)) { + int nr = find_ref(refs, rel->l); + print_indent(sql, fout, depth+1, decorate); + mnstr_printf(fout, "& REF %d ", nr); + } else + rel_print_(sql, fout, rel->l, depth+1, refs, decorate); + } if (rel->r) { if (rel_is_ref(rel->r)) { int nr = find_ref(refs, rel->r); @@ -566,23 +571,23 @@ rel_print_refs(mvc *sql, stream* fout, s case op_table: break; case op_ddl: - if(rel->flag == ddl_list ||rel->flag == ddl_exception) { - if(rel->l) { + if (rel->flag == ddl_list || rel->flag == ddl_exception) { + if (rel->l) { rel_print_refs(sql, fout, rel->l, depth, refs, decorate); - if(rel_is_ref(rel->l) && !find_ref(refs, rel->l)) { + if (rel_is_ref(rel->l) && !find_ref(refs, rel->l)) { rel_print_(sql, fout, rel->l, depth, refs, decorate); list_append(refs, rel->l); } } - if(rel->r) { + if (rel->r) { rel_print_refs(sql, fout, rel->r, depth, refs, decorate); - if(rel_is_ref(rel->r) && !find_ref(refs, rel->r)) { + if (rel_is_ref(rel->r) && !find_ref(refs, rel->r)) { rel_print_(sql, fout, rel->r, depth, refs, decorate); list_append(refs, rel->r); } } } - break; + break; case op_join: case op_left: case op_right: @@ -592,13 +597,15 @@ rel_print_refs(mvc *sql, stream* fout, s case op_union: case op_inter: case op_except: - rel_print_refs(sql, fout, rel->l, depth, refs, decorate); - rel_print_refs(sql, fout, rel->r, depth, refs, decorate); - if (rel_is_ref(rel->l) && !find_ref(refs, rel->l)) { + if (rel->l) + rel_print_refs(sql, fout, rel->l, depth, refs, decorate); + if (rel->r) + rel_print_refs(sql, fout, rel->r, depth, refs, decorate); + if (rel->l && rel_is_ref(rel->l) && !find_ref(refs, rel->l)) { rel_print_(sql, fout, rel->l, depth, refs, decorate); list_append(refs, rel->l); } - if (rel_is_ref(rel->r) && !find_ref(refs, rel->r)) { + if (rel->r && rel_is_ref(rel->r) && !find_ref(refs, rel->r)) { rel_print_(sql, fout, rel->r, depth, refs, decorate); list_append(refs, rel->r); } @@ -608,7 +615,8 @@ rel_print_refs(mvc *sql, stream* fout, s case op_groupby: case op_topn: case op_sample: - rel_print_refs(sql, fout, rel->l, depth, refs, decorate); + if (rel->l) + rel_print_refs(sql, fout, rel->l, depth, refs, decorate); if (rel->l && rel_is_ref(rel->l) && !find_ref(refs, rel->l)) { rel_print_(sql, fout, rel->l, depth, refs, decorate); list_append(refs, rel->l); @@ -618,12 +626,14 @@ rel_print_refs(mvc *sql, stream* fout, s case op_update: case op_delete: case op_truncate: - rel_print_refs(sql, fout, rel->l, depth, refs, decorate); + if (rel->l) + rel_print_refs(sql, fout, rel->l, depth, refs, decorate); if (rel->l && rel_is_ref(rel->l) && !find_ref(refs, rel->l)) { rel_print_(sql, fout, rel->l, depth, refs, decorate); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list