diff --git a/src/query/frontend/stripped.cpp b/src/query/frontend/stripped.cpp index 22f9a0783..1720f7850 100644 --- a/src/query/frontend/stripped.cpp +++ b/src/query/frontend/stripped.cpp @@ -176,10 +176,12 @@ StrippedQuery::StrippedQuery(const std::string &query) : original_(query) { // list literal / function call. int num_open_braces = 0; int num_open_parantheses = 0; - for (; jt != tokens.end() && - (jt->second != "," || num_open_braces || num_open_parantheses) && - jt->second != "order" && jt->second != "skip" && - jt->second != "limit" && jt->second != "union"; + int num_open_brackets = 0; + for (; + jt != tokens.end() && (jt->second != "," || num_open_braces || + num_open_parantheses || num_open_brackets) && + jt->second != "order" && jt->second != "skip" && + jt->second != "limit" && jt->second != "union"; ++jt) { if (jt->second == "(") { ++num_open_parantheses; @@ -189,6 +191,10 @@ StrippedQuery::StrippedQuery(const std::string &query) : original_(query) { ++num_open_braces; } else if (jt->second == "]") { --num_open_braces; + } else if (jt->second == "{") { + ++num_open_brackets; + } else if (jt->second == "}") { + --num_open_brackets; } has_as |= jt->second == "as"; if (jt->first != Token::SPACE) { diff --git a/tests/unit/stripped.cpp b/tests/unit/stripped.cpp index 7853e826c..c803d1616 100644 --- a/tests/unit/stripped.cpp +++ b/tests/unit/stripped.cpp @@ -340,4 +340,10 @@ TEST(QueryStripper, UnionAllMultipleReturnStatementsNamedExpressions) { EXPECT_THAT(stripped.named_expressions(), UnorderedElementsAre(Pair(2, "x"), Pair(10, "x"))); } + +TEST(QueryStripper, QueryReturnMap) { + StrippedQuery stripped("RETURN {a: 1, b: 'foo'}"); + EXPECT_THAT(stripped.named_expressions(), + UnorderedElementsAre(Pair(2, "{a: 1, b: 'foo'}"))); +} }