summaryrefslogtreecommitdiff
path: root/sql/table.cc
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2019-09-02 10:53:46 +0200
committerSergei Golubchik <serg@mariadb.org>2019-09-03 20:34:30 +0200
commit17ab02f4b0537de321a281f47dec825a6368d483 (patch)
tree1ce787d6d66c224336266e55510945666661c814 /sql/table.cc
parentef00ac4c86daf3294c46a45358da636763fb0049 (diff)
downloadmariadb-git-17ab02f4b0537de321a281f47dec825a6368d483.tar.gz
cleanup: on update default now
* remove one level of virtual functions * remove redundant checks * remove an if() as the value is always known at compilation time don't pretend that "DEFAULT expr" and "ON UPDATE DEFAULT NOW" are "basically the same thing"
Diffstat (limited to 'sql/table.cc')
-rw-r--r--sql/table.cc28
1 files changed, 19 insertions, 9 deletions
diff --git a/sql/table.cc b/sql/table.cc
index 07858ab270a..e39b73b2f4b 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -7736,7 +7736,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;
@@ -7756,14 +7756,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);
@@ -7776,6 +7771,21 @@ int TABLE::update_default_fields(bool update_command, bool ignore_errors)
DBUG_RETURN(res);
}
+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;
+}
+
+
/**
Reset markers that fields are being updated
*/