Changeset: e52f4d981252 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e52f4d981252
Modified Files:
        sql/server/rel_select.c
        sql/test/analytics/Tests/analytics09.stable.out
Branch: Apr2019
Log Message:

Fix for the found bug, i.e when adding a grouping expression for a projection 
over a line, make sure all underlying projections have it


diffs (59 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
@@ -4790,18 +4790,34 @@ opt_groupby_add_exp(mvc *sql, sql_rel *p
                if (!exp_name(in))
                        exp_label(sql->sa, in, ++sql->label);
                found = exps_find_exp( p->exps, in);
-               if (!found)
+               if (!found) {
+                       sql_rel *l = p->l;
+                       while (l && !is_base(l->op)) {
+                               if (!exps_find_exp(l->exps, in))
+                                       append(l->exps, exp_copy(sql->sa, in));
+                               else
+                                       break;
+                               l = l->l;
+                       }
                        append(p->exps, in);
-               else
+               } else
                        in = found;
                in = exp_column(sql->sa, exp_relname(in), exp_name(in), 
exp_subtype(in), exp_card(in), has_nil(in), is_intern(in));
        } else if (pp && pp->op == op_groupby) {
                if (!exp_name(in))
                        exp_label(sql->sa, in, ++sql->label);
                found = exps_find_exp( p->exps, in);
-               if (!found)
+               if (!found) {
+                       sql_rel *l = p->l;
+                       while (l && !is_base(l->op)) {
+                               if (!exps_find_exp(l->exps, in))
+                                       append(l->exps, exp_copy(sql->sa, in));
+                               else
+                                       break;
+                               l = l->l;
+                       }
                        append(p->exps, in);
-               else
+               } else
                        in = found;
                in = exp_column(sql->sa, exp_relname(in), exp_name(in), 
exp_subtype(in), exp_card(in), has_nil(in), is_intern(in));
        }
diff --git a/sql/test/analytics/Tests/analytics09.stable.out 
b/sql/test/analytics/Tests/analytics09.stable.out
--- a/sql/test/analytics/Tests/analytics09.stable.out
+++ b/sql/test/analytics/Tests/analytics09.stable.out
@@ -383,6 +383,13 @@ Ready.
 % int # type
 % 1 # length
 [ 1    ]
+#select avg(sum(aa)) over (rows unbounded preceding),
+#       rank() over (partition by sum(aa)) from analytics;
+% sys.L5,      sys.L12 # table_name
+% L5,  L12 # name
+% double,      int # type
+% 24,  1 # length
+[ 46,  1       ]
 #drop table analytics;
 
 # 13:13:17 >  
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to