{"record":{"id":"70d64a05e8509a3a","repo":"plandex-ai/plandex","slug":"unsupported-data-type-t-70d64a","errorCode":null,"errorMessage":"unsupported data type: %T","messagePattern":"unsupported data type: %T","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app/shared/org_user_config.go","lineNumber":46,"sourceCode":"\tif src == nil {\n\t\t*p = OrgUserConfig{}\n\t\treturn nil\n\t}\n\tswitch s := src.(type) {\n\tcase []byte:\n\t\tif len(s) == 0 {\n\t\t\t*p = OrgUserConfig{}\n\t\t\treturn nil\n\t\t}\n\t\treturn json.Unmarshal(s, p)\n\tcase string:\n\t\tif s == \"\" {\n\t\t\t*p = OrgUserConfig{}\n\t\t\treturn nil\n\t\t}\n\t\treturn json.Unmarshal([]byte(s), p)\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported data type: %T\", src)\n\t}\n}\n\nfunc (p *OrgUserConfig) Value() (driver.Value, error) {\n\tif p == nil {\n\t\treturn nil, nil\n\t}\n\treturn json.Marshal(p)\n}\n","sourceCodeStart":28,"sourceCodeEnd":56,"githubUrl":"https://github.com/plandex-ai/plandex/blob/e2d772072efadbe41d2946d97d79be55532dbab5/app/shared/org_user_config.go#L28-L56","documentation":"OrgUserConfig implements sql.Scanner; its Scan only handles []byte, string, and an empty-string special case, and rejects everything else (including nil/NULL) with this error. It fires when the DB column value isn't JSON text.","triggerScenarios":"Scanning a NULL org_user_config column (driver passes nil -> default branch); driver returning non-text types for the column; wrong column mapped to the OrgUserConfig field.","commonSituations":"Rows created before the config column was populated (NULL defaults); schema or driver changes altering the delivered Go type; ORM mapping mistakes pointing Scan at an int/bool column.","solutions":["COALESCE the column in SQL so NULL never reaches Scan.","Add a nil case assigning OrgUserConfig{} before the default branch.","Confirm the column type is JSONB/TEXT so the driver yields []byte/string.","Audit ORM/struct tags to make sure Scan is bound to the right column."],"exampleFix":"// before\ndefault:\n    return fmt.Errorf(\"unsupported data type: %T\", src)\n// after\ncase nil:\n    *p = OrgUserConfig{}\n    return nil\ndefault:\n    return fmt.Errorf(\"unsupported data type: %T\", src)","handlingStrategy":"type-guard","validationCode":"var cfg OrgUserConfig\nerr := db.QueryRow(\"SELECT COALESCE(org_user_config, '{}'::jsonb) FROM org_users WHERE id=$1\", id).Scan(&cfg)","typeGuard":"func scanableColumnValue(src any) bool {\n    switch src.(type) {\n    case []byte, string:\n        return true\n    default:\n        return false\n    }\n}","tryCatchPattern":"var cfg OrgUserConfig\nif err := rows.Scan(&cfg); err != nil {\n    if strings.Contains(err.Error(), \"unsupported data type\") {\n        cfg = OrgUserConfig{} // zero-value fallback\n    } else {\n        return err\n    }\n}","preventionTips":["Add a nil branch to OrgUserConfig.Scan.","Apply NOT NULL DEFAULT '{}' to org_user_config columns.","COALESCE the column in raw SQL selects.","Test Scan paths for NULL, empty string, and valid JSON."],"tags":["database","go","sql-scan","type-mismatch"],"backgroundTag":"sql-scan-type-mismatch","analyzedSha":"e2d772072efadbe41d2946d97d79be55532dbab5","analyzedAt":"2026-09-05T20:56:53.631Z","contentChangedAt":"2026-09-05T20:56:53.631Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}