MCPcopy Index your code
hub / github.com/LissaGreense/GO4SQL / aggregateColumnContent

Function aggregateColumnContent

engine/engine.go:323–383  ·  view source on GitHub ↗
(space ast.Space, columnValues []ValueInterface)

Source from the content-addressed store, hash-verified

321}
322
323func aggregateColumnContent(space ast.Space, columnValues []ValueInterface) (ValueInterface, error) {
324 if space.AggregateFunc.Type == token.COUNT {
325 if space.ColumnName.Type == token.ASTERISK {
326 return IntegerValue{Value: len(columnValues)}, nil
327 }
328 count := 0
329 for _, value := range columnValues {
330 if value.GetType() != NullType {
331 count++
332 }
333 }
334 return IntegerValue{Value: count}, nil
335 }
336 if len(columnValues) == 0 {
337 return NullValue{}, nil
338 }
339 switch space.AggregateFunc.Type {
340 case token.MAX:
341 maxValue, err := getMax(columnValues)
342 if err != nil {
343 return nil, err
344 }
345 return maxValue, nil
346 case token.MIN:
347 minValue, err := getMin(columnValues)
348 if err != nil {
349 return nil, err
350 }
351 return minValue, nil
352 case token.SUM:
353 if columnValues[0].GetType() == StringType {
354 return IntegerValue{Value: 0}, nil
355 } else {
356 sum := 0
357 for _, value := range columnValues {
358 if value.GetType() != NullType {
359 num, err := strconv.Atoi(value.ToString())
360 if err != nil {
361 return nil, err
362 }
363 sum += num
364 }
365 }
366 return IntegerValue{Value: sum}, nil
367 }
368 default:
369 if columnValues[0].GetType() == StringType {
370 return IntegerValue{Value: 0}, nil
371 } else {
372 sum := 0
373 for _, value := range columnValues {
374 num, err := strconv.Atoi(value.ToString())
375 if err != nil {
376 return nil, err
377 }
378 sum += num
379 }
380 return IntegerValue{Value: sum / len(columnValues)}, nil

Callers 1

Calls 4

getMaxFunction · 0.85
getMinFunction · 0.85
GetTypeMethod · 0.65
ToStringMethod · 0.65

Tested by

no test coverage detected