1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-24 11:21:21 +03:00

MDEV-12819 order by ordering expression changed to empty string when creatin view with union

prepare of "fake_select" for union made in JOIN::prepare only if
we do not execute it then before reset, i.e it was for PS prepare
and now required for CREATE VIEW to make global ORDER BY which
belongs to "fake_select" prepared.
This commit is contained in:
Oleksandr Byelkin
2017-06-16 16:24:36 +02:00
parent ba9daddcd8
commit 9b7afd4188
3 changed files with 42 additions and 1 deletions

View File

@@ -6065,5 +6065,23 @@ three COUNT(*)
drop view v1;
drop table t1;
#
# MDEV-12819: order by ordering expression changed to empty string
# when creatin view with union
#
create table t1 (t1col1 int, t1col2 int,t1col3 int );
create table t2 (t2col1 int, t2col2 int, t2col3 int);
create view v1 as
select t1col1,t1col2,t1col3 from t1
union all
select t2col1,t2col2,t2col3 from t2
order by 2,3;
show create view v1;
View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`t1col1` AS `t1col1`,`t1`.`t1col2` AS `t1col2`,`t1`.`t1col3` AS `t1col3` from `t1` union all select `t2`.`t2col1` AS `t2col1`,`t2`.`t2col2` AS `t2col2`,`t2`.`t2col3` AS `t2col3` from `t2` order by 2,3 latin1 latin1_swedish_ci
select * from v1;
t1col1 t1col2 t1col3
drop view v1;
drop table t1,t2;
#
# End of 10.1 tests
#

View File

@@ -5900,6 +5900,27 @@ SELECT * FROM v1;
drop view v1;
drop table t1;
--echo #
--echo # MDEV-12819: order by ordering expression changed to empty string
--echo # when creatin view with union
--echo #
create table t1 (t1col1 int, t1col2 int,t1col3 int );
create table t2 (t2col1 int, t2col2 int, t2col3 int);
create view v1 as
select t1col1,t1col2,t1col3 from t1
union all
select t2col1,t2col2,t2col3 from t2
order by 2,3;
show create view v1;
select * from v1;
drop view v1;
drop table t1,t2;
--echo #
--echo # End of 10.1 tests
--echo #

View File

@@ -618,7 +618,9 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
if (saved_error)
goto err;
if (fake_select_lex != NULL && thd->stmt_arena->is_stmt_prepare())
if (fake_select_lex != NULL &&
(thd->stmt_arena->is_stmt_prepare() ||
(thd->lex->context_analysis_only & CONTEXT_ANALYSIS_ONLY_VIEW)))
{
/* Validate the global parameters of this union */