implemented specialization of data types via type traits and handling of embedded non-trivial types
This commit is contained in:
@@ -25,6 +25,7 @@ set(SQL_SOURCES
|
||||
sql/dialect_builder.cpp
|
||||
sql/object_binder.cpp
|
||||
sql/placeholder_generator.cpp
|
||||
sql/types.cpp
|
||||
)
|
||||
|
||||
set(SQL_HEADER
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user