Changeset: 22b16da8bab2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=22b16da8bab2
Modified Files:
        sql/server/rel_select.c
Branch: default
Log Message:

fixed also the select rank() over (partition by sum(col1)) from t1;


diffs (78 lines):

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
@@ -4725,7 +4725,7 @@ rel_rankop(mvc *sql, sql_rel **rel, symb
        list *gbe = NULL, *obe = NULL, *args = NULL, *types = NULL, *fargs = 
NULL;
        sql_schema *s = sql->session->schema;
        dnode *dn = window_function->data.lval->h;
-       int distinct = 0, project_added = 0, is_last, frame_type, pos, group = 
0;
+       int distinct = 0, project_added = 0, is_last, frame_type, pos, group = 
0, nf = f;
        bool is_nth_value, supports_frames;
 
        stack_clear_frame_visited_flag(sql); //clear visited flags before 
iterating
@@ -4822,31 +4822,48 @@ rel_rankop(mvc *sql, sql_rel **rel, symb
        if (!group && list_length(r->exps))
                p = pp = rel_project(sql->sa, p, rel_projections(sql, p, NULL, 
1, 1));
 
+       if (pp && pp->op == op_groupby)
+               nf = sql_partitionby;
        /* Partition By */
        if (partition_by_clause) {
-               gbe = rel_group_by(sql, &pp, partition_by_clause, NULL /* 
cannot use (selection) column references, as this result is a selection column 
*/, f);
+               gbe = rel_group_by(sql, &pp, partition_by_clause, NULL /* 
cannot use (selection) column references, as this result is a selection column 
*/, nf);
+               if (!gbe && !group) { /* try with implicit groupby */
+                       /* reset error */
+                       sql->session->status = 0;
+                       sql->errstr[0] = '\0';
+                       p = pp = rel_project(sql->sa, p, sa_list(sql->sa));
+                       gbe = rel_group_by(sql, &p, partition_by_clause, NULL 
/* cannot use (selection) column references, as this result is a selection 
column */, f);
+               }
                if (!gbe)
                        return NULL;
 
-               for(n = gbe->h ; n ; n = n->next) {
-                       sql_exp *en = n->data;
-
-                       n->data = en = opt_groupby_add_exp(sql, p, NULL, en);
-                       set_direction(en, 1);
-               }
                if (p->op == op_groupby) {
                        sql_rel *npp = pp;
 
                        pp = p;
                        p = rel_project(sql->sa, npp, rel_projections(sql, npp, 
NULL, 1, 0));
                }
+
+               for(n = gbe->h ; n ; n = n->next) {
+                       sql_exp *en = n->data;
+
+                       n->data = en = opt_groupby_add_exp(sql, p, pp, en);
+                       set_direction(en, 1);
+               }
                p->r = gbe;
        }
        /* Order By */
        if (order_by_clause) {
-               obe = rel_order_by(sql, &pp, order_by_clause, f);
+               obe = rel_order_by(sql, &pp, order_by_clause, nf);
                if (!obe)
                        return NULL;
+               if (!obe && !group && !gbe) { /* try with implicit groupby */
+                       /* reset error */
+                       sql->session->status = 0;
+                       sql->errstr[0] = '\0';
+                       p = pp = rel_project(sql->sa, p, sa_list(sql->sa));
+                       obe = rel_order_by(sql, &p, order_by_clause, f);
+               }
                if (p->op == op_groupby) {
                        sql_rel *npp = pp;
 
@@ -4956,7 +4973,7 @@ rel_rankop(mvc *sql, sql_rel **rel, symb
                                 * symbol compilation is required
                                 */
                                in = rel_value_exp2(sql, &p, n->next->data.sym, 
f, ek, &is_last);
-                               if (!in && !group) { /* try with implicit 
groupby */
+                               if (!in && !group && !obe && !gbe) { /* try 
with implicit groupby */
                                        /* reset error */
                                        sql->session->status = 0;
                                        sql->errstr[0] = '\0';
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to