diff --git a/src/executor/DeleteVertexExecutor.cpp b/src/executor/DeleteVertexExecutor.cpp index b9d21af6388f0beba579bfbc90ca54827e1faea9..c0d9a01dec38f4370ec197b24996790525fa4224 100644 --- a/src/executor/DeleteVertexExecutor.cpp +++ b/src/executor/DeleteVertexExecutor.cpp @@ -33,7 +33,7 @@ Status DeleteVertexExecutor::prepare() { } void DeleteVertexExecutor::execute() { - // TODO(zlcook) Get edgeKes of a vertex by Go + // TODO(zlcook) Get edgeKeys of a vertex by Go auto future = ectx()->getStorageClient()->getEdgeKeys(spaceId_, vid_); auto *runner = ectx()->rctx()->runner(); auto cb = [this] (auto &&resp) { @@ -53,7 +53,11 @@ void DeleteVertexExecutor::execute() { allEdges.emplace_back(std::move(edge)); allEdges.emplace_back(std::move(reverseEdge)); } - deleteEdges(&allEdges); + if (allEdges.size() > 0) { + deleteEdges(&allEdges); + } else { + deleteVertex(); + } return; }; diff --git a/src/executor/test/DeleteVertexTest.cpp b/src/executor/test/DeleteVertexTest.cpp index 9bddff72f059d9ddc3f6a465ec37f7787c8da71a..2fd691d2883041239ae3f3ecc96549ff8e6b6d91 100644 --- a/src/executor/test/DeleteVertexTest.cpp +++ b/src/executor/test/DeleteVertexTest.cpp @@ -163,6 +163,40 @@ TEST_F(DeleteVertexTest, base) { }; ASSERT_TRUE(verifyResult(resp, expected)); } + + // Delete non-existing vertex + { + cpp2::ExecutionResponse resp; + auto query = "DELETE VERTEX uuid(\"Non-existing Vertex\")"; + auto code = client_->execute(query, resp); + ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code); + } + + // Delete a vertex without edges + { + // Insert a vertex without edges + cpp2::ExecutionResponse resp; + auto query = "INSERT VERTEX player(name, age) " + "VALUES uuid(\"A Loner\"): (\"A Loner\", 0)"; + auto code = client_->execute(query, resp); + ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code); + } + { + cpp2::ExecutionResponse resp; + auto query = "DELETE VERTEX uuid(\"A Loner\")"; + auto code = client_->execute(query, resp); + ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code); + } + { + cpp2::ExecutionResponse resp; + auto query = "FETCH PROP ON player uuid(\"A Loner\") " + "YIELD player.name, player.age"; + auto code = client_->execute(query, resp); + ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code); + std::vector<std::tuple<std::string, int64_t>> expected = { + }; + ASSERT_TRUE(verifyResult(resp, expected)); + } } } // namespace graph