{"record":{"id":"e5c503a0296d67d3","repo":"hasura/graphql-engine","slug":"0-e5c503","errorCode":null,"errorMessage":"{0}","messagePattern":"\\{0\\}","errorType":"validation","errorClass":"AggregateBooleanExpressionError","httpStatus":null,"severity":"error","filePath":"v3/crates/metadata-resolve/src/stages/aggregate_boolean_expressions/types.rs","lineNumber":134,"sourceCode":"    pub type_name: Qualified<CustomTypeName>,\n    pub error: AggregateBooleanExpressionError,\n}\n\nimpl ContextualError for NamedAggregateBooleanExpressionError {\n    fn create_error_context(&self) -> Option<error_context::Context> {\n        None\n    }\n}\n\n#[derive(Debug, thiserror::Error)]\npub enum AggregateBooleanExpressionError {\n    #[error(\"boolean expressions with aggregate operands are not supported\")]\n    AggregateBooleanExpressionsNotSupported,\n\n    #[error(\"boolean expressions with aggregate operands do not support isNull comparisons\")]\n    IsNullComparisonsNotSupported,\n\n    #[error(\"{0}\")]\n    GraphqlConfigError(#[from] GraphqlConfigError),\n\n    #[error(\"the operand type '{operand_type}' must be a scalar type\")]\n    OperandTypeIsNotAScalarType {\n        operand_type: Qualified<CustomTypeName>,\n    },\n\n    #[error(\"the operand type '{operand_type}' must be an object type\")]\n    OperandTypeIsNotAnObjectType {\n        operand_type: Qualified<CustomTypeName>,\n    },\n\n    #[error(\"the aggregate expression '{aggregate_expression}' could not be found\")]\n    AggregateExpressionNotFound {\n        aggregate_expression: Qualified<AggregateExpressionName>,\n    },\n\n    #[error(","sourceCodeStart":116,"sourceCodeEnd":152,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/v3/crates/metadata-resolve/src/stages/aggregate_boolean_expressions/types.rs#L116-L152","documentation":"AggregateBooleanExpressionError::GraphqlConfigError is a #[from] conversion that transparently forwards ({0}) any GraphqlConfigError raised while reading the GraphQL configuration block of an aggregate boolean expression type (e.g. its GraphQL type name).","triggerScenarios":"Providing a graphql_config for an aggregate boolean expression whose type_name is missing, malformed, or conflicts with existing GraphQL type naming rules.","commonSituations":"Typos in the graphql config section, missing type_name field, invalid GraphQL type names (spaces, leading digits) in the boolean expression's GraphQL configuration.","solutions":["Inspect the underlying GraphqlConfigError message for the exact config problem","Fix or add the graphql type_name for the aggregate boolean expression type","Validate GraphQL naming rules (letters, digits, underscores, not starting with a digit)"],"exampleFix":"# before\ngraphql_config:\n  type_name: \"invalid name!\"\n\n# after\ngraphql_config:\n  type_name: UserAggregateExpression","handlingStrategy":"validation","validationCode":"fn valid_graphql_name(name: &str) -> bool {\n    let mut chars = name.chars();\n    matches!(chars.next(), Some(c) if c.is_alphabetic() || c == '_')\n        && chars.all(|c| c.is_alphanumeric() || c == '_')\n}","typeGuard":null,"tryCatchPattern":"if let AggregateBooleanExpressionError::GraphqlConfigError(inner) = err {\n    eprintln!(\"fix graphql_config: {inner}\");\n}","preventionTips":["Always provide a valid graphql type_name in graphql_config","Use GraphQL-name linters on metadata","Reuse a consistent naming convention (PascalCase type names)"],"tags":["metadata","graphql-config","boolean-expression","aggregate"],"backgroundTag":"invalid-graphql-config","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}