mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge remote-tracking branch 'origin/10.2' into bb-10.2-ext
This commit is contained in:
@ -7438,6 +7438,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
||||
List<Virtual_column_info> new_constraint_list;
|
||||
uint db_create_options= (table->s->db_create_options
|
||||
& ~(HA_OPTION_PACK_RECORD));
|
||||
Item::func_processor_rename column_rename_param;
|
||||
uint used_fields;
|
||||
KEY *key_info=table->key_info;
|
||||
bool rc= TRUE;
|
||||
@ -7490,6 +7491,11 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
||||
if (!(used_fields & HA_CREATE_USED_SEQUENCE))
|
||||
create_info->sequence= table->s->table_type == TABLE_TYPE_SEQUENCE;
|
||||
|
||||
column_rename_param.db_name= table->s->db;
|
||||
column_rename_param.table_name= table->s->table_name;
|
||||
if (column_rename_param.fields.copy(&alter_info->create_list, thd->mem_root))
|
||||
DBUG_RETURN(1); // OOM
|
||||
|
||||
restore_record(table, s->default_values); // Empty record for DEFAULT
|
||||
|
||||
if ((create_info->fields_option_struct= (ha_field_option_struct**)
|
||||
@ -7534,6 +7540,24 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
||||
bitmap_set_bit(dropped_fields, field->field_index);
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
If we are doing a rename of a column, update all references in virtual
|
||||
column expressions, constraints and defaults to use the new column name
|
||||
*/
|
||||
if (alter_info->flags & Alter_info::ALTER_RENAME_COLUMN)
|
||||
{
|
||||
if (field->vcol_info)
|
||||
field->vcol_info->expr->walk(&Item::rename_fields_processor, 1,
|
||||
&column_rename_param);
|
||||
if (field->check_constraint)
|
||||
field->check_constraint->expr->walk(&Item::rename_fields_processor, 1,
|
||||
&column_rename_param);
|
||||
if (field->default_value)
|
||||
field->default_value->expr->walk(&Item::rename_fields_processor, 1,
|
||||
&column_rename_param);
|
||||
}
|
||||
|
||||
/* Check if field is changed */
|
||||
def_it.rewind();
|
||||
while ((def=def_it++))
|
||||
@ -7950,7 +7974,10 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
||||
}
|
||||
}
|
||||
if (!drop)
|
||||
{
|
||||
check->expr->walk(&Item::rename_fields_processor, 1, &column_rename_param);
|
||||
new_constraint_list.push_back(check, thd->mem_root);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Add new constraints */
|
||||
|
Reference in New Issue
Block a user