{"record":{"id":"7657a76cc2d1bf1a","repo":"hasura/graphql-engine","slug":"invalid-orderable-field-field-name-exactly-one","errorCode":null,"errorMessage":"Invalid orderable field {field_name}. Exactly one of `enable_order_by_directions` or `order_by_expression_name` must be specified.","messagePattern":"Invalid orderable field (.+?)\\. Exactly one of `enable_order_by_directions` or `order_by_expression_name` must be specified\\.","errorType":"validation","errorClass":"OrderByExpressionError","httpStatus":null,"severity":"error","filePath":"v3/crates/metadata-resolve/src/stages/order_by_expressions/error.rs","lineNumber":39,"sourceCode":"    }\n}\n\n#[derive(Debug, thiserror::Error)]\npub enum OrderByExpressionError {\n    #[error(\"unknown field {field_name} in orderable fields\")]\n    UnknownFieldInOrderByExpression { field_name: FieldName },\n    #[error(\"The data type {data_type} has not been defined\")]\n    UnknownOrderableType {\n        data_type: Qualified<CustomTypeName>,\n    },\n    #[error(\n        \"The relationship {relationship_name} on object type {object_type_name} could not be found\"\n    )]\n    UnknownRelationship {\n        relationship_name: RelationshipName,\n        object_type_name: Qualified<CustomTypeName>,\n    },\n    #[error(\n        \"Invalid orderable field {field_name}. Exactly one of `enable_order_by_directions` or `order_by_expression_name` must be specified.\"\n    )]\n    InvalidOrderByExpressionOrderableField { field_name: FieldName },\n    #[error(\n        \"The order by expression {order_by_expression_name} referenced in field {field_name} has not been defined\"\n    )]\n    UnknownOrderByExpressionNameInOrderableField {\n        order_by_expression_name: OrderByExpressionName,\n        field_name: FieldName,\n    },\n    #[error(\n        \"The order by expression {order_by_expression_name} referenced in orderable relationship {relationship_name} has not been defined\"\n    )]\n    UnknownOrderByExpressionNameInOrderableRelationship {\n        order_by_expression_name: OrderByExpressionName,\n        relationship_name: RelationshipName,\n    },\n    #[error(","sourceCodeStart":21,"sourceCodeEnd":57,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/v3/crates/metadata-resolve/src/stages/order_by_expressions/error.rs#L21-L57","documentation":"A field is configured as an orderable field, but its configuration is ambiguous: exactly one of enable_order_by_directions or order_by_expression_name must be set, and the resolver found both or neither.","triggerScenarios":"Orderable field entry sets both enable_order_by_directions and order_by_expression_name, or sets neither, leaving the resolver unable to decide how ordering works for that field.","commonSituations":"Hand-editing orderable_fields entries; migrating metadata between format versions where defaults changed; copy-paste combining two configuration styles.","solutions":["Edit the orderable field entry so exactly one of the two options is present","Use enable_order_by_directions for plain direction-based ordering, or order_by_expression_name to delegate ordering to a named expression"],"exampleFix":"// before\n{\"field\":\"name\",\"enable_order_by_directions\":true,\"order_by_expression_name\":\"name_expr\"}\n// after\n{\"field\":\"name\",\"enable_order_by_directions\":true}","handlingStrategy":"validation","validationCode":"for (const f of orderableFields) {\n  const a = f.enable_order_by_directions != null, b = f.order_by_expression_name != null;\n  if (a === b) throw new Error(`Orderable field ${f.field} must set exactly one of the two options`);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use templates/schemas that enforce mutual exclusion of the two options","Review orderable field config during metadata format migrations"],"tags":["hasura","metadata","order-by","configuration"],"backgroundTag":"invalid-configuration","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}