Model execution rows

This commit is contained in:
Josip Mrden 2024-02-29 12:49:59 +01:00
parent d30a7c70de
commit 4d930fb73b
2 changed files with 33 additions and 26 deletions

View File

@ -4025,20 +4025,6 @@ mgp_error mgp_untrack_current_thread_allocations(mgp_graph *graph) {
});
}
std::vector<std::vector<mgp_value>> GetMgpRowsFromTypedValues(
std::vector<std::vector<memgraph::query::TypedValue>> tv_rows, mgp_graph *graph, mgp_memory *memory) {
std::vector<std::vector<mgp_value>> mgp_rows;
for (auto &row : tv_rows) {
std::vector<mgp_value> vals;
for (auto &val : row) {
vals.emplace_back(val, graph, memory->impl);
}
mgp_rows.emplace_back(std::move(vals));
}
return mgp_rows;
}
mgp_execution_headers::mgp_execution_headers(memgraph::utils::pmr::vector<memgraph::utils::pmr::string> &&storage)
: headers(std::move(storage)){};
@ -4059,16 +4045,31 @@ mgp_error mgp_execution_headers_at(mgp_execution_headers *headers, size_t index,
result);
}
mgp_execution_result::mgp_execution_result(mgp_execution_headers &&headers,
std::vector<std::vector<memgraph::query::TypedValue>> tv_rows,
mgp_graph *graph, mgp_memory *memory)
: headers(std::move(headers)), rows(GetMgpRowsFromTypedValues(std::move(tv_rows), graph, memory)) {}
mgp_execution_rows::mgp_execution_rows(
memgraph::utils::pmr::vector<memgraph::utils::pmr::vector<memgraph::query::TypedValue>> &&tv_rows)
: rows(std::move(tv_rows)) {}
mgp_execution_result::mgp_execution_result(mgp_execution_headers &&headers, mgp_execution_rows &&rows)
: headers(std::move(headers)), rows(std::move(rows)) {}
struct MgProcedureResultStream final {
explicit MgProcedureResultStream(mgp_memory *memory) : rows(memory->impl), memory(memory) {}
using Row = std::vector<memgraph::query::TypedValue>;
using Rows = std::vector<Row>;
Rows rows;
void Result(const Row &row) { rows.push_back(row); }
using PmrRow = memgraph::utils::pmr::vector<memgraph::query::TypedValue>;
using PmrRows = memgraph::utils::pmr::vector<PmrRow>;
PmrRows rows;
mgp_memory *memory;
void Result(const Row &row) {
PmrRow pmr_row(memory->impl);
for (auto &val : row) {
pmr_row.emplace_back(std::move(val));
}
rows.emplace_back(std::move(pmr_row));
}
};
mgp_error mgp_execute_query(mgp_graph *graph, mgp_memory *memory, const char *query, mgp_execution_result **result) {
@ -4087,7 +4088,7 @@ mgp_error mgp_execute_query(mgp_graph *graph, mgp_memory *memory, const char *qu
});
auto prepare_query_result = interpreter.Prepare(query_string, {}, {});
MgProcedureResultStream stream;
MgProcedureResultStream stream(memory);
interpreter.Pull(&stream, {}, prepare_query_result.qid);
memgraph::utils::pmr::vector<memgraph::utils::pmr::string> headers(memory->impl);
@ -4096,7 +4097,7 @@ mgp_error mgp_execute_query(mgp_graph *graph, mgp_memory *memory, const char *qu
}
return NewRawMgpObject<mgp_execution_result>(memory, mgp_execution_headers{std::move(headers)},
std::move(stream.rows), graph, memory);
mgp_execution_rows{std::move(stream.rows)});
},
result);
}

View File

@ -1005,13 +1005,19 @@ struct mgp_execution_headers {
storage_type headers;
};
struct mgp_execution_rows {
explicit mgp_execution_rows(
memgraph::utils::pmr::vector<memgraph::utils::pmr::vector<memgraph::query::TypedValue>> &&tv_rows);
~mgp_execution_rows() = default;
memgraph::utils::pmr::vector<memgraph::utils::pmr::vector<memgraph::query::TypedValue>> rows;
};
struct mgp_execution_result {
explicit mgp_execution_result(mgp_execution_headers &&headers,
std::vector<std::vector<memgraph::query::TypedValue>> tv_rows, mgp_graph *graph,
mgp_memory *memory);
explicit mgp_execution_result(mgp_execution_headers &&headers, mgp_execution_rows &&rows);
~mgp_execution_result() = default;
mgp_execution_headers headers;
std::vector<std::vector<mgp_value>> rows;
mgp_execution_rows rows;
};