dbt-labs/dbt-core · critical

Oracle

Error message

Oracle

What it means

A `todo!()` panic raised when `metadata_adapter` tries to construct a metadata adapter for the Oracle adapter type. The dispatch match at crates/dbt-adapter/src/adapter/adapter_impl.rs:318-323 has no Oracle implementation, so reaching the arm panics with the message "Oracle". This marks Oracle support as deliberately unfinished in the metadata adapter layer.

Source

Thrown at crates/dbt-adapter/src/adapter/adapter_impl.rs:323

                            Box::new(DuckDBMetadataAdapter::new(engine)) as Box<dyn MetadataAdapter>
                        }
                        LakeCompute => {
                            Box::new(DuckDBMetadataAdapter::new(engine)) as Box<dyn MetadataAdapter>
                        }
                        Fabric => {
                            Box::new(FabricMetadataAdapter::new(engine)) as Box<dyn MetadataAdapter>
                        }
                        ClickHouse => Box::new(ClickHouseMetadataAdapter::new(engine))
                            as Box<dyn MetadataAdapter>,
                        Exasol => {
                            Box::new(ExasolMetadataAdapter::new(engine)) as Box<dyn MetadataAdapter>
                        }
                        Starburst => todo!("Starburst"),
                        Athena => todo!("Athena"),
                        Trino => todo!("Trino"),
                        Datafusion => todo!("Datafusion"),
                        Dremio => todo!("Dremio"),
                        Oracle => todo!("Oracle"),
                    };
                Some(metadata_adapter)
            }
        }
    }

    /// Execute `use warehouse [name]` statement for Snowflake.
    /// For other warehouses, this is noop.
    /// Returns whether the connection changed and must be restored.
    pub fn use_warehouse(
        &self,
        conn: &'_ mut dyn Connection,
        warehouse: String,
        node_id: &str,
        token: CancellationToken,
    ) -> FsResult<bool> {
        match self.inner_adapter() {
            Replay(_, replay) => replay.replay_use_warehouse(conn, warehouse, node_id),

View on GitHub (pinned to 0267ce9170)

Solutions

  1. Switch to an implemented adapter type (Snowflake, Bigquery, Databricks, Redshift, Postgres, DuckDB, Fabric, ClickHouse, Exasol, etc.) until Oracle is supported.
  2. Implement the Oracle arm: replace `Oracle => todo!("Oracle")` with `Box::new(OracleMetadataAdapter::new(engine)) as Box<dyn MetadataAdapter>` (requires writing the Oracle metadata adapter).
  3. Use sidecar mode so schema hydration happens via db_runner and `metadata_adapter` returns None before dispatch.

Example fix

// before
Oracle => todo!("Oracle"),
// after
Oracle => Box::new(OracleMetadataAdapter::new(engine)) as Box<dyn MetadataAdapter>,
Defensive patterns

Strategy: validation

Validate before calling

impl AdapterType {
    pub fn metadata_adapter_implemented(&self) -> bool {
        !matches!(self,
            AdapterType::Starburst | AdapterType::Athena | AdapterType::Trino
            | AdapterType::Datafusion | AdapterType::Dremio | AdapterType::Oracle)
    }
}
// usage: adapter.adapter_type().metadata_adapter_implemented() || return Err("Oracle not supported yet".into());

Type guard

fn oracle_not_ready(t: &AdapterType) -> bool {
    matches!(t, AdapterType::Oracle)
}

Try / catch

let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| adapter.metadata_adapter()));
if result.is_err() {
    eprintln!("Oracle metadata adapter is unimplemented; switch adapter type or use sidecar mode");
}

Prevention

When it happens

Trigger: Calling `metadata_adapter()` on a DbtAdapter whose adapter_type() is AdapterType::Oracle in non-sidecar, non-explicit-mock mode.

Common situations: Running dbt with an Oracle profile before Oracle support is added; migrating an existing Oracle dbt project to this Rust adapter; CI jobs that exercise all adapter types.

Related errors


AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07). Data as JSON: /api/errors/9136b446b50a4f33. Report an issue: GitHub.