#ifndef QUERY_CONNECTION_INTERMEDIATES_HPP #define QUERY_CONNECTION_INTERMEDIATES_HPP #include "matador/sql/column.hpp" #include "matador/sql/key_value_pair.hpp" #include "matador/sql/result.hpp" #include namespace matador::sql { class basic_condition; class connection; class query_builder; class query_intermediate { public: query_intermediate(connection &db, query_builder &query); protected: connection& db(); query_builder& query(); private: connection &db_; query_builder &query_; }; class query_select_finish : public query_intermediate { protected: using query_intermediate::query_intermediate; public: result fetch_all(); result fetch_one(); result fetch_value(); }; class query_limit_intermediate : public query_select_finish { public: using query_select_finish::query_select_finish; }; class query_offset_intermediate : public query_intermediate { public: using query_intermediate::query_intermediate; query_limit_intermediate limit(size_t limit); }; class query_order_direction_intermediate : public query_select_finish { public: using query_select_finish::query_select_finish; query_offset_intermediate offset(size_t offset); query_limit_intermediate limit(size_t limit); }; class query_order_by_intermediate; class query_group_by_intermediate : public query_select_finish { public: using query_select_finish::query_select_finish; query_order_by_intermediate order_by(const std::string &name); }; class query_order_by_intermediate : public query_intermediate { public: using query_intermediate::query_intermediate; query_order_direction_intermediate asc(); query_order_direction_intermediate desc(); }; class query_where_intermediate : public query_select_finish { public: using query_select_finish::query_select_finish; query_group_by_intermediate group_by(const std::string &name); query_order_by_intermediate order_by(const std::string &name); }; class query_from_intermediate : public query_select_finish { public: using query_select_finish::query_select_finish; query_where_intermediate where(const basic_condition &cond); query_group_by_intermediate group_by(const std::string &name); query_order_by_intermediate order_by(const std::string &name); }; class query_select_intermediate : public query_intermediate { public: using query_intermediate::query_intermediate; query_from_intermediate from(const std::string &table, const std::string &as = ""); }; class query_execute_finish : public query_intermediate { public: using query_intermediate::query_intermediate; std::pair execute(); }; class query_into_intermediate : public query_intermediate { public: using query_intermediate::query_intermediate; query_execute_finish values(std::initializer_list values); }; class query_create_drop_finish : public query_intermediate { public: using query_intermediate::query_intermediate; void execute(); }; class query_create_intermediate : query_intermediate { public: using query_intermediate::query_intermediate; query_create_drop_finish table(const std::string &table, std::initializer_list columns); }; class query_drop_intermediate : query_intermediate { public: using query_intermediate::query_intermediate; query_create_drop_finish table(const std::string &table); }; class query_insert_intermediate : public query_intermediate { public: using query_intermediate::query_intermediate; query_into_intermediate into(const std::string &table, std::initializer_list column_names); }; class query_execute_where_intermediate : public query_execute_finish { public: using query_execute_finish::query_execute_finish; query_execute_finish limit(int limit); }; class query_set_intermediate : public query_execute_finish { public: using query_execute_finish::query_execute_finish; query_execute_where_intermediate where(const basic_condition &cond); }; class query_update_intermediate : public query_intermediate { public: using query_intermediate::query_intermediate; query_set_intermediate set(std::initializer_list columns); }; class query_delete_from_intermediate : public query_execute_finish { public: using query_execute_finish::query_execute_finish; query_execute_where_intermediate where(const basic_condition &cond); }; class query_delete_intermediate : public query_intermediate { public: using query_intermediate::query_intermediate; query_delete_from_intermediate from(const std::string &table, const std::string &as = ""); }; } #endif //QUERY_CONNECTION_INTERMEDIATES_HPP