databendlabs/databend · error · InvalidInput

{err}

Error message

{err}

What it means

A generic wrapper in parse_azure_params: after building the Azure blob StorageParams, l.connection.check() validates the connection options, and any validation failure it returns is re-wrapped as ErrorKind::InvalidInput with the original message as {err}. It fires when the LOCATION connection options for an Azure endpoint are invalid (e.g. bad account/key combination or unsupported option).

Solutions

  1. Check the location's connection dictionary keys and values; the error fires when connection.check() rejects the supplied azure credentials/settings.
  2. Verify account_name, account_key and endpoint are consistent and non-empty where required.
  3. Pass a correctly configured CONNECTION or STAGE so l.connection.check() succeeds before binding.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/query/sql/src/planner/binder/location.rs:87 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of databendlabs/databend@288d84d76e (2026-09-11). Data as JSON: /api/errors/230e5bead84746d9. Report an issue: GitHub.

Appendix: source

Thrown at src/query/sql/src/planner/binder/location.rs:87

        )
    })?;
    let endpoint = secure_omission(endpoint);
    let sp = StorageParams::Azblob(StorageAzblobConfig {
        endpoint_url: endpoint,
        container: l.name.to_string(),
        account_name: l
            .connection
            .get("account_name")
            .cloned()
            .unwrap_or_default(),
        account_key: l.connection.get("account_key").cloned().unwrap_or_default(),
        root,
        network_config: None,
    });

    l.connection
        .check()
        .map_err(|err| Error::new(ErrorKind::InvalidInput, err.to_string()))?;

    Ok(sp)
}

fn parse_s3_params(l: &mut UriLocation, root: String) -> Result<StorageParams> {
    let endpoint = l
        .connection
        .get("endpoint_url")
        .cloned()
        .unwrap_or_else(|| STORAGE_S3_DEFAULT_ENDPOINT.to_string());
    let endpoint = secure_omission(endpoint);

    // we split those field out to make borrow checker happy.
    let region = l.connection.get("region").cloned().unwrap_or_default();

    let access_key_id = {
        if let Some(id) = l.connection.get("access_key_id") {
            id

View on GitHub (pinned to 288d84d76e)