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
- Use exactly "AND" or "OR" uppercase, or omit the field entirely
- 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
- Whitelist and normalize operators to uppercase before sending
- Omit operator to use the default
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
- filter item key is invalid: %w
- error building clickhouse query: %v
- invalid expression %s: %v
- live tail is only supported for single query
- invalid data type for resource attribute: %s
AI-assisted analysis of SigNoz/signoz@5069bf80b0 (2026-08-28).
Data as JSON: /api/errors/58464ebbca8912da.
Report an issue: GitHub.