84 lines
3.5 KiB
C++
84 lines
3.5 KiB
C++
#ifndef QUERY_POSTGRES_RESULT_READER_HPP
|
|
#define QUERY_POSTGRES_RESULT_READER_HPP
|
|
|
|
#include "matador/sql/interface/query_result_reader.hpp"
|
|
|
|
#include <libpq-fe.h>
|
|
|
|
namespace matador::backends::postgres {
|
|
|
|
namespace detail {
|
|
|
|
class empty_binder final : public utils::attribute_reader
|
|
{
|
|
public:
|
|
void read_value(const char *, size_t, int8_t &) override {}
|
|
void read_value(const char *, size_t, int16_t &) override {}
|
|
void read_value(const char *, size_t, int32_t &) override {}
|
|
void read_value(const char *, size_t, int64_t &) override {}
|
|
void read_value(const char *, size_t, uint8_t &) override {}
|
|
void read_value(const char *, size_t, uint16_t &) override {}
|
|
void read_value(const char *, size_t, uint32_t &) override {}
|
|
void read_value(const char *, size_t, uint64_t &) override {}
|
|
void read_value(const char *, size_t, bool &) override {}
|
|
void read_value(const char *, size_t, float &) override {}
|
|
void read_value(const char *, size_t, double &) override {}
|
|
void read_value(const char *, size_t, time &) override {}
|
|
void read_value(const char *, size_t, date &) override {}
|
|
void read_value(const char *, size_t, char *, size_t) override {}
|
|
void read_value(const char *, size_t, std::string &) override {}
|
|
void read_value(const char *, size_t, std::string &, size_t) override {}
|
|
void read_value(const char *, size_t, utils::blob &) override {}
|
|
void read_value(const char *, size_t, utils::value &, size_t) override {}
|
|
};
|
|
|
|
}
|
|
|
|
class postgres_result_reader final : public sql::query_result_reader
|
|
{
|
|
public:
|
|
explicit postgres_result_reader(PGresult *result);
|
|
~postgres_result_reader() override;
|
|
|
|
[[nodiscard]] size_t column_count() const override;
|
|
[[nodiscard]] const char *column(size_t index) const override;
|
|
utils::result<bool, utils::error> fetch() override;
|
|
[[nodiscard]] size_t start_column_index() const override;
|
|
void unshift() override;
|
|
|
|
void read_value(const char *id, size_t index, int8_t &value) override;
|
|
void read_value(const char *id, size_t index, int16_t &value) override;
|
|
void read_value(const char *id, size_t index, int32_t &value) override;
|
|
void read_value(const char *id, size_t index, int64_t &value) override;
|
|
void read_value(const char *id, size_t index, uint8_t &value) override;
|
|
void read_value(const char *id, size_t index, uint16_t &value) override;
|
|
void read_value(const char *id, size_t index, uint32_t &value) override;
|
|
void read_value(const char *id, size_t index, uint64_t &value) override;
|
|
void read_value(const char *id, size_t index, bool &value) override;
|
|
void read_value(const char *id, size_t index, float &value) override;
|
|
void read_value(const char *id, size_t index, double &value) override;
|
|
void read_value(const char *id, size_t index, matador::time &value) override;
|
|
void read_value(const char *id, size_t index, matador::date &value) override;
|
|
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 size) override;
|
|
void read_value(const char *id, size_t index, utils::blob &value) override;
|
|
void read_value(const char *id, size_t index, utils::value &val, size_t size) override;
|
|
|
|
protected:
|
|
attribute_reader &result_binder() override;
|
|
|
|
private:
|
|
PGresult *result_{};
|
|
|
|
size_t row_count_{};
|
|
size_t column_count_{};
|
|
int row_index_{-1};
|
|
|
|
detail::empty_binder empty_binder_;
|
|
};
|
|
|
|
}
|
|
|
|
#endif //QUERY_POSTGRES_RESULT_READER_HPP
|