small code refactor
This commit is contained in:
parent
0ab499fe65
commit
0e897b412a
@ -1,9 +1,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "cypher/ast/ast.hpp"
|
||||
#include "cypher/compiler.hpp"
|
||||
#include "utils/string/file.hpp"
|
||||
#include "template_engine/engine.hpp"
|
||||
#include "config/config.hpp"
|
||||
#include "traverser/query_traverser.hpp"
|
||||
#include "traverser/code_traverser.hpp"
|
||||
|
||||
using std::string;
|
||||
|
||||
@ -15,23 +17,32 @@ public:
|
||||
const uint64_t stripped_hash,
|
||||
const std::string& path)
|
||||
{
|
||||
// get paths
|
||||
string template_path = CONFIG(config::TEMPLATE_CPU_CPP_PATH);
|
||||
string template_file = utils::read_file(template_path.c_str());
|
||||
traverser.build_tree(query);
|
||||
string code = traverser.traverse();
|
||||
|
||||
// traversing
|
||||
auto tree = compiler.syntax_tree(query);
|
||||
code_traverser.reset();
|
||||
tree.root->accept(code_traverser);
|
||||
|
||||
// save the code
|
||||
string generated = template_engine.render(
|
||||
template_file,
|
||||
{
|
||||
{"class_name", "CodeCPU"},
|
||||
{"stripped_hash", std::to_string(stripped_hash)},
|
||||
{"query", query},
|
||||
{"code", code},
|
||||
{"code", code_traverser.code},
|
||||
{"return_type", "int"}
|
||||
}
|
||||
);
|
||||
utils::write_file(generated, path);
|
||||
}
|
||||
|
||||
private:
|
||||
template_engine::TemplateEngine template_engine;
|
||||
QueryTraverser traverser;
|
||||
ast::Ast tree;
|
||||
cypher::Compiler compiler;
|
||||
CodeTraverser code_traverser;
|
||||
};
|
||||
|
34
query_engine/traverser/code_traverser.hpp
Normal file
34
query_engine/traverser/code_traverser.hpp
Normal file
@ -0,0 +1,34 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "cypher/visitor/traverser.hpp"
|
||||
#include "cypher/ast/queries.hpp"
|
||||
#include "write_traverser.hpp"
|
||||
#include "read_traverser.hpp"
|
||||
|
||||
class CodeTraverser : public Traverser
|
||||
{
|
||||
public:
|
||||
|
||||
std::string code;
|
||||
|
||||
void reset()
|
||||
{
|
||||
code = "";
|
||||
}
|
||||
|
||||
void visit(ast::WriteQuery& write_query) override
|
||||
{
|
||||
auto write_traverser = WriteTraverser();
|
||||
write_query.accept(write_traverser);
|
||||
code = write_traverser.code;
|
||||
}
|
||||
|
||||
void visit(ast::ReadQuery& read_query) override
|
||||
{
|
||||
auto read_traverser = ReadTraverser();
|
||||
read_query.accept(read_traverser);
|
||||
code = read_traverser.code;
|
||||
}
|
||||
};
|
@ -1,27 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "cypher/ast/ast.hpp"
|
||||
#include "cypher/compiler.hpp"
|
||||
#include "create_traverser.hpp"
|
||||
|
||||
class QueryTraverser
|
||||
{
|
||||
public:
|
||||
QueryTraverser() = default;
|
||||
|
||||
void build_tree(const std::string& query)
|
||||
{
|
||||
tree = compiler.syntax_tree(query);
|
||||
}
|
||||
|
||||
std::string traverse()
|
||||
{
|
||||
tree.root->accept(traverser);
|
||||
return traverser.code;
|
||||
}
|
||||
|
||||
private:
|
||||
ast::Ast tree;
|
||||
cypher::Compiler compiler;
|
||||
CreateTraverser traverser;
|
||||
};
|
9
query_engine/traverser/read_traverser.hpp
Normal file
9
query_engine/traverser/read_traverser.hpp
Normal file
@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include "cypher/visitor/traverser.hpp"
|
||||
|
||||
class ReadTraverser : public Traverser
|
||||
{
|
||||
public:
|
||||
std::string code;
|
||||
};
|
7
query_engine/traverser/update_traverser.hpp
Normal file
7
query_engine/traverser/update_traverser.hpp
Normal file
@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "cypher/visitor/traverser.hpp"
|
||||
|
||||
class UpdateTraverser : public Traverser
|
||||
{
|
||||
};
|
@ -7,13 +7,10 @@
|
||||
#include "cypher/visitor/traverser.hpp"
|
||||
#include "query_engine/util.hpp"
|
||||
|
||||
using std::cout;
|
||||
using std::endl;
|
||||
|
||||
class CreateTraverser : public Traverser
|
||||
class WriteTraverser : public Traverser
|
||||
{
|
||||
private:
|
||||
std::string key;
|
||||
uint32_t index{0};
|
||||
|
||||
public:
|
||||
@ -29,9 +26,7 @@ public:
|
||||
|
||||
void visit(ast::Property& property) override
|
||||
{
|
||||
key = property.idn->name;
|
||||
|
||||
Traverser::visit(property);
|
||||
auto key = property.idn->name;
|
||||
|
||||
code += line("vertex_accessor.property(");
|
||||
code += line("\t\"" + key + "\", args[" + std::to_string(index) + "]");
|
Loading…
Reference in New Issue
Block a user