mirror of
https://github.com/dragonflydb/dragonfly.git
synced 2025-05-13 03:15:44 +02:00
fix(search_family): Temporary remove the error when a field name does not have the '@' sign at the beginning in the FT.AGGREGATE command (#3956)
This commit is contained in:
parent
478a5d476d
commit
e96a99a868
2 changed files with 29 additions and 5 deletions
|
@ -238,12 +238,15 @@ std::string_view ParseField(CmdArgParser* parser) {
|
||||||
return field;
|
return field;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<std::string_view> ParseFieldWithAtSign(CmdArgParser* parser) {
|
std::string_view ParseFieldWithAtSign(CmdArgParser* parser) {
|
||||||
std::string_view field = parser->Next();
|
std::string_view field = parser->Next();
|
||||||
if (field.front() != '@') {
|
if (field.front() != '@') {
|
||||||
return std::nullopt; // if we expect @, but it's not there, return nullopt
|
// Temporary warning until we can throw an error
|
||||||
|
LOG(WARNING) << "bad arguments: Field name '" << field << "' should start with '@'. '@" << field
|
||||||
|
<< "' is expected";
|
||||||
|
} else {
|
||||||
|
field.remove_prefix(1); // remove leading @
|
||||||
}
|
}
|
||||||
field.remove_prefix(1); // remove leading @
|
|
||||||
return field;
|
return field;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -273,12 +276,17 @@ optional<AggregateParams> ParseAggregatorParamsOrReply(CmdArgParser parser,
|
||||||
vector<string_view> fields(parser.Next<size_t>());
|
vector<string_view> fields(parser.Next<size_t>());
|
||||||
for (string_view& field : fields) {
|
for (string_view& field : fields) {
|
||||||
auto parsed_field = ParseFieldWithAtSign(&parser);
|
auto parsed_field = ParseFieldWithAtSign(&parser);
|
||||||
|
|
||||||
|
/*
|
||||||
|
TODO: Throw an error if the field has no '@' sign at the beginning
|
||||||
|
|
||||||
if (!parsed_field) {
|
if (!parsed_field) {
|
||||||
cntx->SendError(absl::StrCat("bad arguments for GROUPBY: Unknown property '", field,
|
cntx->SendError(absl::StrCat("bad arguments for GROUPBY: Unknown property '", field,
|
||||||
"'. Did you mean '@", field, "`?"));
|
"'. Did you mean '@", field, "`?"));
|
||||||
return nullopt;
|
return nullopt;
|
||||||
}
|
} */
|
||||||
field = parsed_field.value();
|
|
||||||
|
field = parsed_field;
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<aggregate::Reducer> reducers;
|
vector<aggregate::Reducer> reducers;
|
||||||
|
|
|
@ -894,6 +894,22 @@ TEST_F(SearchFamilyTest, JsonAggregateGroupBy) {
|
||||||
EXPECT_THAT(resp, IsUnordArrayWithSize(IsMap("avg_price", "20")));
|
EXPECT_THAT(resp, IsUnordArrayWithSize(IsMap("avg_price", "20")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(SearchFamilyTest, JsonAggregateGroupByWithoutAtSign) {
|
||||||
|
Run({"HSET", "h1", "group", "first", "value", "1"});
|
||||||
|
Run({"HSET", "h2", "group", "second", "value", "2"});
|
||||||
|
Run({"HSET", "h3", "group", "first", "value", "3"});
|
||||||
|
|
||||||
|
auto resp =
|
||||||
|
Run({"FT.CREATE", "index", "ON", "HASH", "SCHEMA", "group", "TAG", "value", "NUMERIC"});
|
||||||
|
EXPECT_EQ(resp, "OK");
|
||||||
|
|
||||||
|
// TODO: Throw an error when no '@' is provided in the GROUPBY option
|
||||||
|
resp = Run({"FT.AGGREGATE", "index", "*", "GROUPBY", "1", "group", "REDUCE", "COUNT", "0", "AS",
|
||||||
|
"count"});
|
||||||
|
EXPECT_THAT(resp, IsUnordArrayWithSize(IsMap("count", "2", "group", "first"),
|
||||||
|
IsMap("group", "second", "count", "1")));
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(SearchFamilyTest, AggregateGroupByReduceSort) {
|
TEST_F(SearchFamilyTest, AggregateGroupByReduceSort) {
|
||||||
for (size_t i = 0; i < 101; i++) { // 51 even, 50 odd
|
for (size_t i = 0; i < 101; i++) { // 51 even, 50 odd
|
||||||
Run({"hset", absl::StrCat("k", i), "even", (i % 2 == 0) ? "true" : "false", "value",
|
Run({"hset", absl::StrCat("k", i), "even", (i % 2 == 0) ? "true" : "false", "value",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue