mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
5.0-bugteam->5.1-bugteam merge
This commit is contained in:
commit
376d67e5c0
3 changed files with 39 additions and 2 deletions
|
@ -1574,4 +1574,17 @@ SHOW FIELDS FROM t2;
|
|||
Field Type Null Key Default Extra
|
||||
d double(9,6) YES NULL
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t1(a INT);
|
||||
EXPLAIN EXTENDED
|
||||
SELECT a FROM t1
|
||||
UNION
|
||||
SELECT a FROM t1
|
||||
ORDER BY a;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 system NULL NULL NULL NULL 0 0.00 const row not found
|
||||
2 UNION t1 system NULL NULL NULL NULL 0 0.00 const row not found
|
||||
NULL UNION RESULT <union1,2> ALL NULL NULL NULL NULL NULL NULL Using filesort
|
||||
Warnings:
|
||||
Note 1003 select '0' AS `a` from `test`.`t1` union select '0' AS `a` from `test`.`t1` order by `a`
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -1089,4 +1089,16 @@ CREATE TABLE t2 AS SELECT d FROM t1 UNION SELECT d FROM t1;
|
|||
SHOW FIELDS FROM t2;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
#
|
||||
# Bug#43612 crash with explain extended, union, order by
|
||||
#
|
||||
CREATE TABLE t1(a INT);
|
||||
EXPLAIN EXTENDED
|
||||
SELECT a FROM t1
|
||||
UNION
|
||||
SELECT a FROM t1
|
||||
ORDER BY a;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
|
|
@ -653,10 +653,22 @@ bool st_select_lex_unit::cleanup()
|
|||
join->tables= 0;
|
||||
}
|
||||
error|= fake_select_lex->cleanup();
|
||||
if (fake_select_lex->order_list.elements)
|
||||
/*
|
||||
There are two cases when we should clean order items:
|
||||
1. UNION with SELECTs which all enclosed into braces
|
||||
in this case global_parameters == fake_select_lex
|
||||
2. UNION where last SELECT is not enclosed into braces
|
||||
in this case global_parameters == 'last select'
|
||||
So we should use global_parameters->order_list for
|
||||
proper order list clean up.
|
||||
Note: global_parameters and fake_select_lex are always
|
||||
initialized for UNION
|
||||
*/
|
||||
DBUG_ASSERT(global_parameters);
|
||||
if (global_parameters->order_list.elements)
|
||||
{
|
||||
ORDER *ord;
|
||||
for (ord= (ORDER*)fake_select_lex->order_list.first; ord; ord= ord->next)
|
||||
for (ord= (ORDER*)global_parameters->order_list.first; ord; ord= ord->next)
|
||||
(*ord->item)->cleanup();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue