weaviate/weaviate · error
child operand at position %d
Error message
child operand at position %d
What it means
A nested operand inside an And/Or/Not filter failed its own validation, and the error is re-wrapped with the operand's position so users can locate which branch of the where-clause is bad. The root cause is in the inner error (e.g. unknown property, bad operator); this wrapper only adds positional context while other siblings continue to be validated and joined.
Source
Thrown at entities/filters/filters_validator.go:52
if filters == nil {
return errors.New("empty where")
}
cw := newClauseWrapper(filters.Root)
if err := validateClause(authorizedGetClass, cw); err != nil {
return err
}
cw.updateClause()
return nil
}
func validateClause(authorizedGetClass func(string) (*models.Class, error), cw *clauseWrapper) error {
// check if nested
if cw.getOperands() != nil {
var errs []error
for i, child := range cw.getOperands() {
if err := validateClause(authorizedGetClass, child); err != nil {
errs = append(errs, errors.Wrapf(err, "child operand at position %d", i))
}
}
if len(errs) > 0 {
return mergeErrs(errs)
}
return nil
}
// validate current
className := cw.getClassName()
propName := cw.getPropertyName()
if IsInternalProperty(propName) {
return validateInternalPropertyClause(propName, cw)
}
View on GitHub (pinned to 75aa4b6d11)
Solutions
- Read the inner error: it names the actual problem in that operand
- Fix or remove the operand at the reported position in the where filter
- Flatten deeply nested filters client-side to make positions easier to map
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at entities/filters/filters_validator.go:52 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04).
Data as JSON: /api/errors/3c614a69980c7ee6.
Report an issue: GitHub.