summaryrefslogtreecommitdiff
path: root/sql/field.h
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2016-12-30 13:03:47 +0100
committerSergei Golubchik <serg@mariadb.org>2017-02-13 18:12:04 +0100
commitcd4dd2b62dda31a4ea1da99ca6732ecb7ee0d628 (patch)
treede21f02863d5dfe94b65b92211f3c730216d9068 /sql/field.h
parent588eca31e3c60a6778e59e618717396eb5293ebe (diff)
downloadmariadb-git-cd4dd2b62dda31a4ea1da99ca6732ecb7ee0d628.tar.gz
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.
Diffstat (limited to 'sql/field.h')
-rw-r--r--sql/field.h12
1 files changed, 6 insertions, 6 deletions
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())