#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_intermediates.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/utils/logger.hpp" #include namespace matador::sql { class connection { public: explicit connection(connection_info info, const std::shared_ptr &repo = std::make_shared()); explicit connection(const std::string& dns, const std::shared_ptr &repo = std::make_shared()); 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; query_create_intermediate create(); query_drop_intermediate drop(); template < class Type > query_select_intermediate select(); query_select_intermediate select(std::initializer_list columns); query_insert_intermediate insert(); query_update_intermediate update(const std::string &table); query_delete_intermediate remove(); [[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; 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; std::shared_ptr tables() const; private: connection_info connection_info_; std::unique_ptr connection_; utils::logger logger_; const class dialect &dialect_; std::shared_ptr schema_; }; template query_select_intermediate connection::select() { return query_select_intermediate{*this, column_generator::generate(*schema_)}; } } #endif //QUERY_CONNECTION_HPP