code: func setNextValue(d *types.Datum) {
  	switch d.Kind() {
  	case types.KindBytes, types.KindString:
  		d.SetBytes(kv.Key(d.GetBytes()).PrefixNext())
  	case types.KindInt64:
  		d.SetInt64(d.GetInt64() + 1)
  	case types.KindUint64:
  		d.SetUint64(d.GetUint64() + 1)
  	case types.KindMysqlDuration:
  		duration := d.GetMysqlDuration()
  		duration.Duration = duration.Duration + 1
  		d.SetMysqlDuration(duration)
  	case types.KindMysqlTime:
  		t := d.GetMysqlTime()
  		sc := &stmtctx.StatementContext{TimeZone: types.BoundTimezone}
  		if _, err := t.Add(sc, types.Duration{Duration: 1, Fsp: 0}); err != nil {
  			log.Error(errors.ErrorStack(err))
  		}
  		d.SetMysqlTime(t)
  	}
  }
docs: // setNextValue sets the next value for the given datum. For types like float,
  // we do not set because it is not discrete and does not matter too much when estimating the scalar info.