{"record":{"id":"e3f1186fdbbfb7a2","repo":"hasura/graphql-engine","slug":"a-graphql-section-is-defined-in-boolean-expression","errorCode":null,"errorMessage":"a graphql section is defined in boolean expression type '{type_name}' but it will not appear in the GraphQL API unless logical operator field names are also configured in the GraphqlConfig in query.filterInputConfig","messagePattern":"a graphql section is defined in boolean expression type '(.+?)' but it will not appear in the GraphQL API unless logical operator field names are also configured in the GraphqlConfig in query\\.filterInputConfig","errorType":"validation","errorClass":"ScalarBooleanExpressionTypeIssue","httpStatus":null,"severity":"warning","filePath":"v3/crates/metadata-resolve/src/stages/scalar_boolean_expressions/error.rs","lineNumber":65,"sourceCode":"    },\n    #[error(\"Predicate types in data connectors are unsupported\")]\n    PredicateTypesUnsupported,\n    #[error(\"{0}\")]\n    GraphqlError(#[from] graphql_config::GraphqlConfigError),\n}\n\nimpl ContextualError for ScalarBooleanExpressionTypeError {\n    fn create_error_context(&self) -> Option<error_context::Context> {\n        None\n    }\n}\n\n#[derive(Debug, thiserror::Error)]\npub enum ScalarBooleanExpressionTypeIssue {\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 logical operators 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 logical operator field names are also configured in the GraphqlConfig in query.filterInputConfig\"\n    )]\n    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 {","sourceCodeStart":47,"sourceCodeEnd":83,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/v3/crates/metadata-resolve/src/stages/scalar_boolean_expressions/error.rs#L47-L83","documentation":"A warning-level issue: the boolean expression type defines a graphql section, but because GraphqlConfig's filterInputConfig requires all fields, logical operator field names are not fully configured, so the whole boolean expression type will not be exposed in the GraphQL API.","triggerScenarios":"Declaring a boolean expression type with a graphql block while query.filterInputConfig in GraphqlConfig does not set logical operator names (_and/_or/_not).","commonSituations":"Partial filterInputConfig configuration where only some field names (e.g. is_null) are set.","solutions":["Set all logical operator field names (and/or/not) in GraphqlConfig query.filterInputConfig","Alternatively remove the graphql section from the boolean expression type if GraphQL exposure is not needed"],"exampleFix":"// before\nquery:\n  filterInputConfig:\n    is_null: \"is_null\"\n// after\nquery:\n  filterInputConfig:\n    is_null: \"is_null\"\n    logical_operator_names:\n      and: \"_and\"\n      or: \"_or\"\n      not: \"_not\"","handlingStrategy":"validation","validationCode":"// ensure filterInputConfig is complete before applying metadata\nif graphql_config.filter_input_config.and.is_none()\n    || graphql_config.filter_input_config.or.is_none()\n    || graphql_config.filter_input_config.not.is_none() {\n    return Err(\"filterInputConfig missing logical operator names\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always configure all filterInputConfig fields together","Add a config schema check in CI for GraphqlConfig completeness"],"tags":["graphql","config","boolean-expression","metadata"],"backgroundTag":"incomplete-config-warning","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}