#pragma once #include #include #include #include #include #include "query/frontend/semantic/symbol_table.hpp" #include "query/plan/operator.hpp" namespace database { class GraphDbAccessor; } // Shorthand for a vector of pairs (logical_plan, cost). typedef std::vector< std::pair, double>> PlansWithCost; // Encapsulates a consoles command function. struct Command { typedef std::vector Args; // Function of this command std::function function; // Number of arguments the function works with. int arg_count; // Explanation of the command. std::string documentation; }; #define DEFCOMMAND(Name) \ void Name##Command(database::GraphDbAccessor &dba, \ const query::SymbolTable &symbol_table, \ PlansWithCost &plans, const Command::Args &args) void AddCommand(const std::string &name, const Command &command); void RunInteractivePlanning(database::GraphDbAccessor *dba);