mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Bug#11766879/Bug#60106: DIFF BETWEEN # OF INDEXES IN MYSQL VS INNODB,
PARTITONING, ON INDEX CREATE If the first partition succeeded in adding a index, but a successive partition failed, then the first partition had still the new index. The fix reverts the added indexes from previous partitions on failure.
This commit is contained in:
@ -6490,7 +6490,25 @@ int ha_partition::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys)
|
||||
*/
|
||||
for (file= m_file; *file; file++)
|
||||
if ((ret= (*file)->add_index(table_arg, key_info, num_of_keys)))
|
||||
break;
|
||||
goto err;
|
||||
return ret;
|
||||
err:
|
||||
if (file > m_file)
|
||||
{
|
||||
uint *key_numbers= (uint*) ha_thd()->alloc(sizeof(uint) * num_of_keys);
|
||||
KEY *old_key_info= table_arg->key_info;
|
||||
uint i;
|
||||
/* Use the newly added key_info as table->key_info to remove them. */
|
||||
for (i= 0; i < num_of_keys; i++)
|
||||
key_numbers[i]= i;
|
||||
table_arg->key_info= key_info;
|
||||
while (--file >= m_file)
|
||||
{
|
||||
(void) (*file)->prepare_drop_index(table_arg, key_numbers, num_of_keys);
|
||||
(void) (*file)->final_drop_index(table_arg);
|
||||
}
|
||||
table_arg->key_info= old_key_info;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user