diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-08-27 20:10:32 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-08-27 20:10:32 +0100 |
commit | 6fdb82fa7f196173589ca281642ddc6ac6961005 (patch) | |
tree | 90292fbf70fc2a0e6e6212743f74b74193af633a /lib/mysql_types.cpp | |
parent | Test mod100_extract (diff) | |
download | mygrate-6fdb82fa7f196173589ca281642ddc6ac6961005.tar.bz2 mygrate-6fdb82fa7f196173589ca281642ddc6ac6961005.tar.xz mygrate-6fdb82fa7f196173589ca281642ddc6ac6961005.zip |
Extract and test time2From24bit
Diffstat (limited to 'lib/mysql_types.cpp')
-rw-r--r-- | lib/mysql_types.cpp | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/lib/mysql_types.cpp b/lib/mysql_types.cpp index 8b2208e..40614ef 100644 --- a/lib/mysql_types.cpp +++ b/lib/mysql_types.cpp @@ -3,10 +3,21 @@ #include "rawDataReader.h" #include <algorithm> #include <array> +#include <byteswap.h> #include <stdexcept> #include <string> namespace MyGrate::MySQL { +#define NTOH(B) \ + inline auto ntoh(uint##B##_t x) \ + { \ + if constexpr (__BYTE_ORDER == __LITTLE_ENDIAN) \ + x = bswap_##B(x); \ + return x; \ + } + NTOH(32); + NTOH(64); + typename Type<MYSQL_TYPE_NULL, false>::C Type<MYSQL_TYPE_NULL, false>::read(RawDataReader &, RawDataReader &) { @@ -153,10 +164,21 @@ namespace MyGrate::MySQL { return t; } + Time + time2From24bit(uint32_t tint) + { + Time t {}; + t.second = bitslice<6>(tint, 8); + t.minute = bitslice<6>(tint, 14); + t.hour = bitslice<5>(tint, 20); + return t; + } + typename Type<MYSQL_TYPE_TIME2>::C - Type<MYSQL_TYPE_TIME2>::read(RawDataReader &, RawDataReader &) + Type<MYSQL_TYPE_TIME2>::read(RawDataReader & md, RawDataReader & data) { - throw std::logic_error("Not implemented"); + md.discard(1); + return time2From24bit(ntoh(data.readValue<uint32_t>(3))); } typename Type<MYSQL_TYPE_DATE>::C |