From 1d1242af50c56f80d7c83fe1afa0d3a812920ed4 Mon Sep 17 00:00:00 2001 From: Marko Budiselic <mbudiselicbuda@gmail.com> Date: Sun, 26 Jun 2016 23:43:28 +0100 Subject: [PATCH] query_engine executable file --- CMakeLists.txt | 36 +++++++++++++++++-- src/query_engine/code_compiler.hpp | 2 +- src/query_engine/main.cpp | 7 ++-- src/query_engine/traverser/read_traverser.hpp | 16 ++++----- .../traverser/write_traverser.hpp | 16 ++++----- src/utils/string/file.hpp | 8 ++++- 6 files changed, 60 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6e3e39b4f..0e3e8e214 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,6 +33,17 @@ function(get_file_names file_paths file_names) set(file_names "${file_names}" PARENT_SCOPE) endfunction() +MACRO(SUBDIRLIST result curdir) + FILE(GLOB children RELATIVE ${curdir} ${curdir}/*) + SET(dirlist "") + FOREACH(child ${children}) + IF(IS_DIRECTORY ${curdir}/${child}) + LIST(APPEND dirlist ${child}) + ENDIF() + ENDFOREACH() + SET(${result} ${dirlist}) +ENDMACRO() + # custom targets # move test data data to the build directory @@ -93,6 +104,17 @@ SET(cypher_build_include_dir ${build_include_dir}/cypher) FILE(MAKE_DIRECTORY ${cypher_build_include_dir}) FILE(RENAME ${CMAKE_BINARY_DIR}/cypher.h ${cypher_build_include_dir}/cypher.h) +# copy query_engine's templates file +FILE(COPY ${src_dir}/query_engine/template DESTINATION ${CMAKE_BINARY_DIR}) +# create destination folder for compiled queries +FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/compiled/cpu) + +# TODO: filter header files, all files don't need to be copied +SUBDIRLIST(source_folders ${src_dir}) +foreach(source_folder ${source_folders}) + file(COPY ${src_dir}/${source_folder} DESTINATION ${build_include_dir}) +endforeach() + # compiler options SET(COMPILE_OPTIONS "-O0 -g3 -Wall -Werror -fmessage-length=0") @@ -134,18 +156,26 @@ add_library(cypher_lib STATIC ${CMAKE_BINARY_DIR}/cypher.cpp) enable_testing() add_subdirectory(tests) +# REST API preprocessor EXECUTE_PROCESS( COMMAND python link_resources.py WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/api ) -# add main executable +# memgraph executable add_executable(memgraph src/memgraph.cpp) add_dependencies(memgraph cypher_lib) - -# link libraries +# memgraph link libraries target_link_libraries(memgraph Threads::Threads) target_link_libraries(memgraph pcre) target_link_libraries(memgraph ${libuv_static_lib}) target_link_libraries(memgraph ${r3_static_lib}) target_link_libraries(memgraph ${http_parser_static_lib}) + +# query_engine executable +add_executable(query_engine src/query_engine/main.cpp) +# query_engine link libraries +target_link_libraries(query_engine Threads::Threads) +target_link_libraries(query_engine dl) +target_link_libraries(query_engine cypher_lib) +target_link_libraries(query_engine ${fmt_static_lib}) diff --git a/src/query_engine/code_compiler.hpp b/src/query_engine/code_compiler.hpp index 92bb0a110..d07531f8d 100644 --- a/src/query_engine/code_compiler.hpp +++ b/src/query_engine/code_compiler.hpp @@ -15,7 +15,7 @@ public: "-std=c++1y", // compile flags in_file, // input file "-o", out_file, // ouput file - "-I../", // include paths + "-I./include", // include paths (TODO: parameter) "-shared -fPIC" // shared library flags ); diff --git a/src/query_engine/main.cpp b/src/query_engine/main.cpp index 1a4031dc8..44924964a 100644 --- a/src/query_engine/main.cpp +++ b/src/query_engine/main.cpp @@ -17,11 +17,10 @@ int main(int argc, char** argv) auto arguments = all_arguments(argc, argv); // query extraction - // auto cypher_query = extract_query(arguments); - // cout << "QUERY: " << cypher_query << endl; - + auto cypher_query = extract_query(arguments); + cout << "QUERY: " << cypher_query << endl; QueryEngine engine; - // engine.execute(cypher_query); + engine.execute(cypher_query); // using std::placeholders::_1; // auto f = std::bind(&QueryEngine::execute, &engine, _1); diff --git a/src/query_engine/traverser/read_traverser.hpp b/src/query_engine/traverser/read_traverser.hpp index 047e44e85..3a427abb3 100644 --- a/src/query_engine/traverser/read_traverser.hpp +++ b/src/query_engine/traverser/read_traverser.hpp @@ -30,13 +30,13 @@ public: void visit(ast::Return& ret) override { code += line("t.commit();"); - code += line("auto &properties = vertex_accessor.properties();"); - code += line("ResultList::data_t data = {&properties};"); - code += line("auto result_data = " - "std::make_shared<ResultList>(std::move(data));"); - code += line("QueryResult::data_t query_data = {{\"" + - ret.return_list->value->name + "\", result_data}};"); - code += line("return std::make_shared<QueryResult>" - "(std::move(query_data));"); + // code += line("auto &properties = vertex_accessor.properties();"); + // code += line("ResultList::data_t data = {&properties};"); + // code += line("auto result_data = " + // "std::make_shared<ResultList>(std::move(data));"); + // code += line("QueryResult::data_t query_data = {{\"" + + // ret.return_list->value->name + "\", result_data}};"); + // code += line("return std::make_shared<QueryResult>" + // "(std::move(query_data));"); } }; diff --git a/src/query_engine/traverser/write_traverser.hpp b/src/query_engine/traverser/write_traverser.hpp index ad97aba4c..dbe7047ef 100644 --- a/src/query_engine/traverser/write_traverser.hpp +++ b/src/query_engine/traverser/write_traverser.hpp @@ -38,13 +38,13 @@ public: void visit(ast::Return& ret) override { code += line("t.commit();"); - code += line("auto &properties = vertex_accessor.properties();"); - code += line("ResultList::data_t data = {&properties};"); - code += line("auto result_data = " - "std::make_shared<ResultList>(std::move(data));"); - code += line("QueryResult::data_t query_data = {{\"" + - ret.return_list->value->name + "\", result_data}};"); - code += line("return std::make_shared<QueryResult>" - "(std::move(query_data));"); + // code += line("auto &properties = vertex_accessor.properties();"); + // code += line("ResultList::data_t data = {&properties};"); + // code += line("auto result_data = " + // "std::make_shared<ResultList>(std::move(data));"); + // code += line("QueryResult::data_t query_data = {{\"" + + // ret.return_list->value->name + "\", result_data}};"); + // code += line("return std::make_shared<QueryResult>" + // "(std::move(query_data));"); } }; diff --git a/src/utils/string/file.hpp b/src/utils/string/file.hpp index 093a74bd8..465d36505 100644 --- a/src/utils/string/file.hpp +++ b/src/utils/string/file.hpp @@ -5,6 +5,9 @@ #include <streambuf> #include <string> #include <cerrno> +#include <stdexcept> + +#include <fmt/format.h> namespace utils { @@ -12,10 +15,13 @@ namespace utils std::string read_file(const char *filename) { std::ifstream in(filename, std::ios::in | std::ios::binary); + if (in) return std::string(std::istreambuf_iterator<char>(in), std::istreambuf_iterator<char>()); - throw(errno); + + auto error_message = fmt::format("{0}{1}", "Fail to read: ", filename); + throw std::runtime_error(error_message); } void write_file(const std::string& content, const std::string& path)