summaryrefslogtreecommitdiff
path: root/sql/field.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/field.cc')
-rw-r--r--sql/field.cc16
1 files changed, 6 insertions, 10 deletions
diff --git a/sql/field.cc b/sql/field.cc
index 5eabccab21b..b8c63db6708 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -2616,17 +2616,14 @@ String *Field_timestamp::val_str(String *val_buffer,
String *val_ptr __attribute__((unused)))
{
uint pos;
- int extra;
int part_time;
uint32 temp;
time_t time_arg;
struct tm *l_time;
struct tm tm_tmp;
my_bool new_format= (current_thd->variables.new_mode),
- full_year=(field_length == 8 || field_length == 14);
- static const uint extras[]={0,1,2,2,4,5,5};
-
- extra= new_format ? extras[field_length/2-1] : 0;
+ full_year=(field_length == 8 || field_length == 14 || new_format);
+ int real_field_length= new_format ? 19 : field_length;
#ifdef WORDS_BIGENDIAN
if (table->db_low_byte_first)
@@ -2638,18 +2635,17 @@ String *Field_timestamp::val_str(String *val_buffer,
if (temp == 0L)
{ /* Zero time is "000000" */
if (new_format)
- val_buffer->copy("0000-00-00 00:00:00"+2*(1-full_year),
- field_length+extra);
+ val_buffer->copy("0000-00-00 00:00:00", real_field_length);
else
- val_buffer->copy("00000000000000", field_length);
+ val_buffer->copy("00000000000000", real_field_length);
return val_buffer;
}
time_arg=(time_t) temp;
localtime_r(&time_arg,&tm_tmp);
l_time=&tm_tmp;
- val_buffer->alloc(field_length+extra+1);
- char *to=(char*) val_buffer->ptr(),*end=to+field_length+extra;
+ val_buffer->alloc(real_field_length+1);
+ char *to=(char*) val_buffer->ptr(),*end=to+real_field_length;
for (pos=0; to < end ; pos++)
{