Changeset: b68c34bbd171 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/b68c34bbd171 Modified Files: sql/include/sql_relation.h sql/server/rel_dump.c sql/server/rel_exp.c sql/server/rel_optimize_others.c sql/server/rel_optimize_sel.c sql/server/rel_unnest.c sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.test sql/test/Tests/select_window_pushdown.test sql/test/analytics/Tests/analytics00.test Branch: ordered-set-aggregates Log Message:
push topn under some rank functions diffs (truncated from 304 to 300 lines): diff --git a/sql/include/sql_relation.h b/sql/include/sql_relation.h --- a/sql/include/sql_relation.h +++ b/sql/include/sql_relation.h @@ -55,6 +55,7 @@ typedef struct expression { intern:1, selfref:1, /* set when the expression references a expression in the same projection list */ anti:1, + partitioning:1, /* partitioning */ ascending:1, /* order direction */ nulls_last:1, /* return null after all other rows */ zero_if_empty:1, /* in case of partial aggregator computation, some aggregators need to return 0 instead of NULL */ @@ -233,6 +234,8 @@ typedef enum operator_type { #define set_has_no_nil(e) (e)->has_no_nil = 1 #define set_has_nil(e) (e)->has_no_nil = 0 +#define is_partitioning(e) ((e)->partitioning) +#define set_partitioning(e) ((e)->partitioning = 1) #define is_ascending(e) ((e)->ascending) #define set_ascending(e) ((e)->ascending = 1) #define set_descending(e) ((e)->ascending = 0) 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 @@ -332,6 +332,8 @@ exp_print(mvc *sql, stream *fout, sql_ex default: ; } + if (e->type != e_atom && e->type != e_cmp && is_partitioning(e)) + mnstr_printf(fout, " PART"); if (e->type != e_atom && e->type != e_cmp && is_ascending(e)) mnstr_printf(fout, " ASC"); if (e->type != e_atom && e->type != e_cmp && nulls_last(e)) @@ -1721,6 +1723,12 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re return NULL; } + /* [ PART ] */ + if (strncmp(r+*pos, "PART", strlen("PART")) == 0) { + (*pos)+= (int) strlen("PART"); + skipWS(r, pos); + set_partitioning(exp); + } /* [ ASC ] */ if (strncmp(r+*pos, "ASC", strlen("ASC")) == 0) { (*pos)+= (int) strlen("ASC"); diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c --- a/sql/server/rel_exp.c +++ b/sql/server/rel_exp.c @@ -741,6 +741,8 @@ exp_propagate(allocator *sa, sql_exp *ne set_any(ne); if (is_symmetric(oe)) set_symmetric(ne); + if (is_partitioning(oe)) + set_partitioning(ne); if (is_ascending(oe)) set_ascending(ne); if (nulls_last(oe)) diff --git a/sql/server/rel_optimize_others.c b/sql/server/rel_optimize_others.c --- a/sql/server/rel_optimize_others.c +++ b/sql/server/rel_optimize_others.c @@ -1389,6 +1389,7 @@ rel_push_topn_and_sample_down_(visitor * int fnd = 1; for (node *n = obes->h; n && fnd; n = n->next) { sql_exp *obe = n->data; + int part = is_partitioning(obe); int asc = is_ascending(obe); int nl = nulls_last(obe); /* only simple rename expressions */ @@ -1401,6 +1402,8 @@ rel_push_topn_and_sample_down_(visitor * if (exp_is_atom(pe)) return rel; pe = exp_ref(v->sql, pe); + if (part) + set_partitioning(pe); if (asc) set_ascending(pe); if (nl) diff --git a/sql/server/rel_optimize_sel.c b/sql/server/rel_optimize_sel.c --- a/sql/server/rel_optimize_sel.c +++ b/sql/server/rel_optimize_sel.c @@ -3572,6 +3572,23 @@ get_partition_by_key_columns(allocator * return NULL; } +static bool +rank_exp_has_partition_key(sql_exp *e) +{ + if (e->type == e_func) { + sql_subfunc *f = e->f; + + if (f->func->type == F_ANALYTIC) { + list *args = e->l; + + if (list_length(args) >= 2) { // the partition key is the second argument + return true; + } + } + } + return false; +} + /* * Checks if a filter column is also used as an aggregation key, so it can be later safely pushed down. */ @@ -3803,6 +3820,35 @@ rel_push_select_down(visitor *v, sql_rel /* cleanup list */ list_destroy(keyColumns); } + /* also push (rewrite) limits on output of row_number/(*)rank like window functions */ + if (is_simple_project(r->op) /*&& is_simple_project(pl->op)*/) { /* possible window functions */ + for (n = exps->h; n; n = n->next) { + sql_exp *e = n->data; + + if (e->type == e_cmp && (e->flag == cmp_lt || e->flag == cmp_lte) && exp_is_atom(e->r)) { /* simple limit */ + sql_exp *ranke = rel_find_exp(r, e->l); + + if (ranke && ranke->type == e_func) { + sql_subfunc *rankf = ranke->f; + if (rankf->func->type == F_ANALYTIC) { /* rank functions cannot have a frame */ + // For now only for rank/row_number without partition by + if (strcmp(rankf->func->base.name, "rank") == 0 && is_simple_project(pl->op) && pl->r && + !rank_exp_has_partition_key(ranke)) { + r->l = rel_topn(v->sql->sa, r->l, append(sa_list(v->sql->sa), e->r)); + v->changes++; + break; + } + if (strcmp(rankf->func->base.name, "row_number") == 0 && list_empty(r->r) && !is_topn(pl->op) && + !rank_exp_has_partition_key(ranke)) { + r->l = rel_topn(v->sql->sa, r->l, append(sa_list(v->sql->sa), e->r)); + v->changes++; + break; + } + } + } + } + } + } } } 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 @@ -2808,6 +2808,10 @@ rewrite_rank(visitor *v, sql_rel *rel, s if (gbe && obe) { gbe = list_merge(sa_list(v->sql->sa), gbe, (fdup)NULL); /* make sure the p->r is a different list than the gbe list */ i = 0; + for(node *n = gbe->h ; n ; n = n->next) { + sql_exp *e = n->data; + set_partitioning(e); + } for(node *n = obe->h ; n ; n = n->next, i++) { sql_exp *e1 = n->data; bool found = false; @@ -2866,6 +2870,8 @@ rewrite_rank(visitor *v, sql_rel *rel, s sql_exp *found = exps_find_exp(rell->exps, next); sql_exp *ref = exp_ref(v->sql, found ? found : next); + if (is_partitioning(next)) + set_partitioning(ref); if (is_ascending(next)) set_ascending(ref); if (nulls_last(next)) diff --git a/sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.test b/sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.test --- a/sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.test +++ b/sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.test @@ -53,8 +53,8 @@ project ( | | | | | | | | | | | table("sys"."args") [ "args"."func_id" NOT NULL as "p"."func_id", "args"."inout" NOT NULL as "p"."inout", "args"."number" NOT NULL as "p"."number" ] | | | | | | | | | | ) [ ("p"."inout" NOT NULL) = (tinyint(1) "1") ] | | | | | | | | | ) [ ("f"."id" NOT NULL UNIQUE) = ("p"."func_id" NOT NULL) ] -| | | | | | | | ) [ "f"."id" NOT NULL, "p"."number" ] [ "f"."id" ASC NOT NULL, "p"."number" ASC ] -| | | | | | | ) [ "f"."id" NOT NULL, "p"."number" ] [ "f"."id" ASC NOT NULL, "p"."number" NULLS LAST ] +| | | | | | | | ) [ "f"."id" NOT NULL, "p"."number" ] [ "f"."id" PART ASC NOT NULL, "p"."number" ASC ] +| | | | | | | ) [ "f"."id" NOT NULL, "p"."number" ] [ "f"."id" PART ASC NOT NULL, "p"."number" NULLS LAST ] | | | | | | ) [ "f"."id" NOT NULL, "p"."number" ] [ "f"."id" ASC NOT NULL, "p"."number" ASC ] | | | | | ) [ "f"."id" NOT NULL, "sys"."row_number"(varchar["sys"."star"()], boolean(1) "false", "sys"."diff"("sys"."diff"("f"."id" NOT NULL), "p"."number")) as "line" ] | | | | ) [ "f"."id" NOT NULL as "fid", "line" ] diff --git a/sql/test/Tests/select_window_pushdown.test b/sql/test/Tests/select_window_pushdown.test --- a/sql/test/Tests/select_window_pushdown.test +++ b/sql/test/Tests/select_window_pushdown.test @@ -27,8 +27,8 @@ project ( | | | | | | table("sys"."test") [ "test"."k" NOT NULL, "test"."v" NOT NULL UNIQUE ] | | | | | ) [ ("test"."k" NOT NULL) = (int(31) "10") ] | | | | ) [ int(31) "10" as "t1"."k", "test"."v" NOT NULL UNIQUE as "t1"."v", "sys"."mod"("test"."v" NOT NULL UNIQUE, int(2) "2") NOT NULL as "%1"."%1", "sys"."="("%1"."%1" NOT NULL, int(31) "0") NOT NULL as "t1"."flag" ] -| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] -| | ) [ "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] +| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" PART ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] +| | ) [ "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" PART NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] | ) [ ("t1"."flag" NOT NULL) = (boolean(1) "false"), ("t2"."rank") = (int(31) "1") ] ) [ int(31) "10" as "t2"."k", "t1"."v" NOT NULL UNIQUE as "t2"."v", boolean(1) "false" as "t2"."flag", int(31) "1" as "t2"."rank" ] @@ -53,8 +53,8 @@ project ( | | | | | | table("sys"."test") [ "test"."k" NOT NULL, "test"."v" NOT NULL UNIQUE ] | | | | | ) [ (int(31) "10") <= ("test"."k" NOT NULL) <= (int(31) "50") ] | | | | ) [ "test"."k" NOT NULL as "t1"."k", "test"."v" NOT NULL UNIQUE as "t1"."v", "sys"."mod"("test"."v" NOT NULL UNIQUE, int(2) "2") NOT NULL as "%1"."%1", "sys"."="("%1"."%1" NOT NULL, int(31) "0") NOT NULL as "t1"."flag" ] -| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] -| | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] +| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" PART ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] +| | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" PART NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] | ) [ ("t1"."flag" NOT NULL) = (boolean(1) "false"), ("t2"."rank") = (int(31) "1") ] ) [ "t1"."k" NOT NULL as "t2"."k", "t1"."v" NOT NULL UNIQUE as "t2"."v", boolean(1) "false" as "t2"."flag", int(31) "1" as "t2"."rank" ] @@ -79,8 +79,8 @@ project ( | | | | | | table("sys"."test") [ "test"."k" NOT NULL, "test"."v" NOT NULL UNIQUE ] | | | | | ) [ ("test"."k" NOT NULL) notin (int(31) "10", int(31) "20", int(31) "30") ] | | | | ) [ "test"."k" NOT NULL as "t1"."k", "test"."v" NOT NULL UNIQUE as "t1"."v", "sys"."mod"("test"."v" NOT NULL UNIQUE, int(2) "2") NOT NULL as "%2"."%2", "sys"."="("%2"."%2" NOT NULL, int(31) "0") NOT NULL as "t1"."flag" ] -| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] -| | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] +| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" PART ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] +| | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" PART NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] | ) [ ("t1"."flag" NOT NULL) = (boolean(1) "false"), ("t2"."rank") = (int(31) "1") ] ) [ "t1"."k" NOT NULL as "t2"."k", "t1"."v" NOT NULL UNIQUE as "t2"."v", boolean(1) "false" as "t2"."flag", int(31) "1" as "t2"."rank" ] @@ -105,8 +105,8 @@ project ( | | | | | | table("sys"."test") [ "test"."k" NOT NULL, "test"."v" NOT NULL UNIQUE ] | | | | | ) [ ("test"."k" NOT NULL) = (int(31) "10") ] | | | | ) [ int(31) "10" as "t1"."k", "test"."v" NOT NULL UNIQUE as "t1"."v", "sys"."mod"("test"."v" NOT NULL UNIQUE, int(2) "2") NOT NULL as "%1"."%1", "sys"."="("%1"."%1" NOT NULL, int(31) "0") NOT NULL as "t1"."flag" ] -| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] -| | ) [ "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] +| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" PART ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] +| | ) [ "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" PART NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] | ) [ ("t1"."v" NOT NULL UNIQUE) = (int(31) "15"), ("t1"."flag" NOT NULL) = (boolean(1) "false"), ("t2"."rank") = (int(31) "1") ] ) [ int(31) "10" as "t2"."k", int(31) "15" as "t2"."v", boolean(1) "false" as "t2"."flag", int(31) "1" as "t2"."rank" ] @@ -132,8 +132,8 @@ project ( | | | | | | table("sys"."test") [ "test"."k" NOT NULL, "test"."v" NOT NULL UNIQUE ] | | | | | ) [ ("test"."v" NOT NULL UNIQUE) = (int(31) "15") ] | | | | ) [ "test"."k" NOT NULL as "t1"."k", int(31) "15" as "t1"."v", "sys"."mod"("test"."v" NOT NULL UNIQUE, int(2) "2") NOT NULL as "%1"."%1", "sys"."="("%1"."%1" NOT NULL, int(31) "0") NOT NULL as "t1"."flag" ] -| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."v" NULLS LAST NOT NULL UNIQUE ] -| | ) [ "t1"."k" NOT NULL, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."v" NOT NULL UNIQUE), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] +| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."v" PART NULLS LAST NOT NULL UNIQUE ] +| | ) [ "t1"."k" NOT NULL, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."v" PART NOT NULL UNIQUE), "sys"."diff"("t1"."v" PART NOT NULL UNIQUE)) as "t2"."rank" ] | ) [ ("t1"."flag" NOT NULL) = (boolean(1) "false"), ("t2"."rank") = (int(31) "1"), ("t1"."k" NOT NULL) = (int(31) "10") ] ) [ int(31) "10" as "t2"."k", int(31) "15" as "t2"."v", boolean(1) "false" as "t2"."flag", int(31) "1" as "t2"."rank" ] @@ -159,8 +159,8 @@ project ( | | | | | | project ( | | | | | | | table("sys"."test") [ "test"."k" NOT NULL, "test"."v" NOT NULL UNIQUE ] | | | | | | ) [ "test"."k" NOT NULL as "t1"."k", "test"."v" NOT NULL UNIQUE as "t1"."v", "sys"."mod"("test"."v" NOT NULL UNIQUE, int(2) "2") NOT NULL as "%1"."%1", "sys"."="("%1"."%1" NOT NULL, int(31) "0") NOT NULL as "t1"."flag" ] -| | | | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] -| | | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] +| | | | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" PART ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] +| | | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" PART NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] | | | ) [ ("t1"."flag" NOT NULL) = (boolean(1) "false"), ("t2"."rank") = (int(31) "1") ] | | ) [ "sys"."sql_mul"("t1"."k" NOT NULL, tinyint(4) "10") NOT NULL as "t2"."k", "t1"."v" NOT NULL UNIQUE as "t2"."v" ] | ) [ ("t2"."k" NOT NULL) = (bigint(35) "10") ] @@ -185,8 +185,8 @@ project ( | | | | project ( | | | | | table("sys"."test") [ "test"."k" NOT NULL, "test"."v" NOT NULL UNIQUE ] | | | | ) [ "test"."k" NOT NULL as "t1"."k", "test"."v" NOT NULL UNIQUE as "t1"."v", "sys"."mod"("test"."v" NOT NULL UNIQUE, int(2) "2") NOT NULL as "%1"."%1", "sys"."="("%1"."%1" NOT NULL, int(31) "0") NOT NULL as "t1"."flag" ] -| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] -| | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] +| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" PART ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] +| | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" PART NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] | ) [ ("t2"."rank") = (int(31) "1"), (("t1"."flag" NOT NULL) = (boolean(1) "false")) or (("t1"."k" NOT NULL) = (int(31) "10")) ] ) [ "t1"."k" NOT NULL as "t2"."k", "t1"."v" NOT NULL UNIQUE as "t2"."v", "t1"."flag" NOT NULL as "t2"."flag", int(31) "1" as "t2"."rank" ] @@ -211,8 +211,8 @@ project ( | | | | | | table("sys"."test") [ "test"."k" NOT NULL, "test"."v" NOT NULL UNIQUE ] | | | | | ) [ ("test"."k" NOT NULL) <= (int(31) "10"), ("test"."v" NOT NULL UNIQUE) in (int(31) "1", int(31) "2", int(31) "3") ] | | | | ) [ "test"."k" NOT NULL as "t1"."k", "test"."v" NOT NULL UNIQUE as "t1"."v", "sys"."mod"("test"."v" NOT NULL UNIQUE, int(2) "2") NOT NULL as "%2"."%2", "sys"."="("%2"."%2" NOT NULL, int(31) "0") NOT NULL as "t1"."flag" ] -| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] -| | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("sys"."diff"("t1"."k" NOT NULL), "t1"."v" NOT NULL UNIQUE), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] +| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" PART ASC NOT NULL, "t1"."v" PART NULLS LAST NOT NULL UNIQUE ] +| | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("sys"."diff"("t1"."k" PART NOT NULL), "t1"."v" PART NOT NULL UNIQUE), "sys"."diff"("t1"."v" PART NOT NULL UNIQUE)) as "t2"."rank" ] | ) [ ("t1"."flag" NOT NULL) = (boolean(1) "false"), ("t2"."rank") = (int(31) "1") ] ) [ "t1"."k" NOT NULL as "t2"."k", "t1"."v" NOT NULL UNIQUE as "t2"."v", boolean(1) "false" as "t2"."flag", int(31) "1" as "t2"."rank" ] @@ -247,8 +247,8 @@ project ( | | | | | | table("sys"."test") [ "test"."k" NOT NULL, "test"."v" NOT NULL UNIQUE ] | | | | | ) [ ("test"."k" NOT NULL) = (varchar(100) "10") ] | | | | ) [ varchar(100) "10" as "t1"."k", "test"."v" NOT NULL UNIQUE as "t1"."v", "sys"."mod"("test"."v" NOT NULL UNIQUE, int(2) "2") NOT NULL as "%1"."%1", "sys"."="("%1"."%1" NOT NULL, int(31) "0") NOT NULL as "t1"."flag" ] -| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] -| | ) [ "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] +| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" PART ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] +| | ) [ "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" PART NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] | ) [ ("t1"."flag" NOT NULL) = (boolean(1) "false"), ("t2"."rank") = (int(31) "1") ] ) [ varchar(100) "10" as "t2"."k", "t1"."v" NOT NULL UNIQUE as "t2"."v", boolean(1) "false" as "t2"."flag", int(31) "1" as "t2"."rank" ] @@ -273,8 +273,8 @@ project ( | | | | | | table("sys"."test") [ "test"."k" NOT NULL, "test"."v" NOT NULL UNIQUE ] | | | | | ) [ (varchar["test"."k" NOT NULL] NOT NULL) FILTER "sys"."like"(varchar "%10%", varchar "", boolean(1) "false") ] | | | | ) [ "test"."k" NOT NULL as "t1"."k", "test"."v" NOT NULL UNIQUE as "t1"."v", "sys"."mod"("test"."v" NOT NULL UNIQUE, int(2) "2") NOT NULL as "%1"."%1", "sys"."="("%1"."%1" NOT NULL, int(31) "0") NOT NULL as "t1"."flag" ] -| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] -| | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] +| | | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL ] [ "t1"."k" PART ASC NOT NULL, "t1"."v" NULLS LAST NOT NULL UNIQUE ] +| | ) [ "t1"."k" NOT NULL, "t1"."v" NOT NULL UNIQUE, "t1"."flag" NOT NULL, "sys"."rank"(varchar["sys"."star"()], "sys"."diff"("t1"."k" PART NOT NULL), "sys"."diff"("t1"."v" NOT NULL UNIQUE)) as "t2"."rank" ] | ) [ ("t1"."flag" NOT NULL) = (boolean(1) "false"), ("t2"."rank") = (int(31) "1") ] ) [ "t1"."k" NOT NULL as "t2"."k", "t1"."v" NOT NULL UNIQUE as "t2"."v", boolean(1) "false" as "t2"."flag", int(31) "1" as "t2"."rank" ] diff --git a/sql/test/analytics/Tests/analytics00.test b/sql/test/analytics/Tests/analytics00.test --- a/sql/test/analytics/Tests/analytics00.test +++ b/sql/test/analytics/Tests/analytics00.test @@ -1871,8 +1871,8 @@ project ( | | | project ( | | | | table("sys"."myorders") [ "myorders"."o_custkey" NOT NULL UNIQUE, "myorders"."o_totalprice" NOT NULL UNIQUE, "myorders"."o_orderdate" NOT NULL UNIQUE ] | | | ) [ "myorders"."o_custkey" NOT NULL UNIQUE, "myorders"."o_totalprice" NOT NULL UNIQUE, "sys"."month"("myorders"."o_orderdate" NOT NULL UNIQUE) NOT NULL as "%1"."%1" ] -| | ) [ "myorders"."o_custkey" NOT NULL UNIQUE, "myorders"."o_totalprice" NOT NULL UNIQUE, "%1"."%1" NOT NULL ] [ "myorders"."o_custkey" ASC NOT NULL UNIQUE, "%1"."%1" ASC NOT NULL ] -| ) [ "%1"."%1" NOT NULL, "sys"."diff"("myorders"."o_custkey" NOT NULL UNIQUE) as "%2"."%2", "sys"."diff"("%1"."%1" NOT NULL) as "%3"."%3", "sys"."min"("myorders"."o_totalprice" NOT NULL UNIQUE, "%2"."%2", "sys"."diff"("%1"."%1" NOT NULL), int(1) "0", "sys"."window_bound"("%2"."%2", "%3"."%3", int(1) "0", int(1) "0", int(1) "0", bigint(63) "9223372036854775807"), "sys"."window_bound"("%2"."%2", "%3"."%3", int(1) "0", int(3) "5", int(1) "0", bigint(63) "0")) as "%4"."%4" ] +| | ) [ "myorders"."o_custkey" NOT NULL UNIQUE, "myorders"."o_totalprice" NOT NULL UNIQUE, "%1"."%1" NOT NULL ] [ "myorders"."o_custkey" PART ASC NOT NULL UNIQUE, "%1"."%1" ASC NOT NULL ] _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org