{"record":{"id":"3e44eac384e8d354","repo":"googleapis/mcp-toolbox","slug":"unable-to-parse-row-w-3e44ea","errorCode":null,"errorMessage":"unable to parse row: %w","messagePattern":"unable to parse row: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/sources/spanner/spanner.go","lineNumber":140,"sourceCode":"\treturn s.UseClientOAuth\n}\n\nfunc (s *Source) GetCatalogClient(ctx context.Context, tokenString string) (*dataplexapi.CatalogClient, error) {\n\treturn s.dataplexMgr.GetCatalogClient(ctx, tokenString)\n}\n\n// processRows iterates over the spanner.RowIterator and converts each row to a map[string]any.\nfunc processRows(iter *spanner.RowIterator) ([]any, error) {\n\tout := []any{}\n\tdefer iter.Stop()\n\n\tfor {\n\t\trow, err := iter.Next()\n\t\tif err == iterator.Done {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"unable to parse row: %w\", err)\n\t\t}\n\n\t\trowMap := orderedmap.Row{}\n\t\tcols := row.ColumnNames()\n\t\tfor i, c := range cols {\n\t\t\tif c == \"object_details\" { // for list graphs or list tables\n\t\t\t\tval := row.ColumnValue(i)\n\t\t\t\tif val == nil { // ColumnValue returns the Cloud Spanner Value of column i, or nil for invalid column.\n\t\t\t\t\trowMap.Add(c, nil)\n\t\t\t\t} else {\n\t\t\t\t\tjsonString, ok := val.AsInterface().(string)\n\t\t\t\t\tif !ok {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\"column 'object_details' is not a string, but %T\", val.AsInterface())\n\t\t\t\t\t}\n\t\t\t\t\tvar details map[string]any\n\t\t\t\t\tif err := json.Unmarshal([]byte(jsonString), &details); err != nil {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\"unable to unmarshal JSON: %w\", err)\n\t\t\t\t\t}","sourceCodeStart":122,"sourceCodeEnd":158,"githubUrl":"https://github.com/googleapis/mcp-toolbox/blob/8cc6e09de2ad7b8bffc77751799585a1401a48eb/internal/sources/spanner/spanner.go#L122-L158","documentation":"iter.Next returned a non-Done error while streaming Spanner rows in processRows — the query failed mid-stream (session loss, cancellation, or deserialization of the row failed).","triggerScenarios":"Thrown at internal/sources/spanner/spanner.go:140 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Inspect the wrapped Spanner error for the root cause","Check the query and session/partition validity","Retry the read on transient session errors"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"8cc6e09de2ad7b8bffc77751799585a1401a48eb","analyzedAt":"2026-09-05T01:10:36.887Z","contentChangedAt":"2026-09-05T01:10:36.887Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}