func (af *aggFunction) updateSum(row []types.Datum, groupKey []byte, ectx context.Context) error { ctx := af.getContext(groupKey) a := af.Args[0] value, err := a.Eval(row, ectx) if err != nil { return errors.Trace(err) } if value.IsNull() { return nil } if af.Distinct { d, err1 := ctx.DistinctChecker.Check([]interface{}{value.GetValue()}) if err1 != nil { return errors.Trace(err1) } if !d { return nil } } ctx.Value, err = types.CalculateSum(ctx.Value, value) if err != nil { return errors.Trace(err) } ctx.Count++ return nil }
func (af *avgFunction) updateAvg(row []types.Datum, groupKey []byte, ectx context.Context) error { ctx := af.getContext(groupKey) a := af.Args[1] value, err := a.Eval(row, ectx) if err != nil { return errors.Trace(err) } if value.IsNull() { return nil } if af.Distinct { d, err1 := ctx.DistinctChecker.Check([]interface{}{value.GetValue()}) if err1 != nil { return errors.Trace(err1) } if !d { return nil } } ctx.Value, err = types.CalculateSum(ectx.GetSessionVars().StmtCtx, ctx.Value, value) if err != nil { return errors.Trace(err) } count, err := af.Args[0].Eval(row, ectx) if err != nil { return errors.Trace(err) } ctx.Count += count.GetInt64() return nil }
func (af *aggFunction) streamUpdateSum(row []types.Datum, ectx context.Context) error { ctx := af.getStreamedContext() a := af.Args[0] value, err := a.Eval(row, ectx) if err != nil { return errors.Trace(err) } if value.IsNull() { return nil } if af.Distinct { d, err1 := ctx.DistinctChecker.Check([]interface{}{value.GetValue()}) if err1 != nil { return errors.Trace(err1) } if !d { return nil } } ctx.Value, err = types.CalculateSum(ectx.GetSessionVars().StmtCtx, ctx.Value, value) if err != nil { return errors.Trace(err) } ctx.Count++ return nil }
func (n *finalAggregater) updateSum(val types.Datum, count uint64) error { ctx := n.getContext() if val.IsNull() { return nil } var err error ctx.Value, err = types.CalculateSum(ctx.Value, val.GetValue()) if err != nil { return errors.Trace(err) } ctx.Count += int64(count) return nil }
// CalculateDefaultValue implements AggregationFunction interface. func (sf *sumFunction) CalculateDefaultValue(schema Schema, ctx context.Context) (d types.Datum, valid bool) { arg := sf.Args[0] result, err := EvaluateExprWithNull(ctx, schema, arg) if err != nil { log.Warnf("Evaluate expr with null failed in function %s, err msg is %s", sf, err.Error()) return d, false } if con, ok := result.(*Constant); ok { d, err = types.CalculateSum(ctx.GetSessionVars().StmtCtx, d, con.Value) if err != nil { log.Warnf("CalculateSum failed in function %s, err msg is %s", sf, err.Error()) } return d, err == nil } return d, false }
func (n *AggregateFuncExpr) updateSum() error { ctx := n.GetContext() value := *n.Args[0].GetDatum() if value.IsNull() { return nil } if n.Distinct { d, err := ctx.DistinctChecker.Check([]interface{}{value.GetValue()}) if err != nil { return errors.Trace(err) } if !d { return nil } } var err error ctx.Value, err = types.CalculateSum(ctx.Value, value) if err != nil { return errors.Trace(err) } ctx.Count++ return nil }
func (n *AggregateFuncExpr) updateSum() error { ctx := n.GetContext() a := n.Args[0] value := a.GetValue() if value == nil { return nil } if n.Distinct { d, err := ctx.distinctChecker.Check([]interface{}{value}) if err != nil { return errors.Trace(err) } if !d { return nil } } var err error ctx.Value, err = types.CalculateSum(ctx.Value, value) if err != nil { return errors.Trace(err) } return nil }