Skip to content
This repository was archived by the owner on Nov 7, 2025. It is now read-only.

Commit cb8fd7b

Browse files
authored
[v. small] Leftovers after minor changes to bucket aggr parsers (#1111)
1 parent d869a07 commit cb8fd7b

File tree

2 files changed

+34
-54
lines changed

2 files changed

+34
-54
lines changed

quesma/queryparser/filters_aggregation.go

Lines changed: 0 additions & 42 deletions
This file was deleted.

quesma/queryparser/pancake_aggregation_parser_buckets.go

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"quesma/logger"
1111
"quesma/model"
1212
"quesma/model/bucket_aggregations"
13+
"sort"
1314
"strconv"
1415
"strings"
1516
)
@@ -52,7 +53,6 @@ func (cw *ClickhouseQueryTranslator) pancakeTryBucketAggregation(aggregation *pa
5253
return nil
5354
}
5455

55-
// paramsRaw - in a proper request should be of QueryMap type.
5656
func (cw *ClickhouseQueryTranslator) parseHistogram(aggregation *pancakeAggregationTreeNode, params QueryMap) (err error) {
5757
const defaultInterval = 1.0
5858
var interval float64
@@ -97,7 +97,6 @@ func (cw *ClickhouseQueryTranslator) parseHistogram(aggregation *pancakeAggregat
9797
return nil
9898
}
9999

100-
// paramsRaw - in a proper request should be of QueryMap type.
101100
func (cw *ClickhouseQueryTranslator) parseDateHistogram(aggregation *pancakeAggregationTreeNode, params QueryMap) (err error) {
102101
field := cw.parseFieldField(params, "date_histogram")
103102
dateTimeType := cw.Table.GetDateTimeTypeFromExpr(cw.Ctx, field)
@@ -146,7 +145,6 @@ func (cw *ClickhouseQueryTranslator) parseDateHistogram(aggregation *pancakeAggr
146145
return nil
147146
}
148147

149-
// paramsRaw - in a proper request should be of QueryMap type.
150148
// aggrName - "terms" or "significant_terms"
151149
func (cw *ClickhouseQueryTranslator) parseTermsAggregation(aggregation *pancakeAggregationTreeNode, params QueryMap, aggrName string) error {
152150
field := cw.parseFieldField(params, aggrName)
@@ -169,6 +167,38 @@ func (cw *ClickhouseQueryTranslator) parseTermsAggregation(aggregation *pancakeA
169167
return nil
170168
}
171169

170+
func (cw *ClickhouseQueryTranslator) parseFilters(aggregation *pancakeAggregationTreeNode, params QueryMap) error {
171+
filtersParamRaw, exists := params["filters"]
172+
if !exists {
173+
return fmt.Errorf("filters is not a map, but %T, value: %v", params, params)
174+
}
175+
filtersParam, ok := filtersParamRaw.(QueryMap)
176+
if !ok {
177+
return fmt.Errorf("filters is not a map, but %T, value: %v", filtersParamRaw, filtersParamRaw)
178+
}
179+
180+
filters := make([]bucket_aggregations.Filter, 0, len(filtersParam))
181+
for name, filterRaw := range filtersParam {
182+
filterMap, ok := filterRaw.(QueryMap)
183+
if !ok {
184+
return fmt.Errorf("filter is not a map, but %T, value: %v", filterRaw, filterRaw)
185+
}
186+
filter := cw.parseQueryMap(filterMap)
187+
if filter.WhereClause == nil {
188+
filter.WhereClause = model.TrueExpr
189+
filter.CanParse = true
190+
}
191+
filters = append(filters, bucket_aggregations.NewFilter(name, filter))
192+
}
193+
194+
sort.Slice(filters, func(i, j int) bool {
195+
return filters[i].Name < filters[j].Name
196+
})
197+
aggregation.queryType = bucket_aggregations.NewFilters(cw.Ctx, filters)
198+
aggregation.isKeyed = true
199+
return nil
200+
}
201+
172202
func (cw *ClickhouseQueryTranslator) parseSampler(aggregation *pancakeAggregationTreeNode, params QueryMap) error {
173203
const defaultSize = 100
174204
aggregation.queryType = bucket_aggregations.NewSampler(cw.Ctx, cw.parseIntField(params, "shard_size", defaultSize))
@@ -199,14 +229,7 @@ func (cw *ClickhouseQueryTranslator) parseRangeAggregation(aggregation *pancakeA
199229
}
200230

201231
const keyedDefault = false
202-
keyed := keyedDefault
203-
if keyedRaw, exists := params["keyed"]; exists {
204-
var ok bool
205-
if keyed, ok = keyedRaw.(bool); !ok {
206-
logger.WarnWithCtx(cw.Ctx).Msgf("keyed is not a bool, but %T, value: %v", keyedRaw, keyedRaw)
207-
}
208-
}
209-
232+
keyed := cw.parseBoolField(params, "keyed", keyedDefault)
210233
field := cw.parseFieldField(params, "range")
211234
aggregation.queryType = bucket_aggregations.NewRange(cw.Ctx, field, intervals, keyed)
212235
aggregation.isKeyed = keyed
@@ -305,7 +328,6 @@ func (cw *ClickhouseQueryTranslator) parseGeotileGrid(aggregation *pancakeAggreg
305328
return nil
306329
}
307330

308-
// compositeRaw - in a proper request should be of QueryMap type.
309331
// TODO: In geotile_grid, without order specidfied, Elastic returns sort by key (a/b/c earlier than x/y/z if a<x or (a=x && b<y), etc.)
310332
// Maybe add some ordering, but doesn't seem to be very important.
311333
func (cw *ClickhouseQueryTranslator) parseComposite(aggregation *pancakeAggregationTreeNode, params QueryMap) error {

0 commit comments

Comments
 (0)