diff --git a/CHANGELOG.md b/CHANGELOG.md index c8f6eb02f..4d484dde2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ### Bug Fixes and Other Changes +* Keywords appearing in header (named expressions) keep original case. + ## v0.7.0 ### Major Features and Improvements diff --git a/src/query/frontend/stripped.cpp b/src/query/frontend/stripped.cpp index 5158f2a26..154e3a628 100644 --- a/src/query/frontend/stripped.cpp +++ b/src/query/frontend/stripped.cpp @@ -70,6 +70,9 @@ StrippedQuery::StrippedQuery(const std::string &query) : original_(query) { token_strings.push_back(new_value); }; + // Copy original tokens because we need to use original case in named + // expressions and keywords in tokens will be lowercased in the next loop. + auto original_tokens = tokens; // For every token in original query remember token index in stripped query. std::vector<int> position_mapping(tokens.size(), -1); @@ -192,9 +195,13 @@ StrippedQuery::StrippedQuery(const std::string &query) : original_(query) { } if (!has_as) { // Named expression is not aliased. Save string disregarding leading and - // trailing whitespaces. + // trailing whitespaces. Use original_tokens in which case of the keywords + // is not lowercased. std::string s; - for (auto kt = it; kt != last_non_space + 1; ++kt) { + auto begin_token = it - tokens.begin() + original_tokens.begin(); + auto end_token = + last_non_space - tokens.begin() + original_tokens.begin() + 1; + for (auto kt = begin_token; kt != end_token; ++kt) { s += kt->second; } named_exprs_[position_mapping[it - tokens.begin()]] = s; diff --git a/tests/unit/stripped.cpp b/tests/unit/stripped.cpp index 1ce59ae6b..a914bcab0 100644 --- a/tests/unit/stripped.cpp +++ b/tests/unit/stripped.cpp @@ -299,4 +299,12 @@ TEST(QueryStripper, Parameters) { UnorderedElementsAre(Pair(2, "$123"), Pair(7, "$pero"), Pair(12, "$`mirko ``slavko`"))); } + +TEST(QueryStripper, KeywordInNamedExpression) { + StrippedQuery stripped("RETURN CoUnT(n)"); + EXPECT_EQ(stripped.literals().size(), 0); + EXPECT_EQ(stripped.query(), "return count ( n )"); + EXPECT_THAT(stripped.named_expressions(), + UnorderedElementsAre(Pair(2, "CoUnT(n)"))); +} }