From af373dac0d5a9f51d93d7035de08df982ee17d97 Mon Sep 17 00:00:00 2001 From: tianliplus Date: Wed, 7 Jul 2021 22:29:22 +0800 Subject: [PATCH] fix gremlin-test for mg (#489) * fix gremlin-test for mg --- .../runtime/src/dataflow/manager/range.rs | 2 +- .../src/executor/store/src/db/api/error.rs | 4 ++ .../src/executor/store/src/db/graph/store.rs | 41 +++++++++++++------ 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/interactive_engine/src/executor/runtime/src/dataflow/manager/range.rs b/interactive_engine/src/executor/runtime/src/dataflow/manager/range.rs index fbcf73883fa1..d29fe03ba9e1 100644 --- a/interactive_engine/src/executor/runtime/src/dataflow/manager/range.rs +++ b/interactive_engine/src/executor/runtime/src/dataflow/manager/range.rs @@ -76,7 +76,7 @@ impl RangeManager { if self.end - self.start < bulk { return self.end - self.start; } else if self.curr - self.end < bulk { - return bulk - self.curr + self.end; + return bulk - (self.curr - self.end); } else { return 0; } diff --git a/interactive_engine/src/executor/store/src/db/api/error.rs b/interactive_engine/src/executor/store/src/db/api/error.rs index 71ecb2620bad..2a1f0fa9b4c8 100644 --- a/interactive_engine/src/executor/store/src/db/api/error.rs +++ b/interactive_engine/src/executor/store/src/db/api/error.rs @@ -19,6 +19,10 @@ impl GraphError { pub fn add_backtrace(&mut self, function: String, code_info: String) { self.backtrace.push((function, code_info)); } + + pub fn get_error_code(&self) -> GraphErrorCode { + self.err_code + } } impl Debug for GraphError { diff --git a/interactive_engine/src/executor/store/src/db/graph/store.rs b/interactive_engine/src/executor/store/src/db/graph/store.rs index 1adc66a92aca..6f14f674cdc1 100644 --- a/interactive_engine/src/executor/store/src/db/graph/store.rs +++ b/interactive_engine/src/executor/store/src/db/graph/store.rs @@ -14,7 +14,7 @@ use super::property::*; use super::meta::*; use super::bin::*; use protobuf::Message; -use crate::db::api::GraphErrorCode::InvalidData; +use crate::db::api::GraphErrorCode::{InvalidData, TypeNotFound}; use crate::db::graph::table_manager::Table; pub struct GraphStore { @@ -381,23 +381,40 @@ impl GraphStore { } fn do_query_vertices<'a>(&'a self, si: SnapshotId, label: LabelId, condition: Option>) -> GraphResult + 'a>> { - let res = self.vertex_manager.get_type(si, label).and_then(|type_info| { - SingleLabelVertexIter::create(si, type_info, self.storage.as_ref(), condition) - }); - match res_unwrap!(res, do_query_vertices, si, label)? { - Some(iter) => Ok(Box::new(iter)), - None => Ok(Box::new(EmptyResultIter)), + let res = self.vertex_manager.get_type(si, label) + .and_then(|type_info| SingleLabelVertexIter::create(si, type_info, self.storage.as_ref(), condition)); + match res_unwrap!(res, do_query_vertices, si, label) { + Ok(iter_option) => { + match iter_option { + Some(iter) => Ok(Box::new(iter)), + None => Ok(Box::new(EmptyResultIter)), + } + }, + Err(e) => { + if let TypeNotFound = e.get_error_code() { + Ok(Box::new(EmptyResultIter)) + } else { + Err(e) + } + }, } } fn do_query_edges<'a>(&'a self, si: SnapshotId, id: VertexId, label: Option, direction: EdgeDirection, condition: Option>) -> GraphResult + 'a>> { let storage = self.storage.as_ref(); if let Some(label) = label { - let res = self.edge_manager.get_edge(si, label).and_then(|info| { - SingleLabelEdgeIter::create(si, id, direction, info, storage, condition) - }); - let iter = res_unwrap!(res, do_query_edges, si, id, label, direction)?; - Ok(Box::new(iter)) + let res = self.edge_manager.get_edge(si, label) + .and_then(|info| SingleLabelEdgeIter::create(si, id, direction, info, storage, condition)); + match res_unwrap!(res, do_query_edges, si, id, label, direction) { + Ok(iter) => Ok(Box::new(iter)), + Err(e) => { + if let TypeNotFound = e.get_error_code() { + Ok(Box::new(EmptyResultIter)) + } else { + Err(e) + } + }, + } } else { let info_iter = self.edge_manager.get_all_edges(si); let res = MultiLabelsEdgeIter::create(si, id, direction, info_iter, storage, condition);