diff options
author | Alexander Barkov <bar@mariadb.org> | 2017-02-27 10:07:59 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.org> | 2017-02-27 10:07:59 +0400 |
commit | 47b7ffb396bd283bd4196194311ba39ed9692421 (patch) | |
tree | ee69ec3d890c77a123f66b5c27ac0697163491ad /sql/field.cc | |
parent | 3f83801d8266fa465d296dbe528a5ea132945a84 (diff) | |
parent | 78153cf641aea41166d3e79ae99b57b154f6a027 (diff) | |
download | mariadb-git-47b7ffb396bd283bd4196194311ba39ed9692421.tar.gz |
Merge remote-tracking branch 'origin/10.2' into bb-10.2-ext
Diffstat (limited to 'sql/field.cc')
-rw-r--r-- | sql/field.cc | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/sql/field.cc b/sql/field.cc index 2115c18469b..362c49b0abf 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -1315,12 +1315,15 @@ void Field_num::prepend_zeros(String *value) const int diff; if ((diff= (int) (field_length - value->length())) > 0) { - bmove_upp((uchar*) value->ptr()+field_length, - (uchar*) value->ptr()+value->length(), - value->length()); - bfill((uchar*) value->ptr(),diff,'0'); - value->length(field_length); - (void) value->c_ptr_quick(); // Avoid warnings in purify + const bool error= value->realloc(field_length); + if (!error) + { + bmove_upp((uchar*) value->ptr()+field_length, + (uchar*) value->ptr()+value->length(), + value->length()); + bfill((uchar*) value->ptr(),diff,'0'); + value->length(field_length); + } } } @@ -2252,9 +2255,10 @@ void Field::set_default() { if (default_value) { - table->in_use->reset_arena_for_cached_items(table->expr_arena); + Query_arena backup_arena; + table->in_use->set_n_backup_active_arena(table->expr_arena, &backup_arena); (void) default_value->expr->save_in_field(this, 0); - table->in_use->reset_arena_for_cached_items(0); + table->in_use->restore_active_arena(table->expr_arena, &backup_arena); return; } /* Copy constant value stored in s->default_values */ @@ -5203,6 +5207,7 @@ int Field_timestamp::set_time() Mark the field as having an explicit default value. @param value if available, the value that the field is being set to + @returns whether the explicit default bit was set @note Fields that have an explicit default value should not be updated @@ -5218,13 +5223,14 @@ int Field_timestamp::set_time() This is how MySQL has worked since it's start. */ -void Field_timestamp::set_explicit_default(Item *value) +bool Field_timestamp::set_explicit_default(Item *value) { if (((value->type() == Item::DEFAULT_VALUE_ITEM && !((Item_default_value*)value)->arg) || (!maybe_null() && value->null_value))) - return; + return false; set_has_explicit_value(); + return true; } #ifdef NOT_USED @@ -10611,7 +10617,7 @@ Column_definition::Column_definition(THD *thd, Field *old_field, if (length != 4) { char buff[sizeof("YEAR()") + MY_INT64_NUM_DECIMAL_DIGITS + 1]; - my_snprintf(buff, sizeof(buff), "YEAR(%lu)", length); + my_snprintf(buff, sizeof(buff), "YEAR(%llu)", length); push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE, ER_WARN_DEPRECATED_SYNTAX, ER_THD(thd, ER_WARN_DEPRECATED_SYNTAX), @@ -10891,12 +10897,13 @@ key_map Field::get_possible_keys() analyzed to check if it really should count as a value. */ -void Field::set_explicit_default(Item *value) +bool Field::set_explicit_default(Item *value) { if (value->type() == Item::DEFAULT_VALUE_ITEM && !((Item_default_value*)value)->arg) - return; + return false; set_has_explicit_value(); + return true; } |