code: def add_constraint(operator, value = nil, opts = {})
        @where ||= []
        constraint = operator # assume Parse::Constraint
        unless constraint.is_a?(Parse::Constraint)
          constraint = Parse::Constraint.create(operator, value)
        end
        return unless constraint.is_a?(Parse::Constraint)
        # to support select queries where you have to pass a `key` parameter for matching
        # different tables.
        if constraint.operand == :key || constraint.operand == "key"
          @key = constraint.value
          return
        end
  
        unless opts[:filter] == false
          constraint.operand = Query.format_field(constraint.operand)
        end
        @where.push constraint
        @results = nil
        self #chaining
      end
docs: Add a constraint to the query. This is mainly used internally for compiling constraints.
   @example
    # add where :field equals "value"
    query.add_constraint(:field.eq, "value")
  
    # add where :like_count is greater than 20
    query.add_constraint(:like_count.gt, 20)
  
    # same, but ignore field formatting
    query.add_constraint(:like_count.gt, 20, filter: false)
  
   @param operator [Parse::Operator] an operator object containing the operation and operand.
   @param value [Object] the value for the constraint.
   @param opts [Object] A set of options. Passing :filter with false, will skip field formatting.
   @see Query#format_field
   @return [self]