added postgres backend

This commit is contained in:
2023-11-25 12:33:51 +01:00
parent c2a96f4cbd
commit 825e530a8d
20 changed files with 547 additions and 65 deletions
@@ -16,6 +16,10 @@ sqlite_connection::sqlite_connection(const sql::connection_info &info)
void sqlite_connection::open()
{
if (is_open()) {
return;
}
const auto ret = sqlite3_open(info().database.c_str(), &sqlite_db_);
if (ret != SQLITE_OK) {
+17 -59
View File
@@ -1,53 +1,11 @@
#include "sqlite_result_reader.hpp"
#include "matador/sql/to_value.hpp"
#include <algorithm>
#include <cstring>
#include <stdexcept>
namespace matador::backends::sqlite {
template < class Type >
void read(Type &x, const char *val, typename std::enable_if<std::is_integral<Type>::value && std::is_signed<Type>::value>::type* = nullptr)
{
if (strlen(val) == 0) {
return;
}
char *end;
x = static_cast<Type>(strtoll(val, &end, 10));
if (end == nullptr) {
// Todo: check error
throw std::logic_error("couldn't convert value to number");
}
}
template < class Type >
void read(Type &x, const char *val, typename std::enable_if<std::is_integral<Type>::value && std::is_unsigned<Type>::value>::type* = nullptr)
{
if (strlen(val) == 0) {
return;
}
char *end;
x = static_cast<Type>(strtoull(val, &end, 10));
if (end == nullptr) {
// Todo: check error
throw std::logic_error("couldn't convert value to number");
}
}
template < class Type >
void read(Type &x, const char *val, typename std::enable_if<std::is_floating_point<Type>::value>::type* = nullptr)
{
if (strlen(val) == 0) {
return;
}
char *end;
x = static_cast<Type>(strtold(val, &end));
if (end == nullptr) {
// Todo: check error
throw std::logic_error("couldn't convert value to number");
}
}
sqlite_result_reader::sqlite_result_reader(sqlite_result_reader::rows result, size_t column_count)
: result_(std::move(result))
, column_count_(column_count) {}
@@ -78,67 +36,67 @@ bool sqlite_result_reader::fetch()
void sqlite_result_reader::read_value(const char *id, size_t index, char &value)
{
read(value, result_[row_index_][index]);
sql::to_value(value, result_[row_index_][index]);
}
void sqlite_result_reader::read_value(const char *id, size_t index, short &value)
{
read(value, result_[row_index_][index]);
sql::to_value(value, result_[row_index_][index]);
}
void sqlite_result_reader::read_value(const char *id, size_t index, int &value)
{
read(value, result_[row_index_][index]);
sql::to_value(value, result_[row_index_][index]);
}
void sqlite_result_reader::read_value(const char *id, size_t index, long &value)
{
read(value, result_[row_index_][index]);
sql::to_value(value, result_[row_index_][index]);
}
void sqlite_result_reader::read_value(const char *id, size_t index, long long int &value)
{
read(value, result_[row_index_][index]);
sql::to_value(value, result_[row_index_][index]);
}
void sqlite_result_reader::read_value(const char *id, size_t index, unsigned char &value)
{
read(value, result_[row_index_][index]);
sql::to_value(value, result_[row_index_][index]);
}
void sqlite_result_reader::read_value(const char *id, size_t index, unsigned short &value)
{
read(value, result_[row_index_][index]);
sql::to_value(value, result_[row_index_][index]);
}
void sqlite_result_reader::read_value(const char *id, size_t index, unsigned int &value)
{
read(value, result_[row_index_][index]);
sql::to_value(value, result_[row_index_][index]);
}
void sqlite_result_reader::read_value(const char *id, size_t index, unsigned long &value)
{
read(value, result_[row_index_][index]);
sql::to_value(value, result_[row_index_][index]);
}
void sqlite_result_reader::read_value(const char *id, size_t index, unsigned long long int &value)
{
read(value, result_[row_index_][index]);
sql::to_value(value, result_[row_index_][index]);
}
void sqlite_result_reader::read_value(const char *id, size_t index, bool &value)
{
read(value, result_[row_index_][index]);
sql::to_value(value, result_[row_index_][index]);
}
void sqlite_result_reader::read_value(const char *id, size_t index, float &value)
{
read(value, result_[row_index_][index]);
sql::to_value(value, result_[row_index_][index]);
}
void sqlite_result_reader::read_value(const char *id, size_t index, double &value)
{
read(value, result_[row_index_][index]);
sql::to_value(value, result_[row_index_][index]);
}
void sqlite_result_reader::read_value(const char *id, size_t index, char *value, size_t size)
@@ -175,7 +133,7 @@ template < typename Type >
void convert(const char *valstr, sql::any_type &value)
{
Type val{};
read(val, valstr);
sql::to_value(val, valstr);
value = val;
}
@@ -220,7 +178,7 @@ void sqlite_result_reader::read_value(const char *id, size_t index, sql::any_typ
break;
case sql::data_type_t::type_bool: {
int val{};
read(val, result_[row_index_][index]);
sql::to_value(val, result_[row_index_][index]);
value = val > 0;
break;
}