SigNoz/signoz · error

operator must be AND or OR

Error message

operator must be AND or OR

What it means

FilterSet.Validate() requires the Operator field to be empty (default) or exactly "AND"/"OR" (case-sensitive). Any other string is rejected.

Source

Thrown at pkg/query-service/model/v3/v3.go:1191

	Items    []FilterItem `json:"items"`
}

func (f *FilterSet) Clone() *FilterSet {
	if f == nil {
		return nil
	}
	return &FilterSet{
		Operator: f.Operator,
		Items:    f.Items,
	}
}

func (f *FilterSet) Validate() error {
	if f == nil {
		return nil
	}
	if f.Operator != "" && f.Operator != "AND" && f.Operator != "OR" {
		return fmt.Errorf("operator must be AND or OR")
	}
	for _, item := range f.Items {
		if err := item.Key.Validate(); err != nil {
			return fmt.Errorf("filter item key is invalid: %w", err)
		}
	}
	return nil
}

// For serializing to and from db
func (f *FilterSet) Scan(src interface{}) error {
	if data, ok := src.([]byte); ok {
		return json.Unmarshal(data, &f)
	}
	return nil
}

func (f *FilterSet) Value() (driver.Value, error) {

View on GitHub (pinned to 5069bf80b0)

Solutions

  1. Use exactly "AND" or "OR" uppercase, or omit the field entirely
  2. Normalize the operator client-side: trim + uppercase + whitelist before sending

Example fix

// before
{"operator":"and","items":[...]}
// after
{"operator":"AND","items":[...]}
Defensive patterns

Strategy: validation

Validate before calling

op := strings.ToUpper(strings.TrimSpace(fs.Operator))
if op != "" && op != "AND" && op != "OR" { return errors.New("operator must be AND or OR") }

Type guard

func isValidFilterOperator(op string) bool { return op == "" || op == "AND" || op == "OR" }

Prevention

When it happens

Trigger: Sending a filter set with "operator":"and" (lowercase), "AND ", "not", or "&&" in a query builder payload.

Common situations: Lowercasing middleware, hand-crafted curl payloads, or client enums that use different tokens (&& / ||).

Related errors


AI-assisted analysis of SigNoz/signoz@5069bf80b0 (2026-08-28). Data as JSON: /api/errors/58464ebbca8912da. Report an issue: GitHub.