{"record":{"id":"188e7845c965a37a","repo":"t8y2/dbx","slug":"agent-is-not-connected-188e78","errorCode":null,"errorMessage":"agent is not connected","messagePattern":"agent is not connected","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agents/drivers/xugu/main.go","lineNumber":1705,"sourceCode":"\t\tfor _, item := range items {\n\t\t\titem = strings.TrimSpace(item)\n\t\t\tif item != \"\" {\n\t\t\t\tresult = append(result, item)\n\t\t\t}\n\t\t}\n\t\treturn result\n\t}\n\treturn []string{raw}\n}\n\nfunc parsePort(value string) int {\n\tport, _ := strconv.Atoi(value)\n\treturn port\n}\n\nfunc (s *server) requireDB() (*sql.DB, error) {\n\tif s.db == nil {\n\t\treturn nil, errors.New(\"agent is not connected\")\n\t}\n\treturn s.db, nil\n}\n\nfunc (s *server) useDatabase(database string) error {\n\tdatabase = strings.TrimSpace(database)\n\tif database == \"\" {\n\t\treturn nil\n\t}\n\t// Skip only when the live session is already on this database.\n\tif s.currentDatabase != \"\" && strings.EqualFold(database, s.currentDatabase) {\n\t\treturn nil\n\t}\n\t// Fresh session still on connect-time DB: avoid a redundant USE.\n\tif s.currentDatabase == \"\" {\n\t\tif configured := configuredDatabaseName(s.params); configured != \"\" && strings.EqualFold(database, configured) {\n\t\t\ts.currentDatabase = configured\n\t\t\treturn nil","sourceCodeStart":1687,"sourceCodeEnd":1723,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/xugu/main.go#L1687-L1723","documentation":"The xugu agent's requireDB() guard returns this when s.db is nil — an RPC needing the database was issued with no live connection. It is the user-facing counterpart of validateConnection's 'not connected', phrased to make clear the agent (not the server) lacks the connection.","triggerScenarios":"Any RPC routed through requireDB() (query, DDL, useDatabase, metadata) executed before connect or after the connection handle was cleared.","commonSituations":"Client assumed a persistent session after agent restart; disconnect raced a queued RPC; connection dropped server-side and the agent cleared its handle.","solutions":["Call connect before issuing any database RPCs","Re-open the session and reconnect after an agent restart","Handle this error by reconnecting transparently in the client driver wrapper"],"exampleFix":"// before\nres, err := agent.Query(ctx, q)\n// after\nif _, err := agent.RequireDB(); err != nil { if err := agent.Connect(ctx, cp); err != nil { return err } }\nres, err := agent.Query(ctx, q)","handlingStrategy":"try-catch","validationCode":"if s.db == nil { return errors.New(\"agent is not connected\") }","typeGuard":"func hasDB(s *server) bool { return s.db != nil }","tryCatchPattern":"if _, err := agent.RequireDB(); err != nil {\n    if strings.Contains(err.Error(), \"agent is not connected\") {\n        if cerr := agent.Connect(ctx, cp); cerr != nil { return cerr }\n    }\n}","preventionTips":["Serialize connect/disconnect against in-flight RPCs","Auto-reconnect on this error in the client wrapper","Detect agent restarts via session invalidation and reconnect"],"tags":["connection-state","database","guard"],"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"}