#ifndef QUERY_QUERY_HPP #define QUERY_QUERY_HPP #include "matador/sql/query_intermediates.hpp" namespace matador::sql { class connection; class query { public: explicit query(connection &c); query(const query &) = delete; query& operator=(const query &) = delete; query_create_intermediate create(); query_drop_intermediate drop(); template < class Type > query_select_intermediate select(); template < class Type > query_select_intermediate select(std::initializer_list columns); query_select_intermediate select(std::initializer_list columns); query_insert_intermediate insert(); query_update_intermediate update(const std::string &table); query_delete_intermediate remove(); private: [[nodiscard]] const sql::schema& schema() const; private: connection &connection_; }; template query_select_intermediate query::select() { return query_select_intermediate{connection_, column_name_generator::generate(this->schema())}; } template query_select_intermediate query::select(std::initializer_list columns) { auto cols = column_name_generator::generate(this->schema()); cols.insert(cols.end(), columns); return query_select_intermediate{connection_, cols}; } } #endif //QUERY_QUERY_HPP