databendlabs/databend · error
not implemented
Error message
not implemented
What it means
Databend's FlightSQL service does not implement `get_flight_info_xdbc_type_info`, so hitting the `CommandGetXdbcTypeInfo` RPC endpoint panics with `unimplemented!()`. The gRPC call reaches the handler but has no backing logic.
Solutions
- Use a FlightSQL client path that does not call getXdbcTypeInfo (or tolerate the failure in the client)
- Return a predefined FlightInfo describing supported types instead of unimplemented!()
- Upgrade Databend to a version where XDBC type info is implemented
- Return Status::unimplemented from the handler so clients get a clean gRPC error instead of a server panic
Example fix
// before
async fn get_flight_info_xdbc_type_info(&self, _q: CommandGetXdbcTypeInfo, _r: Request<FlightDescriptor>)
-> Result<Response<FlightInfo>, Status> { unimplemented!() }
// after
async fn get_flight_info_xdbc_type_info(&self, _q: CommandGetXdbcTypeInfo, _r: Request<FlightDescriptor>)
-> Result<Response<FlightInfo>, Status> {
Err(Status::unimplemented("XDBC type info is not supported"))
} Defensive patterns
Strategy: try-catch
Try / catch
match flight_sql_client.get_xdbc_type_info(desc).await {
Ok(resp) => resp,
Err(Status { code: Code::Unimplemented, .. }) | Err(_) if is_unimplemented_panic(&e) => fallback_to_sql_type_query(),
Err(e) => return Err(e),
} Prevention
- Don't call getXdbcTypeInfo against Databend FlightSQL
- Discover type support via SQL (information_schema) instead
- Pin client features that avoid XDBC metadata RPCs
When it happens
Trigger: A FlightSQL client issues CommandGetXdbcTypeInfo (XDBC type-info metadata request) against the Databend FlightSQL endpoint.
Common situations: JDBC/ODBC-style drivers or tools (e.g. Dremio/Arrow Flight SQL clients) that request XDBC type metadata on connect; schema browsers using FlightSQL.
Related errors
AI-assisted analysis of databendlabs/databend@288d84d76e (2026-09-11).
Data as JSON: /api/errors/45c8527669af3455.
Report an issue: GitHub.
Appendix: source
Thrown at src/query/service/src/servers/flight_sql/flight_sql_service/service.rs:655
)));
}
}
}
Ok(())
}
#[async_backtrace::framed]
async fn register_sql_info(&self, id: i32, result: &SqlInfo) {
info!("register_sql_info({id}, {result:?})");
}
/// Get a FlightInfo to extract information about the supported XDBC types.
async fn get_flight_info_xdbc_type_info(
&self,
_query: CommandGetXdbcTypeInfo,
_request: Request<FlightDescriptor>,
) -> std::result::Result<Response<FlightInfo>, Status> {
unimplemented!()
}
/// Get a FlightDataStream containing the data related to the supported XDBC types.
async fn do_get_xdbc_type_info(
&self,
_query: CommandGetXdbcTypeInfo,
_request: Request<Ticket>,
) -> std::result::Result<Response<<Self as FlightService>::DoGetStream>, Status> {
unimplemented!()
}
async fn get_flight_info_substrait_plan(
&self,
_query: CommandStatementSubstraitPlan,
_request: Request<FlightDescriptor>,
) -> std::result::Result<Response<FlightInfo>, Status> {
unimplemented!()
}View on GitHub (pinned to 288d84d76e)