/* Aggregate input partial values into cumulative result number value for sum and count. If the partial results are not numbers, then return an error. */ func (this *Avg) cumulatePart(part, cumulative value.Value, context Context) (value.Value, error) { if part == value.NULL_VALUE { return cumulative, nil } else if cumulative == value.NULL_VALUE { return part, nil } psum, _ := part.Field("sum") pcount, _ := part.Field("count") csum, _ := cumulative.Field("sum") ccount, _ := cumulative.Field("count") if psum.Type() != value.NUMBER || pcount.Type() != value.NUMBER || csum.Type() != value.NUMBER || ccount.Type() != value.NUMBER { return nil, fmt.Errorf("Missing or invalid partial sum or count in AVG: %v, %v, %v, v.", psum.Actual(), pcount.Actual(), csum.Actual(), ccount.Actual()) } cumulative.SetField("sum", psum.Actual().(float64)+csum.Actual().(float64)) cumulative.SetField("count", pcount.Actual().(float64)+ccount.Actual().(float64)) return cumulative, nil }
/* Call SetField using item value and set the identifier string to the value. The SetField method returns a boolean value. If it is nil return true since no error was encountered while setting the field. */ func (this *Identifier) Set(item, val value.Value, context Context) bool { er := item.SetField(this.identifier, val) return er == nil }