Count(*) to give integer value (#6564)

The Max, Min functions were giving float value even when they were integers.  
Resolved max and Min to return integers in that scenario.

Fixes #6472
master
Ashish Kumar Sinha 6 years ago committed by kannappanr
parent f187a16962
commit 670f9788e3
  1. 16
      pkg/s3select/helpers.go
  2. 7
      pkg/s3select/select_test.go

@ -18,6 +18,7 @@ package s3select
import (
"fmt"
"math"
"reflect"
"strconv"
"strings"
@ -677,9 +678,20 @@ func (reader *Input) colNameErrs(columnNames []string) error {
// aggFuncToStr converts an array of floats into a properly formatted string.
func (reader *Input) aggFuncToStr(myAggVals []float64) string {
myRow := strconv.FormatFloat(myAggVals[0], 'f', 6, 64)
var myRow string
var aggregateval string
if myAggVals[0] == math.Trunc(myAggVals[0]) {
myRow = strconv.FormatInt(int64(myAggVals[0]), 10)
} else {
myRow = strconv.FormatFloat(myAggVals[0], 'f', 6, 64)
}
for i := 1; i < len(myAggVals); i++ {
aggregateval := strconv.FormatFloat(myAggVals[i], 'f', 6, 64)
if myAggVals[i] == math.Trunc(myAggVals[i]) {
aggregateval = strconv.FormatInt(int64(myAggVals[i]), 10)
} else {
aggregateval = strconv.FormatFloat(myAggVals[i], 'f', 6, 64)
}
myRow = myRow + reader.options.OutputFieldDelimiter + aggregateval
}
return myRow

@ -368,8 +368,11 @@ func TestToStringAgg(t *testing.T) {
myAggVal []float64
expected string
}{
{[]float64{10, 11, 12, 13, 14}, "10.000000,11.000000,12.000000,13.000000,14.000000"},
{[]float64{10}, "10.000000"},
{[]float64{10, 11, 12, 13, 14}, "10,11,12,13,14"},
{[]float64{10, 11.3, 12, 13, 14}, "10,11.300000,12,13,14"},
{[]float64{10.235, 11.3, 12, 13, 14}, "10.235000,11.300000,12,13,14"},
{[]float64{10.235, 11.3, 12.123, 13.456, 14.789}, "10.235000,11.300000,12.123000,13.456000,14.789000"},
{[]float64{10}, "10"},
}
for _, table := range tables {
val := s3s.aggFuncToStr(table.myAggVal)

Loading…
Cancel
Save