diff options
Diffstat (limited to 'sql')
-rw-r--r-- | sql/sql_trigger.cc | 32 | ||||
-rw-r--r-- | sql/sql_trigger.h | 5 |
2 files changed, 32 insertions, 5 deletions
diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc index acb7d5b61df..5dd6173d5bb 100644 --- a/sql/sql_trigger.cc +++ b/sql/sql_trigger.cc @@ -1583,6 +1583,38 @@ void Table_triggers_list::mark_fields_used(trg_event_type event) /* + Check if field of subject table can be changed in before update trigger. + + SYNOPSIS + is_updated_in_before_update_triggers() + field Field object for field to be checked + + NOTE + Field passed to this function should be bound to the same + TABLE object as Table_triggers_list. + + RETURN VALUE + TRUE Field is changed + FALSE Otherwise +*/ + +bool Table_triggers_list::is_updated_in_before_update_triggers(Field *fld) +{ + Item_trigger_field *trg_fld; + for (trg_fld= trigger_fields[TRG_EVENT_UPDATE][TRG_ACTION_BEFORE]; + trg_fld != 0; + trg_fld= trg_fld->next_trg_field) + { + if (trg_fld->get_settable_routine_parameter() && + trg_fld->field_idx != (uint)-1 && + table->field[trg_fld->field_idx]->eq(fld)) + return TRUE; + } + return FALSE; +} + + +/* Trigger BUG#14090 compatibility hook SYNOPSIS diff --git a/sql/sql_trigger.h b/sql/sql_trigger.h index b2464745f7c..09576f5e523 100644 --- a/sql/sql_trigger.h +++ b/sql/sql_trigger.h @@ -116,11 +116,6 @@ public: bodies[TRG_EVENT_DELETE][TRG_ACTION_AFTER]); } - bool has_before_update_triggers() - { - return test(bodies[TRG_EVENT_UPDATE][TRG_ACTION_BEFORE]); - } - void set_table(TABLE *new_table); void mark_fields_used(trg_event_type event); |