(space ast.Space, columnValues []ValueInterface)
| 321 | } |
| 322 | |
| 323 | func 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 |
no test coverage detected