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

  1. Use a FlightSQL client path that does not call getXdbcTypeInfo (or tolerate the failure in the client)
  2. Return a predefined FlightInfo describing supported types instead of unimplemented!()
  3. Upgrade Databend to a version where XDBC type info is implemented
  4. 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

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)