diff --git a/cypher/codegen/code.hpp b/cypher/codegen/code.hpp deleted file mode 100644 index 02973df01..000000000 --- a/cypher/codegen/code.hpp +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -#include <string> -#include <vector> - -class Code -{ -public: - - - -private: - std::vector<std::string> buffer; -}; diff --git a/cypher/parser.cpp b/cypher/parser.cpp index 0d62e7ec2..8fcd8b0bb 100644 --- a/cypher/parser.cpp +++ b/cypher/parser.cpp @@ -4,7 +4,6 @@ #include "compiler.hpp" #include "debug/tree_print.hpp" -#include "codegen/cppgen.hpp" #include "utils/command_line/arguments.hpp" #include "cypher/common.hpp" #include "utils/terminate_handler.hpp" @@ -31,10 +30,8 @@ int main(int argc, char *argv[]) // traversers auto traverser = get_argument(arguments, "-t", "code"); auto print_traverser = Traverser::sptr(new PrintVisitor(cout)); - auto cppgen_traverser = Traverser::sptr(new CppGen()); std::map<std::string, Traverser::sptr> traversers = { {"print", print_traverser}, - {"code", cppgen_traverser} }; cypher::Compiler compiler; diff --git a/query_engine/engine b/query_engine/engine index e2ccb1702..aab2a5edd 100755 Binary files a/query_engine/engine and b/query_engine/engine differ diff --git a/query_engine/query_traverser.hpp b/query_engine/query_traverser.hpp index 1297cfb86..6412a121b 100644 --- a/query_engine/query_traverser.hpp +++ b/query_engine/query_traverser.hpp @@ -1,8 +1,16 @@ #pragma once -#include "cypher/codegen/cppgen.hpp" -#include "cypher/compiler.hpp" #include "cypher/ast/ast.hpp" +#include "cypher/compiler.hpp" +#include "traverser/node_traverser.hpp" + +// The purpose of this class is to find out has +// the query already been compiled into the machine code / c++ code +// in the same pass query arguments should be extracted (e.g. poperties +// or node names) + +// if the query has already been comiled into the machine code +// than it shouldn't be compiled again class QueryTraverser { @@ -17,10 +25,13 @@ public: void traverse() { tree.root->accept(traverser); + for (auto& kv : traverser.json) { + cout << "Key: " << kv.first << ", Value: " << kv.second << endl; + } } private: ast::Ast tree; cypher::Compiler compiler; - CppGen traverser; + NodeTraverser traverser; }; diff --git a/cypher/codegen/cppgen.hpp b/query_engine/traverser/node_traverser.hpp similarity index 56% rename from cypher/codegen/cppgen.hpp rename to query_engine/traverser/node_traverser.hpp index 395e88c22..871767192 100644 --- a/cypher/codegen/cppgen.hpp +++ b/query_engine/traverser/node_traverser.hpp @@ -9,15 +9,15 @@ using std::cout; using std::endl; -class CppGen : public Traverser +class NodeTraverser : public Traverser { - struct CreateGen : public Traverser + struct PropertiesTraverser : public Traverser { - void visit(ast::Pattern& pattern) override - { - Traverser::visit(pattern); - } - + PropertiesTraverser(NodeTraverser* node_traverser) + : node_traverser(node_traverser) {} + + // friend NodeTraverser; + void visit(ast::Property& property) override { name = property.idn->name; @@ -30,25 +30,30 @@ class CppGen : public Traverser value = string.value; } + void visit(ast::Integer& integer) override + { + value = std::to_string(integer.value); + } + void visit(ast::Node& node) override { - cout << "Node: " << node.idn->name << endl; Traverser::visit(node); - for (auto& kv : json) { - cout << "Key: " << kv.first << ", Value: " << kv.second << endl; - } + node_traverser->json = json; } private: std::string name; std::string value; std::map<std::string, std::string> json; + NodeTraverser* node_traverser; }; public: + // TODO: replace with generic value + std::map<std::string, std::string> json; void visit(ast::Create& create) override { - auto create_gen = CreateGen(); - create.accept(create_gen); + auto create_nodes = PropertiesTraverser(this); + create.accept(create_nodes); }; };