diff options
Diffstat (limited to 'sql/table.cc')
-rw-r--r-- | sql/table.cc | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/sql/table.cc b/sql/table.cc index e1dd3f41033..44d804d4cc7 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -7930,7 +7930,7 @@ int TABLE::update_virtual_field(Field *vf) ignore_errors == 0. If set then an error was generated. */ -int TABLE::update_default_fields(bool update_command, bool ignore_errors) +int TABLE::update_default_fields(bool ignore_errors) { Query_arena backup_arena; Field **field_ptr; @@ -7950,14 +7950,9 @@ int TABLE::update_default_fields(bool update_command, bool ignore_errors) */ if (!field->has_explicit_value()) { - if (!update_command) - { - if (field->default_value && - (field->default_value->flags || field->flags & BLOB_FLAG)) - res|= (field->default_value->expr->save_in_field(field, 0) < 0); - } - else - res|= field->evaluate_update_default_function(); + if (field->default_value && + (field->default_value->flags || field->flags & BLOB_FLAG)) + res|= (field->default_value->expr->save_in_field(field, 0) < 0); if (!ignore_errors && res) { my_error(ER_CALCULATING_DEFAULT_VALUE, MYF(0), field->field_name.str); @@ -7971,6 +7966,21 @@ int TABLE::update_default_fields(bool update_command, bool ignore_errors) } +void TABLE::evaluate_update_default_function() +{ + DBUG_ENTER("TABLE::evaluate_update_default_function"); + + if (s->has_update_default_function) + for (Field **field_ptr= default_field; *field_ptr ; field_ptr++) + { + Field *field= (*field_ptr); + if (!field->has_explicit_value() && field->has_update_default_function()) + field->set_time(); + } + DBUG_VOID_RETURN; +} + + void TABLE::vers_update_fields() { bitmap_set_bit(write_set, vers_start_field()->field_index); |