hasura/graphql-engine · error · ObjectTypesIssue
Multiple {function_name} extraction functions found for type
Error message
Multiple {function_name} extraction functions found for type {scalar_type} in data connector {data_connector_name} What it means
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.
Source
Thrown at v3/crates/metadata-resolve/src/stages/object_types/types.rs:458
#[derive(Debug, thiserror::Error)]
pub enum ObjectTypesIssue {
#[error(
"Multiple {operator_name} operators found for type {scalar_type} in data connector {data_connector_name}"
)]
DuplicateOperatorsDefined {
scalar_type: ndc_models::ScalarTypeName,
operator_name: String,
data_connector_name: Qualified<DataConnectorName>,
},
#[error(
"Multiple {function_name} aggregate functions found for type {scalar_type} in data connector {data_connector_name}"
)]
DuplicateAggregateFunctionsDefined {
scalar_type: ndc_models::ScalarTypeName,
function_name: String,
data_connector_name: Qualified<DataConnectorName>,
},
#[error(
"Multiple {function_name} extraction functions found for type {scalar_type} in data connector {data_connector_name}"
)]
DuplicateExtractionFunctionsDefined {
scalar_type: ndc_models::ScalarTypeName,
function_name: String,
data_connector_name: Qualified<DataConnectorName>,
},
#[error(
"the field {field_name:} in {type_name:} should have the type {expected:} for data connector {data_connector:} but the field has type {provided:}"
)]
FieldTypeMismatch {
field_name: FieldName,
type_name: Qualified<CustomTypeName>,
data_connector: Qualified<DataConnectorName>,
expected: QualifiedTypeName,
provided: QualifiedTypeName,
},
#[error(View on GitHub (pinned to 724551b9ae)
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
Defensive patterns
Strategy: validation
Validate before calling
const seen = new Set();
for (const fn of extractionFunctions) {
const key = `${fn.scalar_type}/${fn.function_name}`;
if (seen.has(key)) throw new Error(`Duplicate extraction function ${key}`);
seen.add(key);
} Prevention
- Namespace custom extraction function names to avoid collisions with defaults
- Lint metadata for duplicate function names before apply
When it happens
Trigger: Metadata or connector schema defines two date/time (or similar) extraction functions with the same name for one scalar type in the same connector.
Common situations: Custom extraction functions added manually that clash with connector defaults; metadata copy-paste; connector schema change introducing duplicates.
Related errors
- Multiple {operator_name} operators found for type {scalar_ty
- Multiple {function_name} aggregate functions found for type
- {argument_name:} has the data type {data_type:} that has not
- the relationship '{relationship_name}' is defined more than
- the boolean expression type with name {type_name} is defined
AI-assisted analysis of hasura/graphql-engine@724551b9ae (2026-08-28).
Data as JSON: /api/errors/f5c755865740b339.
Report an issue: GitHub.