Hi, Oleksandr!
@@ -25806,7 +25811,8 @@ void st_select_lex::print(THD *thd, String *str, else str->append(',');
- if (is_subquery_function() && item->is_autogenerated_name) + if ((is_subquery_function() && item->is_autogenerated_name) || + !item->name)
Where can item->name be NULL? I thought the either specified by the user or autogenerated, but never NULL.
Or internally created with null name.
Do you have an example of such internally created with null name item?
@@ -25815,7 +25821,26 @@ void st_select_lex::print(THD *thd, String + if (top_level || + !item->is_autogenerated_name || + !check_table_name(item->name, len, TRUE))
why check_table_name() if it isn't a table? it's an incorrect check to use for columns.
A derived table AKA a subquery in the FROM clause is still a table. For other things I have no idea why we check AS part for correspondence to table name rules, but we do it on parsing.
A derived table is still a table. But item->name isn't a name of a defived, it's a name of the item. check_table_name is just incorrect there, it will reject valid column names and will accept invalid column names. A check_column_name function exists for a reason :) Regards, Sergei VP of MariaDB Server Engineering and security@mariadb.org