Add query params execution
This commit is contained in:
parent
34f2a1e10b
commit
ed3a8a9328
@ -851,8 +851,8 @@ inline void func_result_set_value(mgp_func_result *res, mgp_value *value, mgp_me
|
|||||||
MgInvokeVoid(mgp_func_result_set_value, res, value, memory);
|
MgInvokeVoid(mgp_func_result_set_value, res, value, memory);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline mgp_execution_result *execute_query(mgp_graph *graph, const char *query, mgp_memory *memory) {
|
inline mgp_execution_result *execute_query(mgp_graph *graph, const char *query, mgp_map *params, mgp_memory *memory) {
|
||||||
return MgInvoke<mgp_execution_result *>(mgp_execute_query, graph, memory, query);
|
return MgInvoke<mgp_execution_result *>(mgp_execute_query, graph, memory, query, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline mgp_execution_headers *fetch_execution_headers(mgp_execution_result *exec_result) {
|
inline mgp_execution_headers *fetch_execution_headers(mgp_execution_result *exec_result) {
|
||||||
|
@ -1810,7 +1810,7 @@ enum mgp_error mgp_execution_headers_size(struct mgp_execution_headers *headers,
|
|||||||
struct mgp_execution_result;
|
struct mgp_execution_result;
|
||||||
|
|
||||||
enum mgp_error mgp_execute_query(struct mgp_graph *graph, struct mgp_memory *memory, const char *query,
|
enum mgp_error mgp_execute_query(struct mgp_graph *graph, struct mgp_memory *memory, const char *query,
|
||||||
struct mgp_execution_result **result);
|
struct mgp_map *params, struct mgp_execution_result **result);
|
||||||
|
|
||||||
enum mgp_error mgp_fetch_execution_headers(struct mgp_execution_result *exec_result,
|
enum mgp_error mgp_fetch_execution_headers(struct mgp_execution_result *exec_result,
|
||||||
struct mgp_execution_headers **headers);
|
struct mgp_execution_headers **headers);
|
||||||
|
@ -1600,12 +1600,13 @@ class ExecutionHeaders {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class QueryExecution {
|
class QueryExecution {
|
||||||
|
private:
|
||||||
|
friend class Map;
|
||||||
|
mgp_graph *graph_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QueryExecution(mgp_graph *graph);
|
QueryExecution(mgp_graph *graph);
|
||||||
ExecutionResult ExecuteQuery(std::string_view query) const;
|
ExecutionResult ExecuteQuery(std::string_view query, Map params = Map()) const;
|
||||||
|
|
||||||
private:
|
|
||||||
mgp_graph *graph_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class ExecutionRow {
|
class ExecutionRow {
|
||||||
@ -4389,8 +4390,8 @@ inline std::string ExecutionHeaders::At(size_t index) const {
|
|||||||
|
|
||||||
inline QueryExecution::QueryExecution(mgp_graph *graph) : graph_(graph) {}
|
inline QueryExecution::QueryExecution(mgp_graph *graph) : graph_(graph) {}
|
||||||
|
|
||||||
inline ExecutionResult QueryExecution::ExecuteQuery(std::string_view query) const {
|
inline ExecutionResult QueryExecution::ExecuteQuery(std::string_view query, mgp::Map params) const {
|
||||||
return ExecutionResult(mgp::MemHandlerCallback(execute_query, graph_, query.data()), graph_);
|
return ExecutionResult(mgp::MemHandlerCallback(execute_query, graph_, query.data(), params.ptr_), graph_);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline ExecutionResult::ExecutionResult(mgp_execution_result *result, mgp_graph *graph)
|
inline ExecutionResult::ExecutionResult(mgp_execution_result *result, mgp_graph *graph)
|
||||||
|
@ -4072,9 +4072,19 @@ struct MgProcedureResultStream final {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
mgp_error mgp_execute_query(mgp_graph *graph, mgp_memory *memory, const char *query, mgp_execution_result **result) {
|
std::map<std::string, memgraph::storage::PropertyValue> CreateQueryParams(mgp_map *params) {
|
||||||
|
std::map<std::string, memgraph::storage::PropertyValue> query_params;
|
||||||
|
for (auto &[k, v] : params->items) {
|
||||||
|
query_params.emplace(k, ToPropertyValue(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
return query_params;
|
||||||
|
}
|
||||||
|
|
||||||
|
mgp_error mgp_execute_query(mgp_graph *graph, mgp_memory *memory, const char *query, mgp_map *params,
|
||||||
|
mgp_execution_result **result) {
|
||||||
return WrapExceptions(
|
return WrapExceptions(
|
||||||
[query, graph, memory]() {
|
[query, params, graph, memory]() {
|
||||||
auto query_string = std::string(query);
|
auto query_string = std::string(query);
|
||||||
auto *instance = memgraph::query::InterpreterContext::getInstance();
|
auto *instance = memgraph::query::InterpreterContext::getInstance();
|
||||||
|
|
||||||
@ -4087,7 +4097,9 @@ mgp_error mgp_execute_query(mgp_graph *graph, mgp_memory *memory, const char *qu
|
|||||||
instance->interpreters.WithLock([&interpreter](auto &interpreters) { interpreters.erase(&interpreter); });
|
instance->interpreters.WithLock([&interpreter](auto &interpreters) { interpreters.erase(&interpreter); });
|
||||||
});
|
});
|
||||||
|
|
||||||
auto prepare_query_result = interpreter.Prepare(query_string, {}, {});
|
const auto query_params = CreateQueryParams(params);
|
||||||
|
|
||||||
|
auto prepare_query_result = interpreter.Prepare(query_string, query_params, {});
|
||||||
MgProcedureResultStream stream(memory);
|
MgProcedureResultStream stream(memory);
|
||||||
interpreter.Pull(&stream, {}, prepare_query_result.qid);
|
interpreter.Pull(&stream, {}, prepare_query_result.qid);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user