small code refactor
This commit is contained in:
parent
0ab499fe65
commit
0e897b412a
@ -1,9 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "cypher/ast/ast.hpp"
|
||||||
|
#include "cypher/compiler.hpp"
|
||||||
#include "utils/string/file.hpp"
|
#include "utils/string/file.hpp"
|
||||||
#include "template_engine/engine.hpp"
|
#include "template_engine/engine.hpp"
|
||||||
#include "config/config.hpp"
|
#include "config/config.hpp"
|
||||||
#include "traverser/query_traverser.hpp"
|
#include "traverser/code_traverser.hpp"
|
||||||
|
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
@ -15,23 +17,32 @@ public:
|
|||||||
const uint64_t stripped_hash,
|
const uint64_t stripped_hash,
|
||||||
const std::string& path)
|
const std::string& path)
|
||||||
{
|
{
|
||||||
|
// get paths
|
||||||
string template_path = CONFIG(config::TEMPLATE_CPU_CPP_PATH);
|
string template_path = CONFIG(config::TEMPLATE_CPU_CPP_PATH);
|
||||||
string template_file = utils::read_file(template_path.c_str());
|
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(
|
string generated = template_engine.render(
|
||||||
template_file,
|
template_file,
|
||||||
{
|
{
|
||||||
{"class_name", "CodeCPU"},
|
{"class_name", "CodeCPU"},
|
||||||
{"stripped_hash", std::to_string(stripped_hash)},
|
{"stripped_hash", std::to_string(stripped_hash)},
|
||||||
{"query", query},
|
{"query", query},
|
||||||
{"code", code},
|
{"code", code_traverser.code},
|
||||||
{"return_type", "int"}
|
{"return_type", "int"}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
utils::write_file(generated, path);
|
utils::write_file(generated, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
template_engine::TemplateEngine template_engine;
|
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 "cypher/visitor/traverser.hpp"
|
||||||
#include "query_engine/util.hpp"
|
#include "query_engine/util.hpp"
|
||||||
|
|
||||||
using std::cout;
|
|
||||||
using std::endl;
|
|
||||||
|
|
||||||
class CreateTraverser : public Traverser
|
class WriteTraverser : public Traverser
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
std::string key;
|
|
||||||
uint32_t index{0};
|
uint32_t index{0};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -29,9 +26,7 @@ public:
|
|||||||
|
|
||||||
void visit(ast::Property& property) override
|
void visit(ast::Property& property) override
|
||||||
{
|
{
|
||||||
key = property.idn->name;
|
auto key = property.idn->name;
|
||||||
|
|
||||||
Traverser::visit(property);
|
|
||||||
|
|
||||||
code += line("vertex_accessor.property(");
|
code += line("vertex_accessor.property(");
|
||||||
code += line("\t\"" + key + "\", args[" + std::to_string(index) + "]");
|
code += line("\t\"" + key + "\", args[" + std::to_string(index) + "]");
|
Loading…
Reference in New Issue
Block a user