Commit 41e68e8e authored by Igor Babaev's avatar Igor Babaev

MDEV-16357 LIMIT and ORDER BY clause is ignored on a query with UNION

           when using brackets

Do not create master unit for select if it has already one.
parent 074c6840
......@@ -219,4 +219,28 @@ select 1 union select 1 union select 1;
((select 1) union (select 1) union (select 1));
1
1
#
# MDEV-16357: union in brackets with tail
# union with tail in brackets
#
CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES(1),(2),(3),(4);
CREATE TABLE t2 (a int);
INSERT INTO t2 VALUES (4),(5),(6),(7);
(SELECT a FROM t1 UNION SELECT a FROM t2) LIMIT 1;
a
1
(SELECT a FROM t1 UNION SELECT a FROM t2) ORDER BY a DESC;
a
7
6
5
4
3
2
1
(SELECT a FROM t1 UNION SELECT a FROM t2 LIMIT 1);
a
1
DROP TABLE t1,t2;
# End of 10.4 tests
......@@ -88,5 +88,23 @@ select 1 union select 1 union select 1;
(select 1 union select 1 union select 1);
((select 1) union (select 1) union (select 1));
--echo #
--echo # MDEV-16357: union in brackets with tail
--echo # union with tail in brackets
--echo #
CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES(1),(2),(3),(4);
CREATE TABLE t2 (a int);
INSERT INTO t2 VALUES (4),(5),(6),(7);
(SELECT a FROM t1 UNION SELECT a FROM t2) LIMIT 1;
(SELECT a FROM t1 UNION SELECT a FROM t2) ORDER BY a DESC;
(SELECT a FROM t1 UNION SELECT a FROM t2 LIMIT 1);
DROP TABLE t1,t2;
--echo # End of 10.4 tests
......@@ -5250,6 +5250,9 @@ LEX::create_unit(SELECT_LEX *first_sel)
SELECT_LEX_UNIT *unit;
DBUG_ENTER("LEX::create_unit");
if (first_sel->master_unit())
DBUG_RETURN(first_sel->master_unit());
if (!(unit= alloc_unit()))
DBUG_RETURN(NULL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment