#ifndef QUERY_CONNECTION_IMPL_HPP #define QUERY_CONNECTION_IMPL_HPP #include #include "matador/sql/column_definition.hpp" #include "matador/sql/connection_info.hpp" #include "matador/sql/query_context.hpp" #include "matador/utils/error.hpp" #include "matador/utils/result.hpp" #include "matador/utils/version.hpp" namespace matador::utils { using blob = std::vector; } namespace matador::sql { class query_result_impl; class statement_impl; class connection_impl { public: virtual ~connection_impl() = default; virtual utils::result open() = 0; virtual utils::result close() = 0; [[nodiscard]] virtual utils::result is_open() const = 0; [[nodiscard]] virtual utils::result is_valid() const = 0; [[nodiscard]] virtual utils::result client_version() const = 0; [[nodiscard]] virtual utils::result server_version() const = 0; virtual utils::result execute(const std::string &stmt) = 0; virtual utils::result, utils::error> fetch(const query_context &context) = 0; virtual utils::result, utils::error> prepare(const query_context &context) = 0; virtual utils::result, utils::error> describe(const std::string &table) = 0; virtual utils::result exists(const std::string &schema_name, const std::string &table_name) = 0; [[nodiscard]] const class dialect &dialect() const; [[nodiscard]] virtual std::string to_escaped_string(const utils::blob &value) const = 0; protected: explicit connection_impl(const connection_info &info); [[nodiscard]] const connection_info &info() const; private: std::reference_wrapper info_; std::reference_wrapper dialect_; }; } #endif //QUERY_CONNECTION_IMPL_HPP