|
|
|
@@ -12,105 +12,105 @@ namespace matador::utils {
|
|
|
|
|
/// @cond MATADOR_DEV
|
|
|
|
|
template <> struct data_type_traits<nullptr_t, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(std::size_t /*size*/) { return basic_type::type_null; }
|
|
|
|
|
static basic_type type(std::size_t /*size*/) { return basic_type::Null; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, nullptr_t &/*value*/, size_t /*size*/ = 0);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, nullptr_t &/*value*/, size_t /*size*/ = 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<int8_t, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::type_int8; }
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::Int8; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, int8_t &value, size_t /*size*/ = 0);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, const int8_t &value, size_t /*size*/ = 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<int16_t, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::type_int16; }
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::Int16; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, int16_t &value, size_t /*size*/ = 0);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, const int16_t &value, size_t /*size*/ = 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<int32_t, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::type_int32; }
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::Int32; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, int32_t &value, size_t /*size*/ = 0);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, const int32_t &value, size_t /*size*/ = 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<int64_t, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::type_int64; }
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::Int64; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, int64_t &value, size_t /*size*/ = 0);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, const int64_t &value, size_t /*size*/ = 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<uint8_t, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::type_uint8; }
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::UInt8; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, uint8_t &value, size_t /*size*/ = 0);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, const uint8_t &value, size_t /*size*/ = 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<uint16_t, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::type_uint16; }
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::UInt16; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, uint16_t &value, size_t /*size*/ = 0);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, const uint16_t &value, size_t /*size*/ = 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<uint32_t, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::type_uint32; }
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::UInt32; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, uint32_t &value, size_t /*size*/ = 0);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, const uint32_t &value, size_t /*size*/ = 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<uint64_t, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::type_uint64; }
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::UInt64; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, uint64_t &value, size_t /*size*/ = 0);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, const uint64_t &value, size_t /*size*/ = 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<bool, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::type_bool; }
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::Boolean; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, bool &value, size_t /*size*/ = 0);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, const bool &value, size_t /*size*/ = 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<float, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::type_float; }
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::Float; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, float &value, size_t /*size*/ = 0);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, const float &value, size_t /*size*/ = 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<double, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::type_double; }
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::Double; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, double &value, size_t /*size*/ = 0);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, const double &value, size_t /*size*/ = 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<const char*, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(const std::size_t size) { return size == 0 ? basic_type::type_text : basic_type::type_varchar; }
|
|
|
|
|
static basic_type type(const std::size_t size) { return size == 0 ? basic_type::Text : basic_type::Varchar; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, const char* value, size_t size);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, const char *value, size_t size = 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<char*, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(const std::size_t size) { return size == 0 ? basic_type::type_text : basic_type::type_varchar; }
|
|
|
|
|
static basic_type type(const std::size_t size) { return size == 0 ? basic_type::Text : basic_type::Varchar; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, char *value, size_t size);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, const char *value, size_t size = 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<char[], void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(const std::size_t size) { return size == 0 ? basic_type::type_text : basic_type::type_varchar; }
|
|
|
|
|
static basic_type type(const std::size_t size) { return size == 0 ? basic_type::Text : basic_type::Varchar; }
|
|
|
|
|
template < int N >
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, const size_t index, char (&value)[N], const size_t size) {
|
|
|
|
|
data_type_traits<const char*>::read_value(reader, id, index, value, size);
|
|
|
|
@@ -123,14 +123,14 @@ template <> struct data_type_traits<char[], void>
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<std::string, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(const std::size_t size) { return size == 0 ? basic_type::type_text : basic_type::type_varchar; }
|
|
|
|
|
static basic_type type(const std::size_t size) { return size == 0 ? basic_type::Text : basic_type::Varchar; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, std::string &value, size_t size);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, std::string &value, size_t size = 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template <> struct data_type_traits<utils::blob, void>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(std::size_t /*size*/) { return basic_type::type_blob; }
|
|
|
|
|
static basic_type type(std::size_t /*size*/) { return basic_type::Blob; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, size_t index, utils::blob &value, size_t /*size*/ = 0);
|
|
|
|
|
static void bind_value(attribute_writer &binder, size_t index, utils::blob &value, size_t /*size*/ = 0);
|
|
|
|
|
};
|
|
|
|
@@ -152,7 +152,7 @@ template <> struct data_type_traits<utils::blob, void>
|
|
|
|
|
template < typename EnumType >
|
|
|
|
|
struct data_type_traits<EnumType, std::enable_if_t<std::is_enum_v<EnumType>>>
|
|
|
|
|
{
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::type_int32; }
|
|
|
|
|
static basic_type type(std::size_t /*size*/ = 0) { return basic_type::Int32; }
|
|
|
|
|
static void read_value(attribute_reader &reader, const char *id, const size_t index, EnumType &value, const size_t size = 0) {
|
|
|
|
|
data_type_traits<int>::read_value(reader, id, index, reinterpret_cast<int&>(value), size);
|
|
|
|
|
}
|
|
|
|
|