mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Bug #15948123: SERVER WORKS INCORRECT WITH LONG TABLE ALIASES
Code in MDL subsystem assumes that identifiers of objects can't be longer than NAME_LEN characters. This assumption was broken when one tried to construct MDL_key based on table alias, which can have arbitrary length. Since MDL_key's (and MDL locks) are not really used for table aliases this patch changes code to not initialize MDL_key object for table list element representing aliases.
This commit is contained in:
@ -246,6 +246,8 @@ public:
|
|||||||
}
|
}
|
||||||
void mdl_key_init(const MDL_key *rhs)
|
void mdl_key_init(const MDL_key *rhs)
|
||||||
{
|
{
|
||||||
|
DBUG_ASSERT(rhs->m_length <= NAME_LEN);
|
||||||
|
DBUG_ASSERT(rhs->m_db_name_length <= NAME_LEN);
|
||||||
memcpy(m_ptr, rhs->m_ptr, rhs->m_length);
|
memcpy(m_ptr, rhs->m_ptr, rhs->m_length);
|
||||||
m_length= rhs->m_length;
|
m_length= rhs->m_length;
|
||||||
m_db_name_length= rhs->m_db_name_length;
|
m_db_name_length= rhs->m_db_name_length;
|
||||||
|
@ -6000,8 +6000,13 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd,
|
|||||||
ptr->next_name_resolution_table= NULL;
|
ptr->next_name_resolution_table= NULL;
|
||||||
/* Link table in global list (all used tables) */
|
/* Link table in global list (all used tables) */
|
||||||
lex->add_to_query_tables(ptr);
|
lex->add_to_query_tables(ptr);
|
||||||
ptr->mdl_request.init(MDL_key::TABLE, ptr->db, ptr->table_name, mdl_type,
|
|
||||||
MDL_TRANSACTION);
|
// Pure table aliases do not need to be locked:
|
||||||
|
if (!test(table_options & TL_OPTION_ALIAS))
|
||||||
|
{
|
||||||
|
ptr->mdl_request.init(MDL_key::TABLE, ptr->db, ptr->table_name, mdl_type,
|
||||||
|
MDL_TRANSACTION);
|
||||||
|
}
|
||||||
DBUG_RETURN(ptr);
|
DBUG_RETURN(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user