query/include/matador/sql/query.hpp

49 lines
1.3 KiB
C++

#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 &db, const std::shared_ptr<sql::schema> &schema);
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<column> columns);
query_select_intermediate select(std::initializer_list<column> columns);
query_insert_intermediate insert();
query_update_intermediate update(const sql::table &table);
query_delete_intermediate remove();
private:
connection &connection_;
std::shared_ptr<sql::schema> schema_;
};
template<class Type>
query_select_intermediate query::select()
{
return query_select_intermediate{connection_, schema_, column_name_generator::generate<Type>(*schema_)};
}
template<class Type>
query_select_intermediate query::select(std::initializer_list<column> columns)
{
auto cols = column_name_generator::generate<Type>(*schema_);
cols.insert(cols.end(), columns);
return query_select_intermediate{connection_, schema_, cols};
}
}
#endif //QUERY_QUERY_HPP