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

Reply via email to