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