#ifndef QUERY_CONNECTION_HPP #define QUERY_CONNECTION_HPP #include "matador/sql/connection_info.hpp" #include "matador/sql/connection_impl.hpp" #include "matador/sql/dialect.hpp" #include "matador/sql/query.hpp" #include "matador/sql/query_context.hpp" #include "matador/sql/query_result.hpp" #include "matador/sql/record.hpp" #include "matador/sql/statement.hpp" #include "matador/sql/schema.hpp" #include "matador/utils/logger.hpp" #include namespace matador::sql { class connection { public: explicit connection(connection_info info); explicit connection(const std::string& dns); connection(const connection &x); connection& operator=(const connection &x); connection(connection &&x) noexcept = default; ~connection(); void open(); void close(); [[nodiscard]] bool is_open() const; [[nodiscard]] const connection_info& info() const; [[nodiscard]] record describe(const std::string &table_name) const; [[nodiscard]] bool exists(const std::string &schema_name, const std::string &table_name) const; [[nodiscard]] bool exists(const std::string &table_name) const; sql::query query(const sql::schema &schema) const; query_result fetch(const query_context &q) const; [[nodiscard]] std::unique_ptr fetch(const std::string &sql) const; [[nodiscard]] size_t execute(const std::string &sql) const; statement prepare(query_context &&query) const; const class dialect& dialect() const; private: connection_info connection_info_; std::unique_ptr connection_; utils::logger logger_; const class dialect &dialect_; }; } #endif //QUERY_CONNECTION_HPP