mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
After merge fixes for patch solving bug#18437 "Wrong values inserted with a
before update trigger on NDB table". Two main changes: - We use TABLE::read_set/write_set bitmaps for marking fields used by statement instead of Field::query_id in 5.1. - Now when we mark columns used by statement we take into account columns used by table's triggers instead of marking all columns as used if table has triggers.
This commit is contained in:
@ -1543,12 +1543,12 @@ bool Table_triggers_list::process_triggers(THD *thd, trg_event_type event,
|
||||
|
||||
DESCRIPTION
|
||||
This method marks fields of subject table which are read/set in its
|
||||
triggers as such (by setting Field::query_id equal to THD::query_id)
|
||||
triggers as such (by properly updating TABLE::read_set/write_set)
|
||||
and thus informs handler that values for these fields should be
|
||||
retrieved/stored during execution of statement.
|
||||
*/
|
||||
|
||||
void Table_triggers_list::mark_fields_used(THD *thd, trg_event_type event)
|
||||
void Table_triggers_list::mark_fields_used(trg_event_type event)
|
||||
{
|
||||
int action_time;
|
||||
Item_trigger_field *trg_field;
|
||||
@ -1560,9 +1560,14 @@ void Table_triggers_list::mark_fields_used(THD *thd, trg_event_type event)
|
||||
{
|
||||
/* We cannot mark fields which does not present in table. */
|
||||
if (trg_field->field_idx != (uint)-1)
|
||||
table->field[trg_field->field_idx]->query_id = thd->query_id;
|
||||
{
|
||||
bitmap_set_bit(table->read_set, trg_field->field_idx);
|
||||
if (trg_field->get_settable_routine_parameter())
|
||||
bitmap_set_bit(table->write_set, trg_field->field_idx);
|
||||
}
|
||||
}
|
||||
}
|
||||
table->file->column_bitmaps_signal();
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user