{"record":{"id":"d2a3e650c5986d45","repo":"hasura/graphql-engine","slug":"column-order-by-target-path-did-not-end-in-a-colum","errorCode":null,"errorMessage":"Column order by target path did not end in a column field value","messagePattern":"Column order by target path did not end in a column field value","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"dc-agents/reference/src/query.ts","lineNumber":452,"sourceCode":"): RawScalarValue => {\n  const [relationshipName, ...remainingPath] = orderByElement.target_path;\n  const rows = response.rows ?? [];\n  const aggregates = response.aggregates ?? {};\n\n  if (relationshipName === undefined) {\n    switch (orderByElement.target.type) {\n      case 'column':\n        if (rows.length > 1)\n          throw new Error(\n            `Unexpected number of rows (${rows.length}) returned by order by element query`,\n          );\n\n        const fieldValue =\n          rows.length === 1\n            ? rows[0][getColumnSelector(orderByElement.target.column)]\n            : null;\n        if (fieldValue !== null && typeof fieldValue === 'object')\n          throw new Error(\n            'Column order by target path did not end in a column field value',\n          );\n\n        return coerceUndefinedToNull(fieldValue) as RawScalarValue;\n\n      case 'single_column_aggregate':\n        return aggregates[orderByElement.target.column];\n\n      case 'star_count_aggregate':\n        return aggregates['count'];\n\n      default:\n        return unreachable(orderByElement.target['type']);\n    }\n  } else {\n    if (rows.length > 1)\n      throw new Error(\n        `Unexpected number of rows (${rows.length}) returned by order by element query`,","sourceCodeStart":434,"sourceCodeEnd":470,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/dc-agents/reference/src/query.ts#L434-L470","documentation":"For a column order-by target, the extracted field value must be a scalar. If the value pulled from the single result row is an object (e.g. a nested record or structured field), the engine refuses to use it as a sort key because raw scalars are the only valid column order-by values.","triggerScenarios":"An order_by element targets a column whose stored/returned value is an object rather than a scalar — e.g. a JSON column containing an object, or a backend that wraps field values in { value: ... } envelopes.","commonSituations":"Static datasets containing structured/JSON fields used in order_by; connector backends that return nested row objects for fields; schema type mismatches where a column declared scalar actually holds structured data.","solutions":["Order by a genuinely scalar column instead of a structured/JSON column.","If the data is wrong, fix the dataset so the column holds scalar values.","If writing a backend, unwrap field values to raw scalars in the rows you return."],"exampleFix":"// before\norder_by: [{ target: { type: 'column', column: 'metadata' }, order: 'asc' }] // metadata holds objects\n\n// after\norder_by: [{ target: { type: 'column', column: 'name' }, order: 'asc' }]","handlingStrategy":"type-guard","validationCode":"const sample = rows[0]?.[columnName];\nif (sample !== undefined && typeof sample === 'object') throw new Error('cannot order by structured column');","typeGuard":"const isRawScalar = (v: unknown): v is RawScalarValue => v === null || ['string', 'number', 'boolean'].includes(typeof v);","tryCatchPattern":null,"preventionTips":["Only order by scalar-typed columns","Unwrap structured field values in custom backends before returning rows"],"tags":["hasura","data-connector","order-by","type-mismatch"],"backgroundTag":"non-scalar-column-value","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}