From 15c1e5566f7ad8448985ca6e52805ceb4ec389a8 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 24 May 2021 01:01:30 +0100 Subject: Basic support for queries with bound parameters Bit of a reshuffle to make the types not DB specific, add some basic tests over query execution, no selects yet and no validation anything is actually right. --- lib/mysql_types.h | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'lib/mysql_types.h') diff --git a/lib/mysql_types.h b/lib/mysql_types.h index af45b4f..4f5355c 100644 --- a/lib/mysql_types.h +++ b/lib/mysql_types.h @@ -2,34 +2,19 @@ #define MYGRATE_MYSQL_TYPES_H #include "bitset.h" +#include "dbTypes.h" #include #include #include #include -#include #include -#include - -struct timespec; namespace MyGrate { class RawDataReader; namespace MySQL { - struct Date { - uint16_t year; - uint8_t month; - uint8_t day; - }; - struct Time { - uint8_t hour; - uint8_t minute; - uint8_t second; - }; - struct DateTime : public Date, public Time { - }; - using Blob = std::span; template struct Type; + template struct CType; #define DEFINE_BASE_TYPE(ET, CT, MDS, SIGN) \ template<> struct Type { \ @@ -37,6 +22,11 @@ namespace MyGrate { constexpr static size_t md_bytes {MDS}; \ static C read(RawDataReader & md, RawDataReader & data); \ } +#define DEFINE_CTYPE(ET, CT) \ + template<> struct CType { \ + using C = CT; \ + static constexpr enum_field_types type {ET}; \ + } #define DEFINE_TYPE(ET, CT, MDS) DEFINE_BASE_TYPE(ET, CT, MDS, false) #define DEFINE_ITYPE(ET, BCT, MDS) \ DEFINE_BASE_TYPE(ET, BCT, MDS, false); \ @@ -74,12 +64,22 @@ namespace MyGrate { DEFINE_TYPE(MYSQL_TYPE_JSON, std::string_view, 2); DEFINE_TYPE(MYSQL_TYPE_GEOMETRY, Blob, 1); + DEFINE_CTYPE(MYSQL_TYPE_DOUBLE, double); + DEFINE_CTYPE(MYSQL_TYPE_FLOAT, float); + DEFINE_CTYPE(MYSQL_TYPE_SHORT, int16_t); + DEFINE_CTYPE(MYSQL_TYPE_LONG, int32_t); + DEFINE_CTYPE(MYSQL_TYPE_LONGLONG, int64_t); + DEFINE_CTYPE(MYSQL_TYPE_TINY, int8_t); + DEFINE_CTYPE(MYSQL_TYPE_SHORT, uint16_t); + DEFINE_CTYPE(MYSQL_TYPE_LONG, uint32_t); + DEFINE_CTYPE(MYSQL_TYPE_LONGLONG, uint64_t); + DEFINE_CTYPE(MYSQL_TYPE_TINY, uint8_t); + DEFINE_CTYPE(MYSQL_TYPE_STRING, std::string_view); + DEFINE_CTYPE(MYSQL_TYPE_BLOB, Blob); + #undef DEFINE_ITYPE #undef DEFINE_USTYPE #undef DEFINE_TYPE - - using FieldValue = std::variant; } } -- cgit v1.2.3