From 39323763015e7cdf685ff8fed69b6cbc6fac691d Mon Sep 17 00:00:00 2001 From: Tonko Sabolcec <tonko.sabolcec@memgraph.io> Date: Fri, 29 May 2020 12:01:49 +0200 Subject: [PATCH] Return properties as a list in `SHOW CONSTRAINT INFO` for unique constraints Summary: Before this change properties were joined by ", " and returned as a single string, which was ambiguous for properties that contain ", ". This diff solves this problem by returning properties as a list type. Reviewers: mferencevic Reviewed By: mferencevic Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D2778 --- src/query/interpreter.cpp | 12 ++++++------ tests/unit/interpreter.cpp | 5 ++++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/query/interpreter.cpp b/src/query/interpreter.cpp index 11e480ade..d1095dd8a 100644 --- a/src/query/interpreter.cpp +++ b/src/query/interpreter.cpp @@ -833,14 +833,14 @@ PreparedQuery PrepareInfoQuery( TypedValue(db->PropertyToName(item.second))}); } for (const auto &item : info.unique) { - std::stringstream properties; - utils::PrintIterable(properties, item.second, ", ", - [&db](auto &stream, const auto &entry) { - stream << db->PropertyToName(entry); - }); + std::vector<TypedValue> properties; + properties.reserve(item.second.size()); + for (const auto &property : item.second) { + properties.emplace_back(db->PropertyToName(property)); + } results.push_back({TypedValue("unique"), TypedValue(db->LabelToName(item.first)), - TypedValue(properties.str())}); + TypedValue(std::move(properties))}); } return std::pair{results, QueryHandlerResult::NOTHING}; }; diff --git a/tests/unit/interpreter.cpp b/tests/unit/interpreter.cpp index c7e87b96b..954de10c7 100644 --- a/tests/unit/interpreter.cpp +++ b/tests/unit/interpreter.cpp @@ -402,7 +402,10 @@ TEST_F(InterpreterTest, UniqueConstraintTest) { ASSERT_EQ(result.size(), 3U); ASSERT_EQ(result[0].ValueString(), "unique"); ASSERT_EQ(result[1].ValueString(), "A"); - ASSERT_EQ(result[2].ValueString(), "a, b"); + const auto &properties = result[2].ValueList(); + ASSERT_EQ(properties.size(), 2U); + ASSERT_EQ(properties[0].ValueString(), "a"); + ASSERT_EQ(properties[1].ValueString(), "b"); } // Drop constraint.