Skip to content

Commit

Permalink
MDEV-26299: Some views force server (and mysqldump) to generate inval…
Browse files Browse the repository at this point in the history
…id 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.
  • Loading branch information
sanja-byelkin committed Oct 18, 2021
1 parent 2291f8e commit 27bf57f
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 2 deletions.
11 changes: 11 additions & 0 deletions mysql-test/r/view.result
Original file line number Diff line number Diff line change
Expand Up @@ -6876,5 +6876,16 @@ SELECT 1 FROM (SELECT count(((SELECT i1 FROM v1))) FROM v1) dt ;
drop view v1;
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
#
19 changes: 19 additions & 0 deletions mysql-test/t/view.test
Original file line number Diff line number Diff line change
Expand Up @@ -6608,6 +6608,25 @@ SELECT 1 FROM (SELECT count(((SELECT i1 FROM v1))) FROM v1) dt ;
drop view v1;
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 # End of 10.2 tests
--echo #
23 changes: 21 additions & 2 deletions sql/sql_select.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25804,6 +25804,11 @@ void st_select_lex::print(THD *thd, String *str, enum_query_type query_type)

//Item List
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);
Item *item;
while ((item= it++))
Expand All @@ -25813,7 +25818,8 @@ void st_select_lex::print(THD *thd, String *str, enum_query_type query_type)
else
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
Expand All @@ -25822,7 +25828,20 @@ void st_select_lex::print(THD *thd, String *str, enum_query_type query_type)
item->print(str, query_type);
}
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);
}
}

/*
Expand Down

0 comments on commit 27bf57f

Please sign in to comment.