func (e *Evaluator) evalAggGroupConcat(v *ast.AggregateFuncExpr) { ctx := v.GetContext() if ctx.Buffer != nil { v.SetString(ctx.Buffer.String()) } else { v.SetNull() } }
func (e *Evaluator) evalAggAvg(v *ast.AggregateFuncExpr) { ctx := v.GetContext() switch x := ctx.Value.(type) { case float64: ctx.Value = x / float64(ctx.Count) case mysql.Decimal: ctx.Value = x.Div(mysql.NewDecimalFromUint(uint64(ctx.Count), 0)) } v.SetValue(ctx.Value) }
func (e *Evaluator) evalAggAvg(v *ast.AggregateFuncExpr) { ctx := v.GetContext() switch ctx.Value.Kind() { case types.KindFloat64: t := ctx.Value.GetFloat64() / float64(ctx.Count) v.SetValue(t) case types.KindMysqlDecimal: x := ctx.Value.GetMysqlDecimal() t := x.Div(mysql.NewDecimalFromUint(uint64(ctx.Count), 0)) v.SetMysqlDecimal(t) } ctx.Value = *v.GetDatum() }
func (e *Evaluator) evalAggAvg(v *ast.AggregateFuncExpr) { ctx := v.GetContext() switch ctx.Value.Kind() { case types.KindFloat64: t := ctx.Value.GetFloat64() / float64(ctx.Count) v.SetValue(t) case types.KindMysqlDecimal: x := ctx.Value.GetMysqlDecimal() var y, to mysql.MyDecimal y.FromUint(uint64(ctx.Count)) mysql.DecimalDiv(x, &y, &to, mysql.DivFracIncr) to.Round(&to, ctx.Value.Frac()+mysql.DivFracIncr) v.SetMysqlDecimal(&to) } ctx.Value = *v.GetDatum() }
func (e *Evaluator) evalAggSetValue(v *ast.AggregateFuncExpr) { ctx := v.GetContext() v.SetDatum(ctx.Value) }
func (e *Evaluator) evalAggCount(v *ast.AggregateFuncExpr) { ctx := v.GetContext() v.SetInt64(ctx.Count) }
func (e *Evaluator) evalAggFirstRow(v *ast.AggregateFuncExpr) { ctx := v.GetContext() v.SetValue(ctx.Value) }