133 lines
3.4 KiB
C++
133 lines
3.4 KiB
C++
#ifndef QUERY_QUERY_INTERMEDIATES_HPP
|
|
#define QUERY_QUERY_INTERMEDIATES_HPP
|
|
|
|
#include "matador/sql/schema.hpp"
|
|
|
|
#include <string>
|
|
#include <memory>
|
|
|
|
namespace matador::sql {
|
|
class basic_condition;
|
|
}
|
|
namespace matador::query {
|
|
|
|
class query_from_intermediate;
|
|
class query_join_intermediate;
|
|
class query_on_intermediate;
|
|
class query_where_intermediate;
|
|
class query_group_by_intermediate;
|
|
class query_order_by_intermediate;
|
|
class query_order_direction_intermediate;
|
|
class query_offset_intermediate;
|
|
class query_limit_intermediate;
|
|
|
|
class query_intermediate
|
|
{
|
|
public:
|
|
explicit query_intermediate(const std::shared_ptr<sql::schema> &scm);
|
|
|
|
protected:
|
|
sql::schema& schema() const;
|
|
|
|
private:
|
|
std::shared_ptr<sql::schema> schema_;
|
|
};
|
|
|
|
class query_select_finish_intermediate : public query_intermediate
|
|
{
|
|
public:
|
|
using query_intermediate::query_intermediate;
|
|
|
|
void compile();
|
|
};
|
|
|
|
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_from_intermediate : public query_select_finish_intermediate
|
|
{
|
|
public:
|
|
using query_select_finish_intermediate::query_intermediate;
|
|
|
|
query_join_intermediate join(const std::string &join_table_name, const std::string &as);
|
|
query_where_intermediate where(const sql::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_join_intermediate : public query_intermediate
|
|
{
|
|
public:
|
|
using query_intermediate::query_intermediate;
|
|
|
|
query_on_intermediate on(const std::string &column, const std::string &join_column);
|
|
};
|
|
|
|
class query_on_intermediate : public query_select_finish_intermediate
|
|
{
|
|
public:
|
|
using query_select_finish_intermediate::query_intermediate;
|
|
|
|
query_join_intermediate join(const std::string &join_table_name, const std::string &as);
|
|
query_where_intermediate where(const sql::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_where_intermediate : public query_select_finish_intermediate
|
|
{
|
|
public:
|
|
using query_select_finish_intermediate::query_intermediate;
|
|
|
|
query_group_by_intermediate group_by(const std::string &name);
|
|
query_order_by_intermediate order_by(const std::string &name);
|
|
};
|
|
|
|
class query_group_by_intermediate : public query_select_finish_intermediate
|
|
{
|
|
public:
|
|
using query_select_finish_intermediate::query_intermediate;
|
|
|
|
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_order_direction_intermediate : public query_select_finish_intermediate
|
|
{
|
|
public:
|
|
using query_select_finish_intermediate::query_intermediate;
|
|
|
|
query_offset_intermediate offset(size_t offset);
|
|
query_limit_intermediate limit(size_t limit);
|
|
};
|
|
|
|
class query_offset_intermediate : public query_intermediate
|
|
{
|
|
public:
|
|
using query_intermediate::query_intermediate;
|
|
|
|
query_limit_intermediate limit(size_t limit);
|
|
};
|
|
|
|
class query_limit_intermediate : public query_select_finish_intermediate
|
|
{
|
|
public:
|
|
using query_select_finish_intermediate::query_intermediate;
|
|
};
|
|
|
|
}
|
|
#endif //QUERY_QUERY_INTERMEDIATES_HPP
|