build_args method for the AggregateRequest enforces incorrect order of clauses
filipecosta90 opened this issue · comments
quoting @stryt2,
Hello,
Under the
APPLY {expr} AS {name}
section in parameters in detail from the official Redisearch page, it is said thatAPPLY ... can be referenced by further APPLY / SORTBY / GROUPBY / REDUCE operations down the pipeline.
However, looking at the current
build_args
method for theAggregateRequest
, theGROUPBY
keyword and its fields always come before theAPPLY
keyword and its fields. E.g.import redisearch aggregate_request = redisearch.aggregation.AggregateRequest() # Call 1 aggregate_request.apply(foo="@bar / 2").group_by("@foo", redisearch.reducers.count()) # or Call 2 # aggregate_request.group_by("@foo", redisearch.reducers.count()).apply(foo="@bar / 2") print(aggregate_request.build_args())would have 2 calls (
Call 1
andCall 2
) both resulting as (irrespective of the order of methods),
['*', 'GROUPBY', '1', '@baz', 'REDUCE', 'COUNT', '0', 'APPLY', '@bar / 2', 'AS', 'foo']
However, shouldn't the expected behaviour of
Call 1
being
['*', 'APPLY', '@bar / 2', 'AS', 'foo', 'GROUPBY', '1', '@baz', 'REDUCE', 'COUNT', '0']
i.e. the order of the keywords will be dependant upon the order of call?
The reason why this is an issue is that
Call 2
would result an error (if fieldfoo
does not originally exist) sayingNo such property
foo
whereas
Call 1
should not.
Any help to get around this issue is greatly appreciated. Thanks.
Originally posted by @stryt2 in #21 (comment)