summaryrefslogtreecommitdiff
path: root/sql/field.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/field.cc')
-rw-r--r--sql/field.cc28
1 files changed, 28 insertions, 0 deletions
diff --git a/sql/field.cc b/sql/field.cc
index 6b38b38782c..7cb1ed404e6 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -5026,6 +5026,22 @@ my_time_t Field_timestamp::get_timestamp(const uchar *pos,
}
+bool Field_timestamp::val_native(Native *to)
+{
+ int32 nr= sint4korr(ptr);
+ if (!nr)
+ {
+ to->length(0); // Zero datetime '0000-00-00 00:00:00'
+ return false;
+ }
+ if (to->alloc(4))
+ return true;
+ mi_int4store((uchar *) to->ptr(), nr);
+ to->length(4);
+ return false;
+}
+
+
int Field_timestamp::store_TIME_with_warning(THD *thd, const Datetime *dt,
const ErrConv *str, int was_cut)
{
@@ -5413,6 +5429,18 @@ my_time_t Field_timestamp_hires::get_timestamp(const uchar *pos,
return mi_uint4korr(pos);
}
+
+bool Field_timestamp_hires::val_native(Native *to)
+{
+ ASSERT_COLUMN_MARKED_FOR_READ;
+ struct timeval tm;
+ tm.tv_sec= mi_uint4korr(ptr);
+ tm.tv_usec= sec_part_unshift(read_bigendian(ptr+4, sec_part_bytes(dec)), dec);
+ return Timestamp_or_zero_datetime(Timestamp(tm), tm.tv_sec == 0).
+ to_native(to, dec);
+}
+
+
double Field_timestamp_with_dec::val_real(void)
{
MYSQL_TIME ltime;