1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

Merge 10.4 into 10.5

This commit is contained in:
Aleksey Midenkov
2022-10-07 00:42:55 +03:00
6 changed files with 92 additions and 6 deletions

View File

@ -6026,6 +6026,7 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table,
if ((duplicate= unique_table(thd, table, src_table, 0)))
{
update_non_unique_table_error(src_table, "CREATE", duplicate);
res= 1;
goto err;
}
}
@ -8355,6 +8356,20 @@ void append_drop_column(THD *thd, String *str, Field *field)
}
static inline
void rename_field_in_list(Create_field *field, List<const char> *field_list)
{
DBUG_ASSERT(field->change.str);
List_iterator<const char> it(*field_list);
while (const char *name= it++)
{
if (my_strcasecmp(system_charset_info, name, field->change.str))
continue;
it.replace(field->field_name.str);
}
}
/**
Prepare column and key definitions for CREATE TABLE in ALTER TABLE.
@ -8710,6 +8725,34 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
field->default_value->expr->walk(&Item::rename_fields_processor, 1,
&column_rename_param);
}
#ifdef WITH_PARTITION_STORAGE_ENGINE
if (thd->work_part_info)
{
partition_info *part_info= thd->work_part_info;
List_iterator<Create_field> def_it(column_rename_param.fields);
const bool part_field_list= !part_info->part_field_list.is_empty();
const bool subpart_field_list= !part_info->subpart_field_list.is_empty();
if (part_info->part_expr)
part_info->part_expr->walk(&Item::rename_fields_processor, 1,
&column_rename_param);
if (part_info->subpart_expr)
part_info->subpart_expr->walk(&Item::rename_fields_processor, 1,
&column_rename_param);
if (part_field_list || subpart_field_list)
{
while (Create_field *def= def_it++)
{
if (def->change.str)
{
if (part_field_list)
rename_field_in_list(def, &part_info->part_field_list);
if (subpart_field_list)
rename_field_in_list(def, &part_info->subpart_field_list);
} /* if (def->change.str) */
} /* while (def) */
} /* if (part_field_list || subpart_field_list) */
} /* if (part_info) */
#endif
// Force reopen because new column name is on thd->mem_root
table->mark_table_for_reopen();
}