hasura/graphql-engine · error · TypePredicateError
boolean expression '{boolean_expression_name:}' not found
Error message
boolean expression '{boolean_expression_name:}' not found What it means
The metadata resolver was asked to use a boolean expression type (a named custom type used for filtering) but no type with that name exists in the resolved metadata. Boolean expression types must be declared as object types before they can be referenced (e.g. by filterExpressionType).
Source
Thrown at v3/crates/metadata-resolve/src/types/error.rs:421
field_name: Spanned<FieldName>,
type_name: Qualified<CustomTypeName>,
},
#[error(
"field '{field_name:}' of type '{type_name:}' is an array type and cannot be used in a nested field predicate"
)]
ArrayFieldInNestedFieldPredicate {
field_name: Spanned<FieldName>,
type_name: Qualified<CustomTypeName>,
},
#[error(
"unknown field '{field_name}' for type '{type_name}' used in target mapping for relationship '{relationship_name}'"
)]
UnknownFieldInModelRelationshipTargetMapping {
field_name: FieldName,
type_name: Qualified<CustomTypeName>,
relationship_name: RelationshipName,
},
#[error("boolean expression '{boolean_expression_name:}' not found")]
BooleanExpressionNotFound {
boolean_expression_name: Qualified<CustomTypeName>,
},
#[error(
"field '{field_name:}' could not be found in boolean expression type for object type '{type_name:}'"
)]
BooleanExpressionFieldNotFound {
field_name: Spanned<FieldName>,
type_name: Qualified<CustomTypeName>,
},
#[error(
"the source data connector {data_connector:} for type {type_name:} has not been defined"
)]
UnknownTypeDataConnector {
type_name: Qualified<CustomTypeName>,
data_connector: Qualified<DataConnectorName>,
},
#[error(View on GitHub (pinned to 724551b9ae)
Solutions
- Search metadata for `boolean_expression_name` — confirm it's declared as an object type in the same subgraph
- Declare the missing boolean expression type or fix the reference to the correct (qualified) name
- Check the subgraph namespace prefix matches the reference (e.g. `default/MyExpr` vs `other/MyExpr`)
Example fix
# before
models:
users:
filterExpressionType: UserBooleanExpr # not defined anywhere
# after
types:
UserBooleanExpr: {fields: {...}}
models:
users:
filterExpressionType: UserBooleanExpr
Defensive patterns
Strategy: validation
Validate before calling
// Ensure the referenced boolean expression type is declared
if !metadata.types.contains_key(&qualified_name) {
return Err(format!("boolean expression type {qualified_name} not declared"));
} Type guard
fn expr_type_exists<'a>(md: &'a Metadata, n: &Qualified<CustomTypeName>) -> Option<&'a ObjectType> {
md.types.get(n)
} Try / catch
if let Err(TypePredicateError::BooleanExpressionNotFound { boolean_expression_name }) = result {
return Err(format!("declare type {boolean_expression_name} or fix the reference"));
} Prevention
- Declare filter types before referencing them
- Use consistent subgraph-qualified names everywhere
When it happens
Trigger: Setting a model's `filterExpressionType` to a name that is not declared anywhere; renaming a boolean expression type without updating references; referencing it before it is defined (ordering/reference errors in metadata).
Common situations: Renaming type definitions in one file but not the references in another; deleting an unused-looking object type that was actually a boolean expression type; typos in the qualified name (subgraph prefix mismatch).
Related errors
- error fetching server config: %v
- the boolean expression type ({boolean_expression_type}) used
- the comparable relationship '{relationship_name}' for the op
- error fetching config from server: %w
- could not find a scalar-operanded boolean expression type na
AI-assisted analysis of hasura/graphql-engine@724551b9ae (2026-08-28).
Data as JSON: /api/errors/1cfe10a8ec66f2fc.
Report an issue: GitHub.