@@ -236,7 +236,9 @@ func (p *pancakeJSONRenderer) layerToJSON(remainingLayers []*pancakeModelLayer,
236236 default :
237237 metricRows = p .selectMetricRows (metric .InternalNamePrefix (), rows )
238238 }
239- result [metric .name ] = metric .queryType .TranslateSqlResponseToJson (metricRows )
239+ if metric .name != PancakeTotalCountMetricName {
240+ result [metric .name ] = metric .queryType .TranslateSqlResponseToJson (metricRows )
241+ }
240242 // TODO: maybe add metadata also here? probably not needed
241243 }
242244
@@ -253,6 +255,9 @@ func (p *pancakeJSONRenderer) layerToJSON(remainingLayers []*pancakeModelLayer,
253255 if err != nil {
254256 return nil , err
255257 }
258+ if layer .nextBucketAggregation .metadata != nil {
259+ json ["meta" ] = layer .nextBucketAggregation .metadata
260+ }
256261 result [layer .nextBucketAggregation .name ] = json
257262 return result , nil
258263 }
@@ -345,18 +350,30 @@ func (p *pancakeJSONRenderer) layerToJSON(remainingLayers []*pancakeModelLayer,
345350 return nil , fmt .Errorf ("no key in bucket json, layer: %s" , layer .nextBucketAggregation .name )
346351 }
347352 }
353+ var (
354+ columnNameWithKey = layer .nextBucketAggregation .InternalNameForKey (0 ) // TODO: need all ids, multi_terms will probably not work now
355+ found bool
356+ subAggrKey any
357+ currentBucketSubAggrRows []model.QueryResultRow
358+ )
359+ if subAggrIdx < len (subAggrRows ) {
360+ subAggrKey , found = p .valueForColumn (subAggrRows [subAggrIdx ], columnNameWithKey )
361+ }
348362
349- columnNameWithKey := layer .nextBucketAggregation .InternalNameForKey (0 ) // TODO: need all ids, multi_terms will probably not work now
350- subAggrKey , found := p .valueForColumn (subAggrRows [subAggrIdx ], columnNameWithKey )
351363 if found && subAggrKey == key {
352- subAggr , err := p .layerToJSON (remainingLayers [1 :], subAggrRows [subAggrIdx ])
353- if err != nil {
354- return nil , err
355- }
356- bucketArr [i ] = util .MergeMaps (p .ctx , bucket , subAggr )
364+ currentBucketSubAggrRows = subAggrRows [subAggrIdx ]
357365 subAggrIdx ++
358366 } else {
359- bucketArr [i ] = bucket
367+ currentBucketSubAggrRows = []model.QueryResultRow {}
368+ }
369+
370+ subAggr , err := p .layerToJSON (remainingLayers [1 :], currentBucketSubAggrRows )
371+ if err != nil {
372+ return nil , err
373+ }
374+ bucketArr [i ] = util .MergeMaps (p .ctx , bucket , subAggr )
375+ if _ , exists = bucketArr [i ][bucket_aggregations.OriginalKeyName ]; exists {
376+ delete (bucketArr [i ], bucket_aggregations .OriginalKeyName )
360377 }
361378 }
362379 }
@@ -367,6 +384,7 @@ func (p *pancakeJSONRenderer) layerToJSON(remainingLayers []*pancakeModelLayer,
367384 }
368385 result [layer .nextBucketAggregation .name ] = buckets
369386 }
387+
370388 return result , nil
371389}
372390
0 commit comments