From a3ecc524290f13581f0f65d311df9bb24cf0c620 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1nos=20Benjamin=20Antal?= <antaljanosbenjamin@users.noreply.github.com> Date: Wed, 26 May 2021 13:35:12 +0200 Subject: [PATCH] Use all available predefined variables (#157) --- src/query/trigger.cpp | 18 ++++--- tests/unit/query_trigger.cpp | 98 ++++++++++++++++++++++++++++++++---- 2 files changed, 99 insertions(+), 17 deletions(-) diff --git a/src/query/trigger.cpp b/src/query/trigger.cpp index 3f4b0ccb4..401161c98 100644 --- a/src/query/trigger.cpp +++ b/src/query/trigger.cpp @@ -89,13 +89,14 @@ std::vector<std::pair<Identifier, TriggerIdentifierTag>> GetPredefinedIdentifier return TagsToIdentifiers( IdentifierTag::CREATED_VERTICES, IdentifierTag::CREATED_EDGES, IdentifierTag::CREATED_OBJECTS, IdentifierTag::DELETED_VERTICES, IdentifierTag::DELETED_EDGES, IdentifierTag::DELETED_OBJECTS, - IdentifierTag::SET_VERTEX_PROPERTIES, IdentifierTag::SET_EDGE_PROPERTIES, - IdentifierTag::REMOVED_VERTEX_PROPERTIES, IdentifierTag::REMOVED_EDGE_PROPERTIES, + IdentifierTag::SET_VERTEX_PROPERTIES, IdentifierTag::REMOVED_VERTEX_PROPERTIES, IdentifierTag::SET_VERTEX_LABELS, IdentifierTag::REMOVED_VERTEX_LABELS, IdentifierTag::UPDATED_VERTICES, - IdentifierTag::UPDATED_EDGES, IdentifierTag::UPDATED_OBJECTS); + IdentifierTag::SET_EDGE_PROPERTIES, IdentifierTag::REMOVED_EDGE_PROPERTIES, IdentifierTag::UPDATED_EDGES, + IdentifierTag::UPDATED_OBJECTS); case EventType::CREATE: - return TagsToIdentifiers(IdentifierTag::CREATED_OBJECTS); + return TagsToIdentifiers(IdentifierTag::CREATED_VERTICES, IdentifierTag::CREATED_EDGES, + IdentifierTag::CREATED_OBJECTS); case EventType::VERTEX_CREATE: return TagsToIdentifiers(IdentifierTag::CREATED_VERTICES); @@ -104,7 +105,8 @@ std::vector<std::pair<Identifier, TriggerIdentifierTag>> GetPredefinedIdentifier return TagsToIdentifiers(IdentifierTag::CREATED_EDGES); case EventType::DELETE: - return TagsToIdentifiers(IdentifierTag::DELETED_OBJECTS); + return TagsToIdentifiers(IdentifierTag::DELETED_VERTICES, IdentifierTag::DELETED_EDGES, + IdentifierTag::DELETED_OBJECTS); case EventType::VERTEX_DELETE: return TagsToIdentifiers(IdentifierTag::DELETED_VERTICES); @@ -113,7 +115,11 @@ std::vector<std::pair<Identifier, TriggerIdentifierTag>> GetPredefinedIdentifier return TagsToIdentifiers(IdentifierTag::DELETED_EDGES); case EventType::UPDATE: - return TagsToIdentifiers(IdentifierTag::UPDATED_OBJECTS); + return TagsToIdentifiers(IdentifierTag::SET_VERTEX_PROPERTIES, IdentifierTag::REMOVED_VERTEX_PROPERTIES, + IdentifierTag::SET_VERTEX_LABELS, IdentifierTag::REMOVED_VERTEX_LABELS, + IdentifierTag::UPDATED_VERTICES, IdentifierTag::SET_EDGE_PROPERTIES, + IdentifierTag::REMOVED_EDGE_PROPERTIES, IdentifierTag::UPDATED_EDGES, + IdentifierTag::UPDATED_OBJECTS); case EventType::VERTEX_UPDATE: return TagsToIdentifiers(IdentifierTag::SET_VERTEX_PROPERTIES, IdentifierTag::REMOVED_VERTEX_PROPERTIES, diff --git a/tests/unit/query_trigger.cpp b/tests/unit/query_trigger.cpp index 3a6ca4207..27eac69f6 100644 --- a/tests/unit/query_trigger.cpp +++ b/tests/unit/query_trigger.cpp @@ -988,19 +988,95 @@ TEST_F(TriggerStoreTest, AnyTriggerAllKeywords) { query::TriggerStore store{testing_directory, &ast_cache, &*dba, &antlr_lock}; using namespace std::literals; - const std::array keywords = { - "createdVertices"sv, "createdEdges"sv, "createdObjects"sv, - "deletedVertices"sv, "deletedEdges"sv, "deletedObjects"sv, - "setVertexProperties"sv, "setEdgeProperties"sv, "removedVertexProperties"sv, - "removedEdgeProperties"sv, "setVertexLabels"sv, "removedVertexLabels"sv, - "updatedVertices"sv, "updatedEdges"sv, "updatedObjects"sv, + + const auto created_vertices = "createdVertices"sv; + const auto created_edges = "createdEdges"sv; + const auto created_objects = "createdObjects"sv; + const auto deleted_vertices = "deletedVertices"sv; + const auto deleted_edges = "deletedEdges"sv; + const auto deleted_objects = "deletedObjects"sv; + const auto set_vertex_properties = "setVertexProperties"sv; + const auto set_edge_properties = "setEdgeProperties"sv; + const auto removed_vertex_properties = "removedVertexProperties"sv; + const auto removed_edge_properties = "removedEdgeProperties"sv; + const auto set_vertex_labels = "setVertexLabels"sv; + const auto removed_vertex_labels = "removedVertexLabels"sv; + const auto updated_vertices = "updatedVertices"sv; + const auto updated_edges = "updatedEdges"sv; + const auto updates_objects = "updatedObjects"sv; + + std::array event_types_to_test = { + std::make_pair(query::TriggerEventType::CREATE, std::vector{created_vertices, created_edges, created_objects}), + std::make_pair(query::TriggerEventType::VERTEX_CREATE, std::vector{created_vertices}), + std::make_pair(query::TriggerEventType::EDGE_CREATE, std::vector{created_edges}), + std::make_pair(query::TriggerEventType::UPDATE, + std::vector{ + set_vertex_properties, + set_edge_properties, + removed_vertex_properties, + removed_edge_properties, + set_vertex_labels, + removed_vertex_labels, + updated_vertices, + updated_edges, + updates_objects, + }), + std::make_pair(query::TriggerEventType::VERTEX_UPDATE, + std::vector{ + set_vertex_properties, + removed_vertex_properties, + set_vertex_labels, + removed_vertex_labels, + updated_vertices, + }), + std::make_pair(query::TriggerEventType::EDGE_UPDATE, + std::vector{ + set_edge_properties, + removed_edge_properties, + updated_edges, + }), + std::make_pair(query::TriggerEventType::DELETE, + std::vector{ + deleted_vertices, + deleted_edges, + deleted_objects, + }), + std::make_pair(query::TriggerEventType::VERTEX_DELETE, + std::vector{ + deleted_vertices, + }), + std::make_pair(query::TriggerEventType::EDGE_DELETE, + std::vector{ + deleted_edges, + }), + std::make_pair(query::TriggerEventType::ANY, + std::vector{ + created_vertices, + created_edges, + created_objects, + deleted_vertices, + deleted_edges, + deleted_objects, + set_vertex_properties, + set_edge_properties, + removed_vertex_properties, + removed_edge_properties, + set_vertex_labels, + removed_vertex_labels, + updated_vertices, + updated_edges, + updates_objects, + }), }; const auto trigger_name = "trigger"s; - - for (const auto keyword : keywords) { - ASSERT_NO_THROW(store.AddTrigger(trigger_name, fmt::format("RETURN {}", keyword), {}, query::TriggerEventType::ANY, - query::TriggerPhase::BEFORE_COMMIT, &ast_cache, &*dba, &antlr_lock)); - store.DropTrigger(trigger_name); + for (const auto &[event_type, keywords] : event_types_to_test) { + SCOPED_TRACE(query::TriggerEventTypeToString(event_type)); + for (const auto keyword : keywords) { + SCOPED_TRACE(keyword); + EXPECT_NO_THROW(store.AddTrigger(trigger_name, fmt::format("RETURN {}", keyword), {}, event_type, + query::TriggerPhase::BEFORE_COMMIT, &ast_cache, &*dba, &antlr_lock)); + store.DropTrigger(trigger_name); + } } }