From 14ddd7254d5be185fae59038eb8c0466a69b93f4 Mon Sep 17 00:00:00 2001
From: jbajic <jure.bajic@memgraph.com>
Date: Tue, 15 Nov 2022 19:37:24 +0100
Subject: [PATCH] Fix communication and memgraph

---
 src/glue/v2/communication.cpp | 14 ++++++------
 src/glue/v2/communication.hpp |  8 +++----
 src/memgraph.cpp              | 40 +++++++++++++++++++++++------------
 3 files changed, 37 insertions(+), 25 deletions(-)

diff --git a/src/glue/v2/communication.cpp b/src/glue/v2/communication.cpp
index ebca8c23f..495ce1698 100644
--- a/src/glue/v2/communication.cpp
+++ b/src/glue/v2/communication.cpp
@@ -71,7 +71,7 @@ query::v2::TypedValue ToTypedValue(const Value &value) {
   }
 }
 
-storage::v3::Result<communication::bolt::Vertex> ToBoltVertex(
+storage::v3::ShardResult<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);
@@ -91,7 +91,7 @@ storage::v3::Result<communication::bolt::Vertex> ToBoltVertex(
   return communication::bolt::Vertex{id, new_labels, new_properties};
 }
 
-storage::v3::Result<communication::bolt::Edge> ToBoltEdge(
+storage::v3::ShardResult<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
@@ -108,16 +108,16 @@ storage::v3::Result<communication::bolt::Edge> ToBoltEdge(
   return communication::bolt::Edge{id, from, to, type, new_properties};
 }
 
-storage::v3::Result<communication::bolt::Path> ToBoltPath(
+storage::v3::ShardResult<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 {storage::v3::Error::DELETED_OBJECT};
+  return {SHARD_ERROR(storage::v3::ErrorCode::DELETED_OBJECT)};
 }
 
-storage::v3::Result<Value> ToBoltValue(const query::v2::TypedValue &value,
-                                       const msgs::ShardRequestManagerInterface *shard_request_manager,
-                                       storage::v3::View view) {
+storage::v3::ShardResult<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();
diff --git a/src/glue/v2/communication.hpp b/src/glue/v2/communication.hpp
index ea9c6b4c9..debc26adf 100644
--- a/src/glue/v2/communication.hpp
+++ b/src/glue/v2/communication.hpp
@@ -35,7 +35,7 @@ namespace memgraph::glue::v2 {
 /// @param storage::v3::View for deciding which vertex attributes are visible.
 ///
 /// @throw std::bad_alloc
-storage::v3::Result<communication::bolt::Vertex> ToBoltVertex(
+storage::v3::ShardResult<communication::bolt::Vertex> ToBoltVertex(
     const storage::v3::VertexAccessor &vertex, const msgs::ShardRequestManagerInterface *shard_request_manager,
     storage::v3::View view);
 
@@ -44,7 +44,7 @@ storage::v3::Result<communication::bolt::Vertex> ToBoltVertex(
 /// @param storage::v3::View for deciding which edge attributes are visible.
 ///
 /// @throw std::bad_alloc
-storage::v3::Result<communication::bolt::Edge> ToBoltEdge(
+storage::v3::ShardResult<communication::bolt::Edge> ToBoltEdge(
     const storage::v3::EdgeAccessor &edge, const msgs::ShardRequestManagerInterface *shard_request_manager,
     storage::v3::View view);
 
@@ -53,7 +53,7 @@ storage::v3::Result<communication::bolt::Edge> ToBoltEdge(
 /// @param storage::v3::View for ToBoltVertex and ToBoltEdge.
 ///
 /// @throw std::bad_alloc
-storage::v3::Result<communication::bolt::Path> ToBoltPath(
+storage::v3::ShardResult<communication::bolt::Path> ToBoltPath(
     const query::v2::accessors::Path &path, const msgs::ShardRequestManagerInterface *shard_request_manager,
     storage::v3::View view);
 
@@ -62,7 +62,7 @@ storage::v3::Result<communication::bolt::Path> ToBoltPath(
 /// @param storage::v3::View for ToBoltVertex and ToBoltEdge.
 ///
 /// @throw std::bad_alloc
-storage::v3::Result<communication::bolt::Value> ToBoltValue(
+storage::v3::ShardResult<communication::bolt::Value> ToBoltValue(
     const query::v2::TypedValue &value, const msgs::ShardRequestManagerInterface *shard_request_manager,
     storage::v3::View view);
 
diff --git a/src/memgraph.cpp b/src/memgraph.cpp
index deaf9e568..f553d1821 100644
--- a/src/memgraph.cpp
+++ b/src/memgraph.cpp
@@ -483,13 +483,19 @@ class BoltSession final : public memgraph::communication::bolt::Session<memgraph
         auto maybe_value = memgraph::glue::v2::ToBoltValue(kv.second, interpreter_.GetShardRequestManager(),
                                                            memgraph::storage::v3::View::NEW);
         if (maybe_value.HasError()) {
-          switch (maybe_value.GetError()) {
-            case memgraph::storage::v3::Error::DELETED_OBJECT:
-            case memgraph::storage::v3::Error::SERIALIZATION_ERROR:
-            case memgraph::storage::v3::Error::VERTEX_HAS_EDGES:
-            case memgraph::storage::v3::Error::PROPERTIES_DISABLED:
-            case memgraph::storage::v3::Error::NONEXISTENT_OBJECT:
-            case memgraph::storage::v3::Error::VERTEX_ALREADY_INSERTED:
+          switch (maybe_value.GetError().code) {
+            case memgraph::storage::v3::ErrorCode::DELETED_OBJECT:
+            case memgraph::storage::v3::ErrorCode::SERIALIZATION_ERROR:
+            case memgraph::storage::v3::ErrorCode::VERTEX_HAS_EDGES:
+            case memgraph::storage::v3::ErrorCode::PROPERTIES_DISABLED:
+            case memgraph::storage::v3::ErrorCode::NONEXISTENT_OBJECT:
+            case memgraph::storage::v3::ErrorCode::VERTEX_ALREADY_INSERTED:
+            case memgraph::storage::v3::ErrorCode::SCHEMA_NO_SCHEMA_DEFINED_FOR_LABEL:
+            case memgraph::storage::v3::ErrorCode::SCHEMA_VERTEX_PROPERTY_WRONG_TYPE:
+            case memgraph::storage::v3::ErrorCode::SCHEMA_VERTEX_UPDATE_PRIMARY_KEY:
+            case memgraph::storage::v3::ErrorCode::SCHEMA_VERTEX_UPDATE_PRIMARY_LABEL:
+            case memgraph::storage::v3::ErrorCode::SCHEMA_VERTEX_SECONDARY_LABEL_IS_PRIMARY:
+            case memgraph::storage::v3::ErrorCode::SCHEMA_VERTEX_PRIMARY_PROPERTIES_UNDEFINED:
               throw memgraph::communication::bolt::ClientError("Unexpected storage error when streaming summary.");
           }
         }
@@ -516,15 +522,21 @@ class BoltSession final : public memgraph::communication::bolt::Session<memgraph
       for (const auto &v : values) {
         auto maybe_value = memgraph::glue::v2::ToBoltValue(v, shard_request_manager_, memgraph::storage::v3::View::NEW);
         if (maybe_value.HasError()) {
-          switch (maybe_value.GetError()) {
-            case memgraph::storage::v3::Error::DELETED_OBJECT:
+          switch (maybe_value.GetError().code) {
+            case memgraph::storage::v3::ErrorCode::DELETED_OBJECT:
               throw memgraph::communication::bolt::ClientError("Returning a deleted object as a result.");
-            case memgraph::storage::v3::Error::NONEXISTENT_OBJECT:
+            case memgraph::storage::v3::ErrorCode::NONEXISTENT_OBJECT:
               throw memgraph::communication::bolt::ClientError("Returning a nonexistent object as a result.");
-            case memgraph::storage::v3::Error::VERTEX_HAS_EDGES:
-            case memgraph::storage::v3::Error::SERIALIZATION_ERROR:
-            case memgraph::storage::v3::Error::PROPERTIES_DISABLED:
-            case memgraph::storage::v3::Error::VERTEX_ALREADY_INSERTED:
+            case memgraph::storage::v3::ErrorCode::VERTEX_HAS_EDGES:
+            case memgraph::storage::v3::ErrorCode::SERIALIZATION_ERROR:
+            case memgraph::storage::v3::ErrorCode::PROPERTIES_DISABLED:
+            case memgraph::storage::v3::ErrorCode::VERTEX_ALREADY_INSERTED:
+            case memgraph::storage::v3::ErrorCode::SCHEMA_NO_SCHEMA_DEFINED_FOR_LABEL:
+            case memgraph::storage::v3::ErrorCode::SCHEMA_VERTEX_PROPERTY_WRONG_TYPE:
+            case memgraph::storage::v3::ErrorCode::SCHEMA_VERTEX_UPDATE_PRIMARY_KEY:
+            case memgraph::storage::v3::ErrorCode::SCHEMA_VERTEX_UPDATE_PRIMARY_LABEL:
+            case memgraph::storage::v3::ErrorCode::SCHEMA_VERTEX_SECONDARY_LABEL_IS_PRIMARY:
+            case memgraph::storage::v3::ErrorCode::SCHEMA_VERTEX_PRIMARY_PROPERTIES_UNDEFINED:
               throw memgraph::communication::bolt::ClientError("Unexpected storage error when streaming results.");
           }
         }