From 81c1abe8cf3dda1fe097256a06daab3041409e14 Mon Sep 17 00:00:00 2001 From: Igor Babaev Date: Mon, 30 Jan 2017 11:56:23 -0800 Subject: [PATCH] Fixed bug mdev-10875. Now, after the implementation of mdev-8646 "Re-engineer the code for post-join operations" create_sort_index() can be called for subqueries. --- mysql-test/r/win.result | 16 ++++++++++++++++ mysql-test/t/win.test | 16 ++++++++++++++++ sql/sql_select.cc | 3 --- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/win.result b/mysql-test/r/win.result index c8c55b91016..1c46f43a22c 100644 --- a/mysql-test/r/win.result +++ b/mysql-test/r/win.result @@ -2382,3 +2382,19 @@ pk c CNT 10 2 0.5000 drop view v1,v2,v3,v4; drop table t0,t1; +# +# MDEV-10875: window function in subquery +# +CREATE TABLE t1 (i INT); +INSERT INTO t1 VALUES (3),(1); +CREATE TABLE t2 (c VARCHAR(8)); +INSERT INTO t2 VALUES ('foo'),('bar'),('foo'); +SELECT COUNT(*) OVER (PARTITION BY c) FROM t2; +COUNT(*) OVER (PARTITION BY c) +2 +1 +2 +SELECT * FROM t1 WHERE i IN ( SELECT COUNT(*) OVER (PARTITION BY c) FROM t2 ); +i +1 +DROP TABLE t1, t2; diff --git a/mysql-test/t/win.test b/mysql-test/t/win.test index 7052368cf9c..b9490c82039 100644 --- a/mysql-test/t/win.test +++ b/mysql-test/t/win.test @@ -1426,3 +1426,19 @@ select * from v4; drop view v1,v2,v3,v4; drop table t0,t1; + +--echo # +--echo # MDEV-10875: window function in subquery +--echo # + +CREATE TABLE t1 (i INT); +INSERT INTO t1 VALUES (3),(1); + +CREATE TABLE t2 (c VARCHAR(8)); +INSERT INTO t2 VALUES ('foo'),('bar'),('foo'); + +SELECT COUNT(*) OVER (PARTITION BY c) FROM t2; + +SELECT * FROM t1 WHERE i IN ( SELECT COUNT(*) OVER (PARTITION BY c) FROM t2 ); + +DROP TABLE t1, t2; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 2889e1e1549..0678955883b 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -21403,9 +21403,6 @@ create_sort_index(THD *thd, JOIN *join, JOIN_TAB *tab, Filesort *fsort) table= tab->table; select= fsort->select; - /* Currently ORDER BY ... LIMIT is not supported in subqueries. */ - DBUG_ASSERT(join->group_list || !join->is_in_subquery()); - table->status=0; // May be wrong if quick_select if (!tab->preread_init_done && tab->preread_init())