finished postgres fetch

This commit is contained in:
2023-11-26 20:09:48 +01:00
parent 825e530a8d
commit 640dcfadb6
9 changed files with 194 additions and 99 deletions
@@ -38,7 +38,6 @@ public:
void read_value(const char *id, size_t index, char *value, size_t size) override;
void read_value(const char *id, size_t index, std::string &value) override;
void read_value(const char *id, size_t index, std::string &value, size_t s) override;
void read_value(const char *id, size_t index, sql::any_type &value, sql::data_type_t type, size_t size) override;
private:
rows result_;
@@ -129,86 +129,4 @@ void sqlite_result_reader::read_value(const char *id, size_t index, std::string
value.assign(result_[row_index_][index]);
}
template < typename Type >
void convert(const char *valstr, sql::any_type &value)
{
Type val{};
sql::to_value(val, valstr);
value = val;
}
void sqlite_result_reader::read_value(const char *id, size_t index, sql::any_type &value, sql::data_type_t type, size_t size)
{
switch (type) {
case sql::data_type_t::type_char:
convert<char>(result_[row_index_][index], value);
break;
case sql::data_type_t::type_short:
convert<short>(result_[row_index_][index], value);
break;
case sql::data_type_t::type_int:
convert<int>(result_[row_index_][index], value);
break;
case sql::data_type_t::type_long:
convert<long>(result_[row_index_][index], value);
break;
case sql::data_type_t::type_long_long:
convert<long long>(result_[row_index_][index], value);
break;
case sql::data_type_t::type_unsigned_char:
convert<unsigned char>(result_[row_index_][index], value);
break;
case sql::data_type_t::type_unsigned_short:
convert<unsigned short>(result_[row_index_][index], value);
break;
case sql::data_type_t::type_unsigned_int:
convert<unsigned int>(result_[row_index_][index], value);
break;
case sql::data_type_t::type_unsigned_long:
convert<unsigned long>(result_[row_index_][index], value);
break;
case sql::data_type_t::type_unsigned_long_long:
convert<unsigned long long>(result_[row_index_][index], value);
break;
case sql::data_type_t::type_float:
convert<float>(result_[row_index_][index], value);
break;
case sql::data_type_t::type_double:
convert<double>(result_[row_index_][index], value);
break;
case sql::data_type_t::type_bool: {
int val{};
sql::to_value(val, result_[row_index_][index]);
value = val > 0;
break;
}
case sql::data_type_t::type_text:
case sql::data_type_t::type_varchar: {
value = std::string{result_[row_index_][index]};
break;
}
case sql::data_type_t::type_char_pointer: {
value = result_[row_index_][index];
break;
}
case sql::data_type_t::type_time:
case sql::data_type_t::type_date: {
value = std::string{result_[row_index_][index]};
break;
}
case sql::data_type_t::type_null: {
value = nullptr_t{};
break;
}
case sql::data_type_t::type_blob: {
throw std::logic_error("data type blob not supported");
}
case sql::data_type_t::type_unknown: {
value = std::string(result_[row_index_][index]);
break;
}
}
}
}