hasura/graphql-engine · error · BooleanExpressionError::GraphqlConfigError

{0}

Error message

{0}

What it means

Wrapper error: a graphql_config::GraphqlConfigError occurred during boolean expression resolution, for example invalid GraphQL naming configuration or a name customization that cannot be applied to a boolean expression type. The inner error's message is surfaced verbatim.

Source

Thrown at v3/crates/metadata-resolve/src/stages/boolean_expressions/error.rs:201

    DifferentDataConnectorObjectTypeInFilterExpression {
        model: Qualified<ModelName>,
        model_data_connector_object_type: DataConnectorObjectType,
        filter_expression_type: Qualified<CustomTypeName>,
        filter_expression_data_connector_object_type: DataConnectorObjectType,
    },

    #[error(
        "The relationship '{relationship_name}' cannot be used as a comparable relationship in boolean expression type '{boolean_expression_type_name}' because it is a remote relationship with an argument mapping target. Relationship '{relationship_name}' on type '{source_type}' has source field '{source_field}' mapped to target argument '{target_argument}'"
    )]
    RemoteComparableRelationshipWithArgumentMappingTargetNotSupported {
        boolean_expression_type_name: Qualified<CustomTypeName>,
        relationship_name: open_dds::relationships::RelationshipName,
        source_type: Qualified<CustomTypeName>,
        source_field: FieldName,
        target_argument: open_dds::query::ArgumentName,
    },

    #[error("{0}")]
    GraphqlConfigError(#[from] graphql_config::GraphqlConfigError),

    #[error("{0}")]
    ScalarBooleanExpressionTypeError(
        #[from] scalar_boolean_expressions::ScalarBooleanExpressionTypeError,
    ),

    #[error(
        "data connector error in boolean expression {boolean_expression_name:}: {data_connector_error:}"
    )]
    DataConnectorError {
        boolean_expression_name: Qualified<CustomTypeName>,
        data_connector_error: data_connectors::NamedDataConnectorError,
    },

    #[error("{0}")]
    TypePredicateError(#[from] TypePredicateError),

View on GitHub (pinned to 724551b9ae)

Solutions

  1. Inspect the wrapped GraphqlConfigError message to identify the invalid configuration item and fix it in the graphql_config block
  2. Validate graphql naming customization against the OpenDDs graphql_config schema
  3. Remove the offending customization if not needed

Example fix

// before
graphql_config:
  type_names: { boolean_expression_type_prefix: "123bad" }
// after
graphql_config:
  type_names: { boolean_expression_type_prefix: "Bad123" }
Defensive patterns

Strategy: try-catch

Try / catch

// catch and unwrap the source error for actionable messages
try {
  await applyMetadata(md);
} catch (e) {
  if (/GraphqlConfigError/.test(String(e?.message))) {
    // e.message is the wrapped graphql_config error; fix the named config item
    throw new Error(`Invalid graphql_config: ${e.message}`);
  }
  throw e;
}

Prevention

When it happens

Trigger: Declaring a booleanExpressionType under a GraphQL config that customizes type/field names in a way that fails validation (invalid characters, conflicting names, missing type prefix configuration), so graphql_config parsing fails while resolving filters.

Common situations: Adding a graphql_config block to a model or boolean expression type with malformed naming customization; metadata schema upgrades that made previously-tolerated graphql config invalid.

Related errors


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