diff options
Diffstat (limited to 'sql/field.cc')
-rw-r--r-- | sql/field.cc | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/sql/field.cc b/sql/field.cc index ff8b948ef62..23a8ecd965d 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -1371,12 +1371,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); + } } } @@ -2309,9 +2312,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 */ @@ -10509,7 +10513,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), |