From cd4dd2b62dda31a4ea1da99ca6732ecb7ee0d628 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Fri, 30 Dec 2016 13:03:47 +0100 Subject: MDEV-10201 Bad results for CREATE TABLE t1 (a INT DEFAULT b, b INT DEFAULT 4) Optionally do table->update_default_fields() even for INSERT that supposedly provides values for all column. Because these "values" might be DEFAULT, which would need table->update_default_fields() at the end. Also set Item_default_value::used_tables() from the default expression. Non-zero used_field() means that mysql_insert() will initialize all fields to their default values (with restore_record()) even if all columns are later provided with values. Because default expressions may refer to other columns and they must be initialized. --- sql/field.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'sql/field.h') diff --git a/sql/field.h b/sql/field.h index f0c3b48cd6a..2dc5d91c126 100644 --- a/sql/field.h +++ b/sql/field.h @@ -954,7 +954,7 @@ public: { return bitmap_is_set(&table->has_value_set, field_index); } - virtual void set_explicit_default(Item *value); + virtual bool set_explicit_default(Item *value); /** Evaluates the @c UPDATE default function, if one exists, and stores the @@ -2379,9 +2379,9 @@ public: uint32 pack_length() const { return 4; } void sql_type(String &str) const; bool zero_pack() const { return 0; } - virtual int set_time(); - virtual void set_explicit_default(Item *value); - virtual int evaluate_update_default_function() + int set_time(); + bool set_explicit_default(Item *value); + int evaluate_update_default_function() { int res= 0; if (has_update_default_function()) @@ -2813,8 +2813,8 @@ public: void sql_type(String &str) const; bool get_date(MYSQL_TIME *ltime, ulonglong fuzzydate) { return Field_datetime::get_TIME(ltime, ptr, fuzzydate); } - virtual int set_time(); - virtual int evaluate_update_default_function() + int set_time(); + int evaluate_update_default_function() { int res= 0; if (has_update_default_function()) -- cgit v1.2.1