#pragma once #include "parser.h" #include "table.h" #include namespace usql { class Executor { private: public: Executor(); std::unique_ptr execute(Node &node); private: std::unique_ptr
execute_create_table(CreateTableNode &node); std::unique_ptr
execute_insert_into_table(InsertIntoTableNode &node); std::unique_ptr
execute_select(SelectFromTableNode &node); std::unique_ptr
execute_delete(DeleteFromTableNode &node); std::unique_ptr
execute_update(UpdateTableNode &node); std::unique_ptr
execute_load(LoadIntoTableNode &node); Table *find_table(const std::string name); std::unique_ptr
create_stmt_result_table(int code, std::string text); private: std::vector
m_tables; bool evalWhere(Node *where, Table *table, std::vector>::iterator &row) const; std::unique_ptr evalNode(Table *table, std::vector>::iterator &row, Node *node) const; bool evalRelationalOperator(const RelationalOperatorNode &filter, Table *table, std::vector>::iterator &row) const; bool evalLogicalOperator(LogicalOperatorNode &node, Table *pTable, std::vector>::iterator &iter) const; std::unique_ptr evalArithmetic(ColumnType outType, ArithmeticalOperatorNode &node, Table *table, std::vector>::iterator &row) const; }; }