From fdfeb4bea389f32fdc5fb493e3d003f9ed9d4713 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 9 Jun 2011 18:06:29 +0200 Subject: [PATCH] small optimization in Field_time_hires. Fix Field_time_hires::reset() --- sql/field.cc | 13 ++++++++----- sql/field.h | 4 ++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/sql/field.cc b/sql/field.cc index 884c424aaf7..f6b30b4dee3 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -5364,11 +5364,15 @@ void Field_time::sql_type(String &res) const res.set_ascii(STRING_WITH_LEN("time")); } -static const longlong t_shift= ((TIME_MAX_VALUE_SECONDS+1)*TIME_SECOND_PART_FACTOR); +int Field_time_hires::reset() +{ + store_bigendian(zero_point, ptr, Field_time_hires::pack_length()); + return 0; +} + void Field_time_hires::store_TIME(MYSQL_TIME *ltime) { - ulonglong packed= sec_part_shift(pack_time(ltime), dec) + - sec_part_shift(t_shift, dec); + ulonglong packed= sec_part_shift(pack_time(ltime), dec) + zero_point; store_bigendian(packed, ptr, Field_time_hires::pack_length()); } @@ -5425,8 +5429,7 @@ bool Field_time_hires::get_date(MYSQL_TIME *ltime, uint fuzzydate) uint32 len= pack_length(); longlong packed= read_bigendian(ptr, len); - if (packed) - packed= sec_part_unshift(packed - sec_part_shift(t_shift, dec), dec); + packed= sec_part_unshift(packed - zero_point, dec); unpack_time(packed, ltime); /* diff --git a/sql/field.h b/sql/field.h index e03a10a791d..535f024e2ba 100644 --- a/sql/field.h +++ b/sql/field.h @@ -1420,6 +1420,7 @@ public: class Field_time_hires :public Field_time { uint dec; + longlong zero_point; void store_TIME(MYSQL_TIME *ltime); public: Field_time_hires(uchar *ptr_arg, uchar *null_ptr_arg, uchar null_bit_arg, @@ -1431,6 +1432,8 @@ public: { DBUG_ASSERT(dec); DBUG_ASSERT(dec <= TIME_SECOND_PART_DIGITS); + zero_point= sec_part_shift( + ((TIME_MAX_VALUE_SECONDS+1)*TIME_SECOND_PART_FACTOR), dec); } enum ha_base_keytype key_type() const { return HA_KEYTYPE_BINARY; } uint decimals() const { return dec; } @@ -1438,6 +1441,7 @@ public: longlong val_int(void); double val_real(void); String *val_str(String*,String *); + int reset(void); bool get_date(MYSQL_TIME *ltime, uint fuzzydate); bool send_binary(Protocol *protocol); int cmp(const uchar *,const uchar *);