33package queryparser
44
55import (
6- "quesma/logger "
6+ "fmt "
77 "quesma/model"
88 "quesma/model/bucket_aggregations"
9+ "sort"
910)
1011
11- func (cw * ClickhouseQueryTranslator ) parseFilters (queryMap QueryMap ) (filtersAggr bucket_aggregations.Filters , success bool ) {
12- filtersAggr = bucket_aggregations .NewFiltersEmpty (cw .Ctx )
13-
14- filtersRaw , exists := queryMap ["filters" ]
15- if ! exists {
16- return
17- }
18-
19- filtersMap , ok := filtersRaw .(QueryMap )
12+ func (cw * ClickhouseQueryTranslator ) parseFilters (aggregation * pancakeAggregationTreeNode , paramsRaw any ) error {
13+ params , ok := paramsRaw .(QueryMap )
2014 if ! ok {
21- logger .WarnWithCtx (cw .Ctx ).Msgf ("filters is not a map, but %T, value: %v. Using empty." , filtersRaw , filtersRaw )
22- return
15+ return fmt .Errorf ("filters is not a map, but %T, value: %v" , paramsRaw , paramsRaw )
2316 }
24- nested , exists := filtersMap ["filters" ]
17+ nestedRaw , exists := params ["filters" ]
2518 if ! exists {
26- logger .WarnWithCtx (cw .Ctx ).Msgf ("filters is not a map, but %T, value: %v. Skipping filters." , filtersRaw , filtersRaw )
27- return
19+ return fmt .Errorf ("filters is not a map, but %T, value: %v" , params , params )
2820 }
29- nestedMap , ok := nested .(QueryMap )
21+ nested , ok := nestedRaw .(QueryMap )
3022 if ! ok {
31- logger .WarnWithCtx (cw .Ctx ).Msgf ("filters is not a map, but %T, value: %v. Skipping filters." , nested , nested )
32- return
23+ return fmt .Errorf ("filters is not a map, but %T, value: %v" , nestedRaw , nestedRaw )
3324 }
3425
35- filters := make ([]bucket_aggregations.Filter , 0 , len (nestedMap ))
36- for name , filterRaw := range nestedMap {
26+ filters := make ([]bucket_aggregations.Filter , 0 , len (nested ))
27+ for name , filterRaw := range nested {
3728 filterMap , ok := filterRaw .(QueryMap )
3829 if ! ok {
39- logger .WarnWithCtx (cw .Ctx ).Msgf ("filter is not a map, but %T, value: %v. Skipping." , filterRaw , filterRaw )
40- continue
30+ return fmt .Errorf ("filter is not a map, but %T, value: %v" , filterRaw , filterRaw )
4131 }
4232 filter := cw .parseQueryMap (filterMap )
4333 if filter .WhereClause == nil {
@@ -46,5 +36,11 @@ func (cw *ClickhouseQueryTranslator) parseFilters(queryMap QueryMap) (filtersAgg
4636 }
4737 filters = append (filters , bucket_aggregations .NewFilter (name , filter ))
4838 }
49- return bucket_aggregations .NewFilters (cw .Ctx , filters ), true
39+
40+ sort .Slice (filters , func (i , j int ) bool {
41+ return filters [i ].Name < filters [j ].Name
42+ })
43+ aggregation .queryType = bucket_aggregations .NewFilters (cw .Ctx , filters )
44+ aggregation .isKeyed = true
45+ return nil
5046}
0 commit comments