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

Don't add the same aggregation column again in the aggregation list.


diffs (117 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
@@ -4723,15 +4723,25 @@ rel_intermediates_add_exp(mvc *sql, sql_
 static sql_exp*
 opt_groupby_add_exp(mvc *sql, sql_rel *p, sql_rel *pp, sql_exp *in)
 {
+       sql_exp *found;
+
        if (p->op == op_groupby) {
                if (!exp_name(in))
                        exp_label(sql->sa, in, ++sql->label);
-               append(p->exps, in);
+               found = exps_find_exp( p->exps, in);
+               if (!found)
+                       append(p->exps, in);
+               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);
-               append(p->exps, in);
+               found = exps_find_exp( p->exps, in);
+               if (!found)
+                       append(p->exps, in);
+               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));
        }
        return in;
diff --git a/sql/test/analytics/Tests/analytics09.sql 
b/sql/test/analytics/Tests/analytics09.sql
--- a/sql/test/analytics/Tests/analytics09.sql
+++ b/sql/test/analytics/Tests/analytics09.sql
@@ -45,6 +45,20 @@ select avg(sum(aa)) over (),
        cast(sum(aa) * count(aa) / avg(aa) over (rows between current row and 
unbounded following) as bigint),
        avg(sum(aa)) over (range unbounded preceding) from analytics group by 
aa; --TODO support multiple aggregations within the same projection
 
+select cast(sum(aa) * count(aa) over () as bigint),
+       cast(sum(aa) over () as bigint) from analytics group by aa;
+
+select cast(sum(sum(aa)) over () as bigint),
+       cast(sum(aa) * count(count(aa)) over () as bigint) from analytics group 
by aa;
+
+select cast(sum(aa) over () as bigint),
+       cast(sum(aa) over () as bigint),
+       cast(sum(aa) * count(aa) over () as bigint) from analytics group by aa; 
--TODO
+
+select avg(sum(aa)) over (),
+       avg(sum(aa)) over (),
+       cast(sum(aa) * count(aa) over () as bigint) from analytics group by aa; 
--TODO
+
 select avg(sum(aa)) over (partition by bb) from analytics group by bb;
 
 select cast(sum(aa) * 100 / sum(sum(aa)) over () as bigint) from analytics;
diff --git a/sql/test/analytics/Tests/analytics09.stable.err 
b/sql/test/analytics/Tests/analytics09.stable.err
--- a/sql/test/analytics/Tests/analytics09.stable.err
+++ b/sql/test/analytics/Tests/analytics09.stable.err
@@ -35,7 +35,19 @@ QUERY = select avg(sum(aa)) over (),
                avg(sum(aa)) over (range unbounded preceding) from analytics 
group by aa; --TODO support multiple aggregations within the same projection
 ERROR = !Cannot use non GROUP BY column 'L3' in query results without an 
aggregate function
 CODE  = 42000
-MAPI  = (monetdb) /var/tmp/mtest-1389/.s.monetdb.37694
+MAPI  = (monetdb) /var/tmp/mtest-19274/.s.monetdb.39185
+QUERY = select cast(sum(aa) over () as bigint),
+               cast(sum(aa) over () as bigint),
+               cast(sum(aa) * count(aa) over () as bigint) from analytics 
group by aa; --TODO
+ERROR = !Cannot use non GROUP BY column in query results without an aggregate 
function
+CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-4999/.s.monetdb.31453
+QUERY = select avg(sum(aa)) over (),
+               avg(sum(aa)) over (),
+               cast(sum(aa) * count(aa) over () as bigint) from analytics 
group by aa; --TODO
+ERROR = !Cannot use non GROUP BY column 'L3' in query results without an 
aggregate function
+CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-4999/.s.monetdb.31453
 QUERY = select cast(sum(aa) * 100 / sum(sum(aa)) over (partition by bb) as 
bigint) from analytics; --error, nesting aggregation functions
 ERROR = !SELECT: identifier 'bb' unknown
 CODE  = 42000
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
@@ -179,6 +179,34 @@ Ready.
 [ 1    ]
 [ 1    ]
 [ 1    ]
+#select cast(sum(aa) * count(aa) over () as bigint),
+#       cast(sum(aa) over () as bigint) from analytics group by aa;
+% sys.L5,      sys.L11 # table_name
+% L5,  L11 # name
+% bigint,      bigint # type
+% 3,   2 # length
+[ 105, 43      ]
+[ 42,  43      ]
+[ 14,  43      ]
+[ 35,  43      ]
+[ NULL,        43      ]
+[ 28,  43      ]
+[ 42,  43      ]
+[ 56,  43      ]
+#select cast(sum(sum(aa)) over () as bigint),
+#       cast(sum(aa) * count(count(aa)) over () as bigint) from analytics 
group by aa;
+% sys.L5,      sys.L13 # table_name
+% L5,  L13 # name
+% bigint,      bigint # type
+% 2,   3 # length
+[ 46,  120     ]
+[ 46,  48      ]
+[ 46,  16      ]
+[ 46,  40      ]
+[ 46,  NULL    ]
+[ 46,  32      ]
+[ 46,  48      ]
+[ 46,  64      ]
 #select avg(sum(aa)) over (partition by bb) from analytics group by bb;
 % sys.L4 # table_name
 % L4 # name
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to