mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-26299: Some views force server (and mysqldump) to generate invalid SQL for their definitions
Do not print illegal table field names for non-top-level SELECT list, they will not be refered in any case but create problem for parsing of printed result.
This commit is contained in:
@ -6876,5 +6876,16 @@ SELECT 1 FROM (SELECT count(((SELECT i1 FROM v1))) FROM v1) dt ;
|
|||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
#
|
#
|
||||||
|
# MDEV-26299: Some views force server (and mysqldump) to generate
|
||||||
|
# invalid SQL for their definitions
|
||||||
|
#
|
||||||
|
create view v1 as
|
||||||
|
select * from
|
||||||
|
(select
|
||||||
|
"12345678901234567890123456789012345678901234567890123456789012345") as t1;
|
||||||
|
drop view v1;
|
||||||
|
CREATE VIEW v1 AS select `t1`.`12345678901234567890123456789012345678901234567890123456789012345` AS `Name_exp_1` from (select '12345678901234567890123456789012345678901234567890123456789012345') `t1`;
|
||||||
|
drop view v1;
|
||||||
|
#
|
||||||
# End of 10.2 tests
|
# End of 10.2 tests
|
||||||
#
|
#
|
||||||
|
@ -6608,6 +6608,25 @@ SELECT 1 FROM (SELECT count(((SELECT i1 FROM v1))) FROM v1) dt ;
|
|||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-26299: Some views force server (and mysqldump) to generate
|
||||||
|
--echo # invalid SQL for their definitions
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create view v1 as
|
||||||
|
select * from
|
||||||
|
(select
|
||||||
|
"12345678901234567890123456789012345678901234567890123456789012345") as t1;
|
||||||
|
|
||||||
|
let $definition=`select VIEW_DEFINITION from information_schema.views where TABLE_NAME="v1"`;
|
||||||
|
|
||||||
|
drop view v1;
|
||||||
|
|
||||||
|
eval CREATE VIEW v1 AS $definition;
|
||||||
|
|
||||||
|
drop view v1;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.2 tests
|
--echo # End of 10.2 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -25804,6 +25804,11 @@ void st_select_lex::print(THD *thd, String *str, enum_query_type query_type)
|
|||||||
|
|
||||||
//Item List
|
//Item List
|
||||||
bool first= 1;
|
bool first= 1;
|
||||||
|
/*
|
||||||
|
outer_select() can not be used here because it is for name resolution
|
||||||
|
and will return NULL at any end of name resolution chain (view/derived)
|
||||||
|
*/
|
||||||
|
bool top_level= (get_master()->get_master() == 0);
|
||||||
List_iterator_fast<Item> it(item_list);
|
List_iterator_fast<Item> it(item_list);
|
||||||
Item *item;
|
Item *item;
|
||||||
while ((item= it++))
|
while ((item= it++))
|
||||||
@ -25813,7 +25818,8 @@ void st_select_lex::print(THD *thd, String *str, enum_query_type query_type)
|
|||||||
else
|
else
|
||||||
str->append(',');
|
str->append(',');
|
||||||
|
|
||||||
if (is_subquery_function() && item->is_autogenerated_name)
|
if ((is_subquery_function() && item->is_autogenerated_name) ||
|
||||||
|
!item->name)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Do not print auto-generated aliases in subqueries. It has no purpose
|
Do not print auto-generated aliases in subqueries. It has no purpose
|
||||||
@ -25822,7 +25828,20 @@ void st_select_lex::print(THD *thd, String *str, enum_query_type query_type)
|
|||||||
item->print(str, query_type);
|
item->print(str, query_type);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
item->print_item_w_name(str, query_type);
|
{
|
||||||
|
/*
|
||||||
|
Do not print illegal names (if it is not top level SELECT).
|
||||||
|
Top level view checked (and correct name are assigned),
|
||||||
|
other cases of top level SELECT are not important, because
|
||||||
|
it is not "table field".
|
||||||
|
*/
|
||||||
|
if (top_level ||
|
||||||
|
!item->is_autogenerated_name ||
|
||||||
|
!check_column_name(item->name))
|
||||||
|
item->print_item_w_name(str, query_type);
|
||||||
|
else
|
||||||
|
item->print(str, query_type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user