{"record":{"id":"a83f0c79bb5a8acb","repo":"t8y2/dbx","slug":"not-connected-a83f0c","errorCode":null,"errorMessage":"not connected","messagePattern":"not connected","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agents/drivers/oracle-go/main.go","lineNumber":876,"sourceCode":"\t\tvar cp connectParams\n\t\tif err := decodeParams(params, &cp); err != nil {\n\t\t\treturn nil, false, err\n\t\t}\n\t\treturn map[string]bool{\"ok\": true}, false, s.connect(cp)\n\tcase \"test_connection\":\n\t\tvar cp connectParams\n\t\tif err := decodeParams(params, &cp); err != nil {\n\t\t\treturn nil, false, err\n\t\t}\n\t\tdb, err := openAndPingDB(cp, 5*time.Second)\n\t\tif err != nil {\n\t\t\treturn nil, false, err\n\t\t}\n\t\tdefer db.Close()\n\t\treturn map[string]bool{\"ok\": true}, false, nil\n\tcase \"validate_connection\":\n\t\tif s.db == nil {\n\t\t\treturn nil, false, errors.New(\"not connected\")\n\t\t}\n\t\treturn map[string]bool{\"ok\": true}, false, pingDB(s.db, 5*time.Second)\n\tcase \"list_databases\":\n\t\tresult, err := s.listDatabases()\n\t\treturn result, false, err\n\tcase \"list_schemas\":\n\t\tresult, err := s.listSchemas(stringSliceParam(params, \"visible_schemas\"))\n\t\treturn result, false, err\n\tcase \"list_tables\":\n\t\tschema := stringParam(params, \"schema\")\n\t\tresult, err := s.listTables(schema, metadataListConstraintsFromParams(params))\n\t\treturn result, false, err\n\tcase \"list_objects\":\n\t\tschema := stringParam(params, \"schema\")\n\t\tresult, err := s.listObjects(schema, metadataListConstraintsFromParams(params))\n\t\treturn result, false, err\n\tcase \"completion_assistant_search_v1\":\n\t\tvar request completionAssistantRequest","sourceCodeStart":858,"sourceCodeEnd":894,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/oracle-go/main.go#L858-L894","documentation":"The Oracle server's validate_connection handler requires an established database handle (s.db). If the server was never connected, or the connection was closed and s.db set to nil, validation cannot proceed and returns 'not connected' before attempting a ping.","triggerScenarios":"validate_connection dispatched when s.db == nil: before any connect call succeeded, or after a close/disconnect that nulled s.db.","commonSituations":"Health probes running before app init completes, reconnect logic that cleared s.db on error without re-establishing, calling validate on a fresh server instance.","solutions":["Issue connect (and confirm it succeeds) before validate_connection.","After a disconnection, reconnect first; pingDB only works on a live *sql.DB.","Track connection state in the caller and skip validation when known disconnected."],"exampleFix":"// before\n_, err := dispatch(\"validate_connection\", nil) // never connected\n// after\nif _, err := dispatch(\"connect\", connectParams); err != nil { return err }\n_, err := dispatch(\"validate_connection\", nil)","handlingStrategy":"try-catch","validationCode":"if s.db == nil {\n    return errors.New(\"oracle: not connected; call connect first\")\n}","typeGuard":"func connected(s *server) bool { return s != nil && s.db != nil }","tryCatchPattern":"_, err := dispatch(\"validate_connection\", nil)\nif err != nil && err.Error() == \"not connected\" {\n    if _, cerr := dispatch(\"connect\", connectParams); cerr != nil { return cerr }\n    _, err = dispatch(\"validate_connection\", nil)\n}\nreturn err","preventionTips":["Sequence health checks after successful connect","Reconnect on 'not connected' rather than repeatedly validating","Null out s.db only in close, and recreate before next use"],"tags":["oracle","connection","lifecycle","state"],"backgroundTag":"not-connected","analyzedSha":"c0390bff16418b651f4728520d99adf8ce48829a","analyzedAt":"2026-09-05T23:05:10.900Z","contentChangedAt":"2026-09-05T23:05:10.900Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}