code: func (b *builtinOctStringSig) evalString(row chunk.Row) (string, bool, error) {
  	val, isNull, err := b.args[0].EvalString(b.ctx, row)
  	if isNull || err != nil {
  		return "", isNull, err
  	}
  
  	negative, overflow := false, false
  	val = getValidPrefix(strings.TrimSpace(val), 10)
  	if len(val) == 0 {
  		return "0", false, nil
  	}
  
  	if val[0] == '-' {
  		negative, val = true, val[1:]
  	}
  	numVal, err := strconv.ParseUint(val, 10, 64)
  	if err != nil {
  		numError, ok := err.(*strconv.NumError)
  		if !ok || numError.Err != strconv.ErrRange {
  			return "", true, err
  		}
  		overflow = true
  	}
  	if negative && !overflow {
  		numVal = -numVal
  	}
  	return strconv.FormatUint(numVal, 8), false, nil
  }
docs: // evalString evals OCT(N).
  // See https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_oct