t8y2/dbx · error
unknown method: %s
Error message
unknown method: %s
What it means
The JSON-RPC style dispatch in the driver's server routes a requested method name through a switch; any method not matched falls into the default branch and returns this error. It is a protocol-level rejection indicating the client asked for a method this driver does not implement.
Source
Thrown at agents/drivers/oracle-go/main.go:997
intParam(params, "timeoutSecs"),
)
return map[string]any{"plan": plan, "has_actual_stats": false}, false, err
case "execute_transaction":
result, err := s.executeTransaction(params)
return result, false, err
case "begin_manual_transaction":
return map[string]bool{"ok": true}, false, s.beginManualTransaction(stringParam(params, "schema"))
case "commit_manual_transaction":
return map[string]bool{"ok": true}, false, s.commitManualTransaction()
case "rollback_manual_transaction":
return map[string]bool{"ok": true}, false, s.rollbackManualTransaction()
case "disconnect":
return map[string]bool{"ok": true}, false, s.disconnect()
case "shutdown":
_ = s.disconnect()
return map[string]bool{"ok": true}, true, nil
default:
return nil, false, fmt.Errorf("unknown method: %s", method)
}
}
func (s *server) connect(params connectParams) error {
_ = s.disconnect()
db, err := openConfiguredSessionDB(params, 15*time.Second)
if err != nil {
return err
}
majorVersion, versionKnown := oracleServerMajorVersion(db, 15*time.Second)
s.db = db
s.params = params
s.legacyLOBFetchDeferred = shouldUseLegacyOracleLOBFetch(params, majorVersion, versionKnown)
return nil
}
func openConfiguredSessionDB(params connectParams, timeout time.Duration) (*sql.DB, error) {
db, err := openAndPingDB(params, timeout)View on GitHub (pinned to c0390bff16)
Solutions
- Check the method name spelling and casing against the driver's supported method list (connect, disconnect, shutdown, etc.)
- Align client and driver versions so the client only sends methods this driver version implements
- Log the full request payload to confirm the exact method string being dispatched
- If adding a new method, add a case to the dispatch switch in the server's handle function
Example fix
// before
{"method": "ExecuteQuery", "params": {...}} // unknown method
// after
{"method": "query", "params": {...}} // use an exact supported method name Defensive patterns
Strategy: validation
Validate before calling
var supportedMethods = map[string]bool{"connect": true, "disconnect": true, "shutdown": true /* ... */}
if !supportedMethods[req.Method] { return fmt.Errorf("unsupported method %q for oracle driver", req.Method) } Try / catch
resp, err := call(method, params)
if err != nil && strings.Contains(err.Error(), "unknown method") {
return fmt.Errorf("oracle driver does not implement %q; check driver/client versions", method)
} Prevention
- Keep the client's method registry in sync with the driver version
- Validate method names against a constant list before dispatch
- Pin driver and client to matching versions in deployment
- Test protocol integration after every upgrade
When it happens
Trigger: Sending a request whose method string is misspelled, uses wrong casing, or belongs to a different driver/version (e.g. calling a MySQL-driver-only method against the Oracle driver, or an older/newer protocol method name).
Common situations: Client library and driver binary version mismatch; hand-crafted JSON-RPC requests in testing; method renamed between releases; copy-pasted method name from another driver.
Related errors
AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05).
Data as JSON: /api/errors/18b3b485e748d2fb.
Report an issue: GitHub.