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

  1. Check the method name spelling and casing against the driver's supported method list (connect, disconnect, shutdown, etc.)
  2. Align client and driver versions so the client only sends methods this driver version implements
  3. Log the full request payload to confirm the exact method string being dispatched
  4. 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

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.