#ifndef QUERY_POSTGRES_CONNECTION_HPP #define QUERY_POSTGRES_CONNECTION_HPP #ifdef _MSC_VER #ifdef matador_postgres_EXPORTS #define MATADOR_POSTGRES_API __declspec(dllexport) #else #define MATADOR_POSTGRES_API __declspec(dllimport) #endif #pragma warning(disable: 4355) #else #define MATADOR_POSTGRES_API #endif #include "matador/sql/interface/connection_impl.hpp" #include #include namespace matador::backends::postgres { class postgres_connection : public sql::connection_impl { public: explicit postgres_connection(const sql::connection_info &info); utils::result open() override; utils::result close() override; [[nodiscard]] utils::result is_open() const override; [[nodiscard]] utils::result is_valid() const override; [[nodiscard]] utils::result client_version() const override; [[nodiscard]] utils::result server_version() const override; utils::result execute(const std::string &stmt) override; utils::result, utils::error> prepare(const sql::query_context &context) override; utils::result, utils::error> fetch(const sql::query_context &context) override; utils::result, utils::error> describe(const std::string& table) override; utils::result exists(const std::string &schema_name, const std::string &table_name) override; [[nodiscard]] std::string to_escaped_string( const utils::blob& value ) const override; private: [[nodiscard]] static std::string generate_statement_name(const sql::query_context &query) ; private: PGconn *conn_{nullptr}; using string_to_int_map = std::unordered_map; static string_to_int_map statement_name_map_; }; } extern "C" { MATADOR_POSTGRES_API matador::sql::connection_impl* create_database(const matador::sql::connection_info &info); MATADOR_POSTGRES_API void destroy_database(matador::sql::connection_impl *db); } #endif //QUERY_POSTGRES_CONNECTION_HPP