code: func (r *RangeOp) String() string {
  	result := &bytes.Buffer{}
  	if r.conditions == nil || len(r.conditions) == 0 {
  		result.WriteString("<empty>")
  	} else {
  		// sort the fields by name for deterministic results
  		keys := make([]string, 0, len(r.conditions))
  		for key := range r.conditions {
  			keys = append(keys, key)
  		}
  		sort.Strings(keys)
  		for _, field := range keys {
  			conds := r.conditions[field]
  			if result.Len() > 0 {
  				result.WriteString(", ")
  			}
  			result.WriteString(field)
  			result.WriteString(" ")
  			for i, cond := range conds {
  				if i > 0 {
  					_, _ = fmt.Fprintf(result, ", %s ", field)
  				}
  				_, _ = fmt.Fprintf(result, "%s %v", cond.Op.String(), cond.Value)
  			}
  		}
  	}
  	addLimitTokenString(result, r.limit, r.token)
  	return result.String()
  }
docs: // String satisfies the Stringer interface