{"record":{"id":"f5c755865740b339","repo":"hasura/graphql-engine","slug":"multiple-function-name-extraction-functions-foun","errorCode":null,"errorMessage":"Multiple {function_name} extraction functions found for type {scalar_type} in data connector {data_connector_name}","messagePattern":"Multiple (.+?) extraction functions found for type (.+?) in data connector (.+?)","errorType":"validation","errorClass":"ObjectTypesIssue","httpStatus":null,"severity":"error","filePath":"v3/crates/metadata-resolve/src/stages/object_types/types.rs","lineNumber":458,"sourceCode":"#[derive(Debug, thiserror::Error)]\npub enum ObjectTypesIssue {\n    #[error(\n        \"Multiple {operator_name} operators found for type {scalar_type} in data connector {data_connector_name}\"\n    )]\n    DuplicateOperatorsDefined {\n        scalar_type: ndc_models::ScalarTypeName,\n        operator_name: String,\n        data_connector_name: Qualified<DataConnectorName>,\n    },\n    #[error(\n        \"Multiple {function_name} aggregate functions found for type {scalar_type} in data connector {data_connector_name}\"\n    )]\n    DuplicateAggregateFunctionsDefined {\n        scalar_type: ndc_models::ScalarTypeName,\n        function_name: String,\n        data_connector_name: Qualified<DataConnectorName>,\n    },\n    #[error(\n        \"Multiple {function_name} extraction functions found for type {scalar_type} in data connector {data_connector_name}\"\n    )]\n    DuplicateExtractionFunctionsDefined {\n        scalar_type: ndc_models::ScalarTypeName,\n        function_name: String,\n        data_connector_name: Qualified<DataConnectorName>,\n    },\n    #[error(\n        \"the field {field_name:} in {type_name:} should have the type {expected:} for data connector {data_connector:} but the field has type {provided:}\"\n    )]\n    FieldTypeMismatch {\n        field_name: FieldName,\n        type_name: Qualified<CustomTypeName>,\n        data_connector: Qualified<DataConnectorName>,\n        expected: QualifiedTypeName,\n        provided: QualifiedTypeName,\n    },\n    #[error(","sourceCodeStart":440,"sourceCodeEnd":476,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/v3/crates/metadata-resolve/src/stages/object_types/types.rs#L440-L476","documentation":"More than one extraction function with the same function_name is declared for the same scalar type in one data connector. Like operators and aggregates, extraction function names must be unique per scalar type per connector.","triggerScenarios":"Metadata or connector schema defines two date/time (or similar) extraction functions with the same name for one scalar type in the same connector.","commonSituations":"Custom extraction functions added manually that clash with connector defaults; metadata copy-paste; connector schema change introducing duplicates.","solutions":["Find the duplicate extraction function entries for the scalar type in the connector's collection and remove one","Rename the custom extraction function so it does not collide","Update the connector if it is the source of the duplication"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"const seen = new Set();\nfor (const fn of extractionFunctions) {\n  const key = `${fn.scalar_type}/${fn.function_name}`;\n  if (seen.has(key)) throw new Error(`Duplicate extraction function ${key}`);\n  seen.add(key);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Namespace custom extraction function names to avoid collisions with defaults","Lint metadata for duplicate function names before apply"],"tags":["hasura","metadata","data-connectors","extraction-functions","duplicate"],"backgroundTag":"duplicate-definition","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}