mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fix that end_bulk_insert() doesn't write to to-be-deleted files
This affected mainly MyISAM and Aria engines. Also fixed that end_bulk_insert() detects errors from internal mi_end_bulk_insert() and ma_end_bulk_insert() - delete_tree() and delete_tree_element() now has an extra argument that marks if future calls to tree->free should be ignored. - tree->free changed to function returning int, to be able to signal errors. - Restored deleting flag in MyISAM that was accidently disabled in mi_extra(PREPARE_FOR_DROP)
This commit is contained in:
@ -298,9 +298,10 @@ bool get_ev_num_info(EV_NUM_INFO *ev_info, NUM_INFO *info, const char *num)
|
||||
} // get_ev_num_info
|
||||
|
||||
|
||||
void free_string(String *s)
|
||||
int free_string(String *s)
|
||||
{
|
||||
s->free();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -374,7 +375,7 @@ void field_str::add()
|
||||
if (!tree_insert(&tree, (void*) &s, 0, tree.custom_arg))
|
||||
{
|
||||
room_in_tree = 0; // Remove tree, out of RAM ?
|
||||
delete_tree(&tree);
|
||||
delete_tree(&tree, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -382,7 +383,7 @@ void field_str::add()
|
||||
if ((treemem += length) > pc->max_treemem)
|
||||
{
|
||||
room_in_tree = 0; // Remove tree, too big tree
|
||||
delete_tree(&tree);
|
||||
delete_tree(&tree, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -441,7 +442,7 @@ void field_real::add()
|
||||
if (!(element = tree_insert(&tree, (void*) &num, 0, tree.custom_arg)))
|
||||
{
|
||||
room_in_tree = 0; // Remove tree, out of RAM ?
|
||||
delete_tree(&tree);
|
||||
delete_tree(&tree, 0);
|
||||
}
|
||||
/*
|
||||
if element->count == 1, this element can be found only once from tree
|
||||
@ -450,7 +451,7 @@ void field_real::add()
|
||||
else if (element->count == 1 && (tree_elements++) >= pc->max_tree_elements)
|
||||
{
|
||||
room_in_tree = 0; // Remove tree, too many elements
|
||||
delete_tree(&tree);
|
||||
delete_tree(&tree, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -507,7 +508,7 @@ void field_decimal::add()
|
||||
if (!(element = tree_insert(&tree, (void*)buf, 0, tree.custom_arg)))
|
||||
{
|
||||
room_in_tree = 0; // Remove tree, out of RAM ?
|
||||
delete_tree(&tree);
|
||||
delete_tree(&tree, 0);
|
||||
}
|
||||
/*
|
||||
if element->count == 1, this element can be found only once from tree
|
||||
@ -516,7 +517,7 @@ void field_decimal::add()
|
||||
else if (element->count == 1 && (tree_elements++) >= pc->max_tree_elements)
|
||||
{
|
||||
room_in_tree = 0; // Remove tree, too many elements
|
||||
delete_tree(&tree);
|
||||
delete_tree(&tree, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -574,7 +575,7 @@ void field_longlong::add()
|
||||
if (!(element = tree_insert(&tree, (void*) &num, 0, tree.custom_arg)))
|
||||
{
|
||||
room_in_tree = 0; // Remove tree, out of RAM ?
|
||||
delete_tree(&tree);
|
||||
delete_tree(&tree, 0);
|
||||
}
|
||||
/*
|
||||
if element->count == 1, this element can be found only once from tree
|
||||
@ -583,7 +584,7 @@ void field_longlong::add()
|
||||
else if (element->count == 1 && (tree_elements++) >= pc->max_tree_elements)
|
||||
{
|
||||
room_in_tree = 0; // Remove tree, too many elements
|
||||
delete_tree(&tree);
|
||||
delete_tree(&tree, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -630,7 +631,7 @@ void field_ulonglong::add()
|
||||
if (!(element = tree_insert(&tree, (void*) &num, 0, tree.custom_arg)))
|
||||
{
|
||||
room_in_tree = 0; // Remove tree, out of RAM ?
|
||||
delete_tree(&tree);
|
||||
delete_tree(&tree, 0);
|
||||
}
|
||||
/*
|
||||
if element->count == 1, this element can be found only once from tree
|
||||
@ -639,7 +640,7 @@ void field_ulonglong::add()
|
||||
else if (element->count == 1 && (tree_elements++) >= pc->max_tree_elements)
|
||||
{
|
||||
room_in_tree = 0; // Remove tree, too many elements
|
||||
delete_tree(&tree);
|
||||
delete_tree(&tree, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user