Introduce BoltResult

This commit is contained in:
jbajic 2022-11-22 13:15:32 +01:00
parent bffef1a653
commit 37f5fb29ea
3 changed files with 27 additions and 52 deletions

View File

@ -71,9 +71,9 @@ query::v2::TypedValue ToTypedValue(const Value &value) {
}
}
storage::v3::ShardResult<communication::bolt::Vertex> ToBoltVertex(
const query::v2::accessors::VertexAccessor &vertex, const msgs::ShardRequestManagerInterface *shard_request_manager,
storage::v3::View /*view*/) {
BoltResult<communication::bolt::Vertex> ToBoltVertex(const query::v2::accessors::VertexAccessor &vertex,
const msgs::ShardRequestManagerInterface *shard_request_manager,
storage::v3::View /*view*/) {
auto id = communication::bolt::Id::FromUint(0);
auto labels = vertex.Labels();
@ -91,9 +91,9 @@ storage::v3::ShardResult<communication::bolt::Vertex> ToBoltVertex(
return communication::bolt::Vertex{id, new_labels, new_properties};
}
storage::v3::ShardResult<communication::bolt::Edge> ToBoltEdge(
const query::v2::accessors::EdgeAccessor &edge, const msgs::ShardRequestManagerInterface *shard_request_manager,
storage::v3::View /*view*/) {
BoltResult<communication::bolt::Edge> ToBoltEdge(const query::v2::accessors::EdgeAccessor &edge,
const msgs::ShardRequestManagerInterface *shard_request_manager,
storage::v3::View /*view*/) {
// TODO(jbajic) Fix bolt communication
auto id = communication::bolt::Id::FromUint(0);
auto from = communication::bolt::Id::FromUint(0);
@ -108,16 +108,15 @@ storage::v3::ShardResult<communication::bolt::Edge> ToBoltEdge(
return communication::bolt::Edge{id, from, to, type, new_properties};
}
storage::v3::ShardResult<communication::bolt::Path> ToBoltPath(
const query::v2::accessors::Path & /*edge*/, const msgs::ShardRequestManagerInterface * /*shard_request_manager*/,
storage::v3::View /*view*/) {
BoltResult<communication::bolt::Path> ToBoltPath(const query::v2::accessors::Path & /*edge*/,
const msgs::ShardRequestManagerInterface * /*shard_request_manager*/,
storage::v3::View /*view*/) {
// TODO(jbajic) Fix bolt communication
return {SHARD_ERROR(common::ErrorCode::DELETED_OBJECT)};
}
storage::v3::ShardResult<Value> ToBoltValue(const query::v2::TypedValue &value,
const msgs::ShardRequestManagerInterface *shard_request_manager,
storage::v3::View view) {
BoltResult<Value> ToBoltValue(const query::v2::TypedValue &value,
const msgs::ShardRequestManagerInterface *shard_request_manager, storage::v3::View view) {
switch (value.type()) {
case query::v2::TypedValue::Type::Null:
return Value();

View File

@ -20,6 +20,7 @@
#include "storage/v3/result.hpp"
#include "storage/v3/shard.hpp"
#include "storage/v3/view.hpp"
#include "utils/result.hpp"
namespace memgraph::storage::v3 {
class EdgeAccessor;
@ -29,42 +30,45 @@ class VertexAccessor;
namespace memgraph::glue::v2 {
template <class TValue>
using BoltResult = utils::BasicResult<storage::v3::ShardError, TValue>;
/// @param storage::v3::VertexAccessor for converting to
/// communication::bolt::Vertex.
/// @param msgs::ShardRequestManagerInterface *shard_request_manager getting label and property names.
/// @param storage::v3::View for deciding which vertex attributes are visible.
///
/// @throw std::bad_alloc
storage::v3::ShardResult<communication::bolt::Vertex> ToBoltVertex(
const storage::v3::VertexAccessor &vertex, const msgs::ShardRequestManagerInterface *shard_request_manager,
storage::v3::View view);
BoltResult<communication::bolt::Vertex> ToBoltVertex(const storage::v3::VertexAccessor &vertex,
const msgs::ShardRequestManagerInterface *shard_request_manager,
storage::v3::View view);
/// @param storage::v3::EdgeAccessor for converting to communication::bolt::Edge.
/// @param msgs::ShardRequestManagerInterface *shard_request_manager getting edge type and property names.
/// @param storage::v3::View for deciding which edge attributes are visible.
///
/// @throw std::bad_alloc
storage::v3::ShardResult<communication::bolt::Edge> ToBoltEdge(
const storage::v3::EdgeAccessor &edge, const msgs::ShardRequestManagerInterface *shard_request_manager,
storage::v3::View view);
BoltResult<communication::bolt::Edge> ToBoltEdge(const storage::v3::EdgeAccessor &edge,
const msgs::ShardRequestManagerInterface *shard_request_manager,
storage::v3::View view);
/// @param query::v2::Path for converting to communication::bolt::Path.
/// @param msgs::ShardRequestManagerInterface *shard_request_manager ToBoltVertex and ToBoltEdge.
/// @param storage::v3::View for ToBoltVertex and ToBoltEdge.
///
/// @throw std::bad_alloc
storage::v3::ShardResult<communication::bolt::Path> ToBoltPath(
const query::v2::accessors::Path &path, const msgs::ShardRequestManagerInterface *shard_request_manager,
storage::v3::View view);
BoltResult<communication::bolt::Path> ToBoltPath(const query::v2::accessors::Path &path,
const msgs::ShardRequestManagerInterface *shard_request_manager,
storage::v3::View view);
/// @param query::v2::TypedValue for converting to communication::bolt::Value.
/// @param msgs::ShardRequestManagerInterface *shard_request_manager ToBoltVertex and ToBoltEdge.
/// @param storage::v3::View for ToBoltVertex and ToBoltEdge.
///
/// @throw std::bad_alloc
storage::v3::ShardResult<communication::bolt::Value> ToBoltValue(
const query::v2::TypedValue &value, const msgs::ShardRequestManagerInterface *shard_request_manager,
storage::v3::View view);
BoltResult<communication::bolt::Value> ToBoltValue(const query::v2::TypedValue &value,
const msgs::ShardRequestManagerInterface *shard_request_manager,
storage::v3::View view);
query::v2::TypedValue ToTypedValue(const communication::bolt::Value &value);

View File

@ -564,34 +564,6 @@ UniqueCursorPtr ScanAllById::MakeCursor(utils::MemoryResource *mem) const {
std::move(vertices), "ScanAllById");
}
namespace {
template <class TEdges>
auto UnwrapEdgesResult(storage::v3::ShardResult<TEdges> &&result) {
if (result.HasError()) {
switch (result.GetError().code) {
case common::ErrorCode::DELETED_OBJECT:
throw QueryRuntimeException("Trying to get relationships of a deleted node.");
case common::ErrorCode::NONEXISTENT_OBJECT:
throw query::v2::QueryRuntimeException("Trying to get relationships from a node that doesn't exist.");
case common::ErrorCode::VERTEX_HAS_EDGES:
case common::ErrorCode::SERIALIZATION_ERROR:
case common::ErrorCode::PROPERTIES_DISABLED:
throw QueryRuntimeException("Unexpected error when accessing relationships.");
case common::ErrorCode::SCHEMA_NO_SCHEMA_DEFINED_FOR_LABEL:
case common::ErrorCode::SCHEMA_VERTEX_PROPERTY_WRONG_TYPE:
case common::ErrorCode::SCHEMA_VERTEX_UPDATE_PRIMARY_KEY:
case common::ErrorCode::SCHEMA_VERTEX_UPDATE_PRIMARY_LABEL:
case common::ErrorCode::SCHEMA_VERTEX_SECONDARY_LABEL_IS_PRIMARY:
case common::ErrorCode::SCHEMA_VERTEX_PRIMARY_PROPERTIES_UNDEFINED:
throw QueryRuntimeException("SchemaViolation occurred when accessing relationships.");
}
}
return std::move(*result);
}
} // namespace
Expand::Expand(const std::shared_ptr<LogicalOperator> &input, Symbol input_symbol, Symbol node_symbol,
Symbol edge_symbol, EdgeAtom::Direction direction,
const std::vector<storage::v3::EdgeTypeId> &edge_types, bool existing_node, storage::v3::View view)