{"record":{"id":"1e7448250a62f537","repo":"hasura/graphql-engine","slug":"the-boolean-expression-type-name-has-a-graphql-1e7448","errorCode":null,"errorMessage":"the boolean expression '{type_name}' has a GraphQL field name conflict between the '{name}' {name_source_1} and the '{name}' {name_source_2}. One of these will need to be renamed.","messagePattern":"the boolean expression '(.+?)' has a GraphQL field name conflict between the '(.+?)' (.+?) and the '(.+?)' (.+?)\\. One of these will need to be renamed\\.","errorType":"validation","errorClass":"ScalarBooleanExpressionTypeIssue","httpStatus":null,"severity":"error","filePath":"v3/crates/metadata-resolve/src/stages/scalar_boolean_expressions/error.rs","lineNumber":86,"sourceCode":"    MissingLogicalOperatorNamesInGraphqlConfig {\n        type_name: Qualified<CustomTypeName>,\n    },\n    // Because the GraphqlConfig's filterInputConfig requires all properties to be set, the effective meaning of not\n    // having the is_null operator set is that the entire boolean expression cannot be rendered in GraphQL and so we\n    // communicate that effect here, even though this issue is only about the is null operator specifically.\n    #[error(\n        \"a graphql section is defined in boolean expression type '{type_name}' but it will not appear in the GraphQL API unless the is_null operator field name is also configured in the GraphqlConfig in query.filterInputConfig\"\n    )]\n    MissingIsNullOperatorNameInGraphqlConfig {\n        type_name: Qualified<CustomTypeName>,\n    },\n    #[error(\n        \"the boolean expression '{type_name}' has enabled logical operators, but they will not appear in the GraphQL API unless you update your CompatibilityConfig date to at least 2024-11-26\"\n    )]\n    LogicalOperatorsUnavailable {\n        type_name: Qualified<CustomTypeName>,\n    },\n    #[error(\n        \"the boolean expression '{type_name}' has a GraphQL field name conflict between the '{name}' {name_source_1} and the '{name}' {name_source_2}. One of these will need to be renamed.\"\n    )]\n    GraphqlFieldNameConflict {\n        type_name: Qualified<CustomTypeName>,\n        name: String,\n        name_source_1: FieldNameSource,\n        name_source_2: FieldNameSource,\n    },\n    #[error(\n        \"the comparable operator '{name}' is defined more than once in the boolean expression type '{type_name}'\"\n    )]\n    DuplicateComparableOperatorFound {\n        type_name: Qualified<CustomTypeName>,\n        name: OperatorName,\n    },\n    #[error(\"{0}\")]\n    OperatorIssue(ScalarBooleanExpressionOperatorIssue),\n}","sourceCodeStart":68,"sourceCodeEnd":104,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/v3/crates/metadata-resolve/src/stages/scalar_boolean_expressions/error.rs#L68-L104","documentation":"Two fields of the boolean expression type resolve to the same GraphQL field name, coming from different sources (e.g. an operator and a logical operator, or two operators); one must be renamed.","triggerScenarios":"Name collisions in the generated GraphQL filter input, e.g. an operator whose graphql field name equals another operator's or a logical operator's name within the same boolean expression type.","commonSituations":"Custom operator GraphQL renames that clash with _and/_or/_not/is_null or with each other; adding a new operator that collides with an existing one.","solutions":["Rename one of the conflicting fields via its graphql field name configuration","Check which sources (name_source_1, name_source_2) collide and adjust one","Avoid custom names that shadow logical operators or is_null"],"exampleFix":"// before\n- name: equal\n  graphql: {field_name: \"_and\"}\n// after\n- name: equal\n  graphql: {field_name: \"_eq\"}","handlingStrategy":"validation","validationCode":"// collect field names per type and detect collisions before apply\nlet mut seen = HashMap::new();\nfor f in &boolean_expression.fields {\n    if seen.insert(f.graphql_name.clone(), f.source).is_some() {\n        return Err(format!(\"GraphQL field name conflict: {}\", f.graphql_name));\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Reserve logical operator names (_and/_or/_not) and is_null when naming custom operator fields"],"tags":["graphql","naming-conflict","boolean-expression","metadata"],"backgroundTag":"graphql-field-name-conflict","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}