small optimization in Field_time_hires.
Fix Field_time_hires::reset()
This commit is contained in:
parent
c3f665dc66
commit
fdfeb4bea3
13
sql/field.cc
13
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);
|
||||
/*
|
||||
|
@ -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 *);
|
||||
|
Loading…
x
Reference in New Issue
Block a user