query/include/matador/sql/query_compiler.hpp

60 lines
1.8 KiB
C++

#ifndef QUERY_QUERY_COMPILER_HPP
#define QUERY_QUERY_COMPILER_HPP
#include "matador/sql/query_part_visitor.hpp"
#include "matador/sql/query_parts.hpp"
#include "matador/sql/query_context.hpp"
#include <typeindex>
#include <string>
namespace matador::sql {
class dialect;
struct query_data;
class query_compiler : public query_part_visitor
{
public:
explicit query_compiler(const sql::dialect& d);
query_context compile(const query_data *data);
private:
void visit(query_select_part &select_part) override;
void visit(query_from_part &from_part) override;
void visit(query_join_part &join_part) override;
void visit(query_on_part &on_part) override;
void visit(query_where_part &where_part) override;
void visit(query_group_by_part &group_by_part) override;
void visit(query_order_by_part &order_by_part) override;
void visit(query_order_by_asc_part &order_by_asc_part) override;
void visit(query_order_by_desc_part &order_by_desc_part) override;
void visit(query_offset_part &offset_part) override;
void visit(query_limit_part &limit_part) override;
void visit(query_insert_part &insert_part) override;
void visit(query_into_part &into_part) override;
void visit(query_values_part &values_part) override;
void visit(query_update_part &update_part) override;
void visit(query_set_part &set_part) override;
void visit(query_delete_part &delete_part) override;
void visit(query_delete_from_part &delete_from_part) override;
void visit(query_create_part &create_part) override;
void visit(query_create_table_part &create_table_part) override;
void visit(query_drop_part &drop_part) override;
void visit(query_drop_table_part &drop_table_part) override;
private:
const sql::dialect &dialect_;
query_context query_;
};
}
#endif //QUERY_QUERY_COMPILER_HPP