#pragma once #include "parser.h" #include "table.h" #include namespace usql { class USql { public: USql() {}; std::unique_ptr execute(const std::string &command); private: std::unique_ptr
execute(Node &node); 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: bool evalWhere(Node *where, Table *table, std::vector>::iterator &row) const; std::unique_ptr evalNode(Table *table, std::vector>::iterator &row, Node *node) const; std::unique_ptr evalValueNode(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; private: Parser m_parser; std::vector
m_tables; }; }