Changeset: 2adce15773af for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2adce15773af 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: Nov2019 Log Message:
Window functions are not allowed inside aggregates. I committed on the wrong branch. diffs (79 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 @@ -5251,6 +5251,13 @@ rel_rankop(sql_query *query, sql_rel **r if (uaname) GDKfree(uaname); return NULL; + } else if (is_sql_aggr(f)) { + char *uaname = GDKmalloc(strlen(aname) + 1); + (void) sql_error(sql, 02, SQLSTATE(42000) "%s: window functions not allowed inside aggregation functions", + uaname ? toUpperCopy(uaname, aname) : aname); + if (uaname) + GDKfree(uaname); + return NULL; } else if (is_sql_window(f)) { char *uaname = GDKmalloc(strlen(aname) + 1); (void) sql_error(sql, 02, SQLSTATE(42000) "%s: window functions cannot be nested", 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 @@ -3,7 +3,7 @@ insert into analytics values (15, 3), (3 select cast(sum(1) over () as bigint), rank() over (), nth_value(1, 1) over (); -select avg(sum(aa) over ()) from analytics; +select avg(sum(aa) over ()) from analytics; --error, window functions not allowed inside aggregates select cast(sum(1) * count(*) over () as bigint); @@ -115,4 +115,6 @@ select 1 from analytics order by sum(sum select 1 from analytics having sum(aa) over (); --error, window function not allowed in having clause +select sum(avg(aa) over ()) from analytics; --error, window functions not allowed inside aggregates + drop table 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 @@ -28,7 +28,11 @@ stderr of test 'analytics09` in director # 13:13:17 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-1389" "--port=37694" # 13:13:17 > -MAPI = (monetdb) /var/tmp/mtest-17924/.s.monetdb.36475 +MAPI = (monetdb) /var/tmp/mtest-155309/.s.monetdb.35365 +QUERY = select avg(sum(aa) over ()) from analytics; --error, window functions not allowed inside aggregates +ERROR = !SUM: window functions not allowed inside aggregates +CODE = 42000 +MAPI = (monetdb) /var/tmp/mtest-155309/.s.monetdb.35365 QUERY = select cast(sum(aa) * 100 / sum(sum(aa)) over (partition by bb) as bigint) from analytics; --error, nesting aggregation functions ERROR = !SELECT: cannot use non GROUP BY column 'bb' in query results without an aggregate function CODE = 42000 @@ -68,6 +72,10 @@ MAPI = (monetdb) /var/tmp/mtest-4073/.s QUERY = select 1 from analytics having sum(aa) over (); --error, window function not allowed in having clause ERROR = !SUM: window function 'sum' not allowed in HAVING clause CODE = 42000 +MAPI = (monetdb) /var/tmp/mtest-155309/.s.monetdb.35365 +QUERY = select sum(avg(aa) over ()) from analytics; --error, window functions not allowed inside aggregates +ERROR = !AVG: window functions not allowed inside aggregates +CODE = 42000 # 13:13:17 > # 13:13:17 > "Done." 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 @@ -32,12 +32,6 @@ stdout of test 'analytics09` in director % bigint, int, tinyint # type % 1, 1, 1 # length [ 1, 1, 1 ] -#select avg(sum(aa) over ()) from analytics; -% sys.L6 # table_name -% L6 # name -% double # type -% 24 # length -[ 46 ] #select cast(sum(1) * count(*) over () as bigint); % .L7 # table_name % L7 # name _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list