mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
MDEV-25679 Wrong result selecting from simple view with LIMIT and ORDER BY
This bug affected queries with views / derived_tables / CTEs whose specifications were of the form (SELECT ... LIMIT <n>) ORDER BY ... Units representing such specifications contains one SELECT_LEX structure for (SELECT ... LIMIT <n>) and additionally SELECT_LEX structure for fake_select_lex. This fact should have been taken into account in the function mysql_derived_fill(). This patch has to be applied to 10.2 and 10.3 only.
This commit is contained in:
parent
773a07b655
commit
cc0bd8431f
3 changed files with 39 additions and 1 deletions
|
@ -3436,3 +3436,24 @@ Warnings:
|
|||
Note 1003 select `test`.`t1`.`pk` AS `pk`,`test`.`t1`.`a` AS `a`,3 AS `d`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`c` AS `c` from `test`.`t1` join `test`.`t2` join `test`.`t3` where `test`.`t1`.`a` = 3 and `test`.`t1`.`pk` <= 2
|
||||
drop view v1;
|
||||
drop table t1,t2,t3;
|
||||
#
|
||||
# MDEV-25679: view / derived table defined as ordered select with LIMIT
|
||||
#
|
||||
create table t1 (a int);
|
||||
insert into t1 values (3), (7), (1);
|
||||
create view v1 as (select a from t1 limit 2) order by a desc;
|
||||
(select a from t1 limit 2) order by a desc;
|
||||
a
|
||||
7
|
||||
3
|
||||
select * from v1;
|
||||
a
|
||||
7
|
||||
3
|
||||
select * from ((select a from t1 limit 2) order by a desc) dt;
|
||||
a
|
||||
7
|
||||
3
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
# End of 10.2 tests
|
||||
|
|
|
@ -2249,3 +2249,20 @@ eval explain extended $q;
|
|||
|
||||
drop view v1;
|
||||
drop table t1,t2,t3;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25679: view / derived table defined as ordered select with LIMIT
|
||||
--echo #
|
||||
|
||||
create table t1 (a int);
|
||||
insert into t1 values (3), (7), (1);
|
||||
|
||||
create view v1 as (select a from t1 limit 2) order by a desc;
|
||||
(select a from t1 limit 2) order by a desc;
|
||||
select * from v1;
|
||||
select * from ((select a from t1 limit 2) order by a desc) dt;
|
||||
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
|
||||
--echo # End of 10.2 tests
|
||||
|
|
|
@ -1091,7 +1091,7 @@ bool mysql_derived_fill(THD *thd, LEX *lex, TABLE_LIST *derived)
|
|||
res= derived->fill_recursive(thd);
|
||||
}
|
||||
}
|
||||
else if (unit->is_union())
|
||||
else if (unit->is_union() || unit->fake_select_lex)
|
||||
{
|
||||
// execute union without clean up
|
||||
res= unit->exec();
|
||||
|
|
Loading…
Reference in a new issue