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

  1. Search metadata for `boolean_expression_name` — confirm it's declared as an object type in the same subgraph
  2. Declare the missing boolean expression type or fix the reference to the correct (qualified) name
  3. 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

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


AI-assisted analysis of hasura/graphql-engine@724551b9ae (2026-08-28). Data as JSON: /api/errors/1cfe10a8ec66f2fc. Report an issue: GitHub.