#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 #include 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_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_insert_part &insert_part) override; void visit(query_values_part &values_part) override; void visit(query_update_part &update_part) override; void visit(query_delete_part &delete_part) override; void visit(query_create_part &create_part) override; void visit(query_drop_part &drop_part) override; private: const sql::dialect &dialect_; query_context query_; }; } #endif //QUERY_QUERY_COMPILER_HPP