{"record":{"id":"682156dc37459101","repo":"hasura/graphql-engine","slug":"a-source-must-be-defined-for-model-model-in-ord","errorCode":null,"errorMessage":"a source must be defined for model {model:} in order to use filter expressions","messagePattern":"a source must be defined for model (.+?) in order to use filter expressions","errorType":"validation","errorClass":"BooleanExpressionError::CannotUseFilterExpressionsWithoutSource","httpStatus":null,"severity":"error","filePath":"v3/crates/metadata-resolve/src/stages/boolean_expressions/error.rs","lineNumber":160,"sourceCode":"    #[error(\n        \"Scalar representations for data connector '{data_connector_name}' could not found for boolean expression type {boolean_expression_type}\"\n    )]\n    DataConnectorScalarRepresentationsNotFound {\n        data_connector_name: Qualified<DataConnectorName>,\n        boolean_expression_type: Qualified<CustomTypeName>,\n    },\n\n    #[error(\n        \"Field level comparison operator configuration is not fully supported yet. Please use \\\"enableAll\\\":true.\"\n    )]\n    FieldLevelComparisonOperatorConfigurationNotSupported,\n\n    #[error(\n        \"Field level comparison operator configuration is not fully supported yet. Please add all fields in filterable_fields.\"\n    )]\n    FieldLevelComparisonOperatorNeedsAllFields,\n\n    #[error(\"a source must be defined for model {model:} in order to use filter expressions\")]\n    CannotUseFilterExpressionsWithoutSource { model: Qualified<ModelName> },\n\n    #[error(\n        \"Target model {model_name:} not found, referenced in relationship {relationship_name:}\"\n    )]\n    TargetModelNotFound {\n        relationship_name: RelationshipName,\n        model_name: Qualified<ModelName>,\n    },\n\n    #[error(\n        \"Model {model:} has source data connector {model_data_connector:} but its filter expression type {filter_expression_type:} is backed by data connector {filter_expression_data_connector:}\"\n    )]\n    DifferentDataConnectorInFilterExpression {\n        model: Qualified<ModelName>,\n        model_data_connector: Qualified<DataConnectorName>,\n        filter_expression_type: Qualified<CustomTypeName>,\n        filter_expression_data_connector: Qualified<DataConnectorName>,","sourceCodeStart":142,"sourceCodeEnd":178,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/v3/crates/metadata-resolve/src/stages/boolean_expressions/error.rs#L142-L178","documentation":"Filter expressions (filter_by / boolean expression types) can only be applied to models backed by a source; this model has no source configured, so filter expression resolution fails.","triggerScenarios":"Attaching a boolean_expression_type or filter expression usage to a model whose metadata has no source (data connector + table/collection) defined.","commonSituations":"Adding a model that fronts a remote type or command-only model and then referencing it in a filter; a source block was accidentally deleted or never added during metadata authoring.","solutions":["Add a source (dataConnector + table/collection) to the model in its metadata","If the model is intentionally source-less (e.g. remote/command backed), remove the boolean expression / filter configuration referencing it"],"exampleFix":"// before\nmodels:\n  Album:\n    booleanExpressionType: AlbumFilter\n// after\nmodels:\n  Album:\n    source:\n      dataConnectorName: postgres\n      table: albums\n    booleanExpressionType: AlbumFilter","handlingStrategy":"validation","validationCode":"for (const model of modelsUsingBoolExp(metadata)) {\n  if (!model.source) fail(`model ${model.name} needs a source to use filter expressions`);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Define a source for every model that exposes a booleanExpressionType","Lint metadata for filter usage on source-less models in CI"],"tags":["hasura","model","source","filter","metadata"],"backgroundTag":"missing-source-configuration","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}