implemented specialization of data types via type traits and handling of embedded non-trivial types

This commit is contained in:
2023-12-10 22:40:01 +01:00
parent da423ea8bb
commit 8ad13076c8
17 changed files with 346 additions and 90 deletions
+4 -3
View File
@@ -18,22 +18,23 @@ query_result_impl::query_result_impl(std::unique_ptr<query_result_reader> &&read
void query_result_impl::on_primary_key(const char *id, std::string &value, size_t size)
{
reader_->read_value(id, column_index_++, value, size);
data_type_traits<std::string>::read_value(*reader_, id, column_index_++, value, size);
}
void query_result_impl::on_revision(const char *id, unsigned long long int &rev)
{
data_type_traits<unsigned long long int>::read_value(*reader_, id, column_index_++, rev);
reader_->read_value(id, column_index_++, rev);
}
void query_result_impl::on_attribute(const char *id, char *value, const utils::field_attributes &attr)
{
reader_->read_value(id, column_index_++, value, attr.size());
data_type_traits<char*>::read_value(*reader_, id, column_index_++, value, attr.size());
}
void query_result_impl::on_attribute(const char *id, std::string &value, const utils::field_attributes &attr)
{
reader_->read_value(id, column_index_++, value, attr.size());
data_type_traits<std::string>::read_value(*reader_, id, column_index_++, value, attr.size());
}
void
+85
View File
@@ -0,0 +1,85 @@
#include "matador/sql/types.hpp"
#include "matador/sql/query_result_reader.hpp"
namespace matador::sql {
void data_type_traits<char>::read_value(query_result_reader &reader, const char *id, size_t index, char &value)
{
reader.read_value(id, index, value);
}
void data_type_traits<short>::read_value(query_result_reader &reader, const char *id, size_t index, short &value)
{
reader.read_value(id, index, value);
}
void data_type_traits<int>::read_value(query_result_reader &reader, const char *id, size_t index, int &value)
{
reader.read_value(id, index, value);
}
void data_type_traits<long>::read_value(query_result_reader &reader, const char *id, size_t index, long &value)
{
reader.read_value(id, index, value);
}
void data_type_traits<long long>::read_value(query_result_reader &reader, const char *id, size_t index, long long &value)
{
reader.read_value(id, index, value);
}
void data_type_traits<unsigned char>::read_value(query_result_reader &reader, const char *id, size_t index, unsigned char &value)
{
reader.read_value(id, index, value);
}
void data_type_traits<unsigned short>::read_value(query_result_reader &reader, const char *id, size_t index, unsigned short &value)
{
reader.read_value(id, index, value);
}
void data_type_traits<unsigned int>::read_value(query_result_reader &reader, const char *id, size_t index, unsigned int &value)
{
reader.read_value(id, index, value);
}
void data_type_traits<unsigned long>::read_value(query_result_reader &reader, const char *id, size_t index, unsigned long &value)
{
reader.read_value(id, index, value);
}
void data_type_traits<unsigned long long>::read_value(query_result_reader &reader, const char *id, size_t index, unsigned long long &value)
{
reader.read_value(id, index, value);
}
void data_type_traits<bool>::read_value(query_result_reader &reader, const char *id, size_t index, bool &value)
{
reader.read_value(id, index, value);
}
void data_type_traits<float>::read_value(query_result_reader &reader, const char *id, size_t index, float &value)
{
reader.read_value(id, index, value);
}
void data_type_traits<double>::read_value(query_result_reader &reader, const char *id, size_t index, double &value)
{
reader.read_value(id, index, value);
}
void data_type_traits<const char*>::read_value(query_result_reader &reader, const char *id, size_t index, const char* value, size_t size)
{
reader.read_value(id, index, const_cast<char*>(value), size);
}
void data_type_traits<char*>::read_value(query_result_reader &reader, const char *id, size_t index, char* value, size_t size)
{
reader.read_value(id, index, value, size);
}
void data_type_traits<std::string>::read_value(query_result_reader &reader, const char *id, size_t index, std::string &value, size_t size)
{
reader.read_value(id, index, value, size);
}
}