func parseFilter()

in pkg/query/logical/tag_filter.go [128:163]


func parseFilter(cond *modelv1.Condition, expr ComparableExpr) (TagFilter, error) {
	switch cond.Op {
	case modelv1.Condition_BINARY_OP_GT:
		return newRangeTag(cond.Name, rangeOpts{
			Lower: expr,
		}), nil
	case modelv1.Condition_BINARY_OP_GE:
		return newRangeTag(cond.Name, rangeOpts{
			IncludesLower: true,
			Lower:         expr,
		}), nil
	case modelv1.Condition_BINARY_OP_LT:
		return newRangeTag(cond.Name, rangeOpts{
			Upper: expr,
		}), nil
	case modelv1.Condition_BINARY_OP_LE:
		return newRangeTag(cond.Name, rangeOpts{
			IncludesUpper: true,
			Upper:         expr,
		}), nil
	case modelv1.Condition_BINARY_OP_EQ:
		return newEqTag(cond.Name, expr), nil
	case modelv1.Condition_BINARY_OP_NE:
		return newNotTag(newEqTag(cond.Name, expr)), nil
	case modelv1.Condition_BINARY_OP_HAVING:
		return newHavingTag(cond.Name, expr), nil
	case modelv1.Condition_BINARY_OP_NOT_HAVING:
		return newNotTag(newHavingTag(cond.Name, expr)), nil
	case modelv1.Condition_BINARY_OP_IN:
		return newInTag(cond.Name, expr), nil
	case modelv1.Condition_BINARY_OP_NOT_IN:
		return newNotTag(newInTag(cond.Name, expr)), nil
	default:
		return nil, errors.WithMessagef(errUnsupportedConditionOp, "tag filter parses %v", cond)
	}
}