{"record":{"id":"11711c0bba9e35dc","repo":"googleapis/mcp-toolbox","slug":"errors-encountered-when-converting-values-w-11711c","errorCode":null,"errorMessage":"errors encountered when converting values: %w","messagePattern":"errors encountered when converting values: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/sources/oceanbase/oceanbase.go","lineNumber":147,"sourceCode":"\n\tout := []any{}\n\tfor results.Next() {\n\t\terr := results.Scan(values...)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"unable to parse row: %w\", err)\n\t\t}\n\t\tvMap := make(map[string]any)\n\t\tfor i, name := range cols {\n\t\t\tval := rawValues[i]\n\t\t\tif val == nil {\n\t\t\t\tvMap[name] = nil\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// oceanbase uses mysql driver\n\t\t\tvMap[name], err = mysqlcommon.ConvertToType(colTypes[i], val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"errors encountered when converting values: %w\", err)\n\t\t\t}\n\t\t}\n\t\tout = append(out, vMap)\n\t}\n\n\tif err := results.Err(); err != nil {\n\t\treturn nil, fmt.Errorf(\"errors encountered during row iteration: %w\", err)\n\t}\n\n\treturn out, nil\n}\n\nfunc initOceanBaseConnectionPool(ctx context.Context, tracer trace.Tracer, name, host, port, user, pass, dbname, queryTimeout string) (*sql.DB, error) {\n\t_, span := sources.InitConnectionSpan(ctx, tracer, SourceType, name)\n\tdefer span.End()\n\n\tdsn := fmt.Sprintf(\"%s:%s@tcp(%s:%s)/%s?parseTime=true\", user, pass, host, port, dbname)\n","sourceCodeStart":129,"sourceCodeEnd":165,"githubUrl":"https://github.com/googleapis/mcp-toolbox/blob/8cc6e09de2ad7b8bffc77751799585a1401a48eb/internal/sources/oceanbase/oceanbase.go#L129-L165","documentation":"After scanning, RunSQL converts each raw driver value to a Go type via mysqlcommon.ConvertToType using the column's type; if that conversion fails for any column, the whole RunSQL call fails with this wrapped error.","triggerScenarios":"RunSQL returns rows whose driver values cannot be mapped by mysqlcommon.ConvertToType for the detected column type (unsupported type byte or malformed value).","commonSituations":"Legacy MySQL-driver type codes from OceanBase that the shared converter does not handle; corrupted or out-of-range temporal/numeric values; driver version mismatch between column type detection and converter support.","solutions":["Inspect the wrapped conversion error to find the offending column and type","Cast the problematic column in SQL to a well-supported type (CHAR, DECIMAL, DATETIME)","Pin/upgrade the mysql driver so type codes match what ConvertToType expects","Handle the column manually by selecting it as a string"],"exampleFix":"// before\nSELECT created_ts FROM events;\n// after\nSELECT DATE_FORMAT(created_ts, '%Y-%m-%d %H:%i:%s') AS created_ts FROM events;","handlingStrategy":"validation","validationCode":"// ensure only converter-friendly types are selected\nfor _, col := range []string{\"bit_col\", \"geom\"} {\n    if strings.Contains(sql, col) {\n        sql = strings.Replace(sql, col, \"CAST(\"+col+\" AS CHAR)\", 1)\n    }\n}","typeGuard":null,"tryCatchPattern":"out, err := src.RunSQL(ctx, sql)\nif err != nil && strings.Contains(err.Error(), \"converting values\") {\n    // retry with string-cast columns\n}","preventionTips":["Avoid BIT/JSON/spatial columns in tool output or cast to CHAR","Align driver version with converter expectations","Smoke-test each query's result types","Prefer explicit type names in SELECT lists"],"tags":["database","type-conversion","oceanbase","mysql"],"backgroundTag":"value-type-conversion-failed","analyzedSha":"8cc6e09de2ad7b8bffc77751799585a1401a48eb","analyzedAt":"2026-09-05T01:10:36.887Z","contentChangedAt":"2026-09-05T01:10:36.887Z","schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}