diff options
author | Varun Gupta <varun.gupta@mariadb.com> | 2020-12-14 14:34:14 +0530 |
---|---|---|
committer | Sergei Petrunia <sergey@mariadb.com> | 2022-02-21 19:19:04 +0300 |
commit | 942a9791b2231273ba20649a658c856641268fae (patch) | |
tree | b3adbc6aad7ace2385b76f91513d5c7a10d5c3ea | |
parent | d140d276244508d7f2e69a3c1a23e0b09201f71a (diff) | |
download | mariadb-git-942a9791b2231273ba20649a658c856641268fae.tar.gz |
MDEV-15208: server crashed, when using ORDER BY with window function and UNION
SELECTs inside a UNION can have window function but not the global ORDER BY clause of the UNION.
-rw-r--r-- | mysql-test/r/win.result | 8 | ||||
-rw-r--r-- | mysql-test/t/win.test | 10 | ||||
-rw-r--r-- | sql/sql_select.cc | 4 |
3 files changed, 21 insertions, 1 deletions
diff --git a/mysql-test/r/win.result b/mysql-test/r/win.result index 30650f29555..1ddafbd4f8f 100644 --- a/mysql-test/r/win.result +++ b/mysql-test/r/win.result @@ -4230,5 +4230,13 @@ i LAST_VALUE(COUNT(i)) OVER (PARTITION BY i ORDER BY j) 4 2 DROP TABLE t1; # +# MDEV-15208: server crashed, when using ORDER BY with window function and UNION +# +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1),(1),(1),(1),(1),(2),(2),(2),(2),(2),(2); +SELECT 1 UNION SELECT a FROM t1 ORDER BY (row_number() over ()); +ERROR HY000: Expression #1 of ORDER BY contains aggregate function and applies to a UNION +DROP TABLE t1; +# # End of 10.2 tests # diff --git a/mysql-test/t/win.test b/mysql-test/t/win.test index 126ed735c88..37f09a6e850 100644 --- a/mysql-test/t/win.test +++ b/mysql-test/t/win.test @@ -2731,5 +2731,15 @@ SELECT i, LAST_VALUE(COUNT(i)) OVER (PARTITION BY i ORDER BY j) FROM t1 GROUP BY DROP TABLE t1; --echo # +--echo # MDEV-15208: server crashed, when using ORDER BY with window function and UNION +--echo # + +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1),(1),(1),(1),(1),(2),(2),(2),(2),(2),(2); +--error ER_AGGREGATE_ORDER_FOR_UNION +SELECT 1 UNION SELECT a FROM t1 ORDER BY (row_number() over ()); +DROP TABLE t1; + +--echo # --echo # End of 10.2 tests --echo # diff --git a/sql/sql_select.cc b/sql/sql_select.cc index db8a63eeb48..a3e8b453897 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -22796,7 +22796,9 @@ int setup_order(THD *thd, Ref_ptr_array ref_pointer_array, TABLE_LIST *tables, an ORDER BY clause */ - if (for_union && (*order->item)->with_sum_func) + if (for_union && + ((*order->item)->with_sum_func || + (*order->item)->with_window_func)) { my_error(ER_AGGREGATE_ORDER_FOR_UNION, MYF(0), number); return 1; |