summaryrefslogtreecommitdiff
path: root/sql/field.cc
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2017-02-27 10:07:59 +0400
committerAlexander Barkov <bar@mariadb.org>2017-02-27 10:07:59 +0400
commit47b7ffb396bd283bd4196194311ba39ed9692421 (patch)
treeee69ec3d890c77a123f66b5c27ac0697163491ad /sql/field.cc
parent3f83801d8266fa465d296dbe528a5ea132945a84 (diff)
parent78153cf641aea41166d3e79ae99b57b154f6a027 (diff)
downloadmariadb-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.cc33
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;
}