{"record":{"id":"9136b446b50a4f33","repo":"dbt-labs/dbt-core","slug":"oracle-9136b4","errorCode":null,"errorMessage":"Oracle","messagePattern":"Oracle","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"crates/dbt-adapter/src/adapter/adapter_impl.rs","lineNumber":323,"sourceCode":"                            Box::new(DuckDBMetadataAdapter::new(engine)) as Box<dyn MetadataAdapter>\n                        }\n                        LakeCompute => {\n                            Box::new(DuckDBMetadataAdapter::new(engine)) as Box<dyn MetadataAdapter>\n                        }\n                        Fabric => {\n                            Box::new(FabricMetadataAdapter::new(engine)) as Box<dyn MetadataAdapter>\n                        }\n                        ClickHouse => Box::new(ClickHouseMetadataAdapter::new(engine))\n                            as Box<dyn MetadataAdapter>,\n                        Exasol => {\n                            Box::new(ExasolMetadataAdapter::new(engine)) as Box<dyn MetadataAdapter>\n                        }\n                        Starburst => todo!(\"Starburst\"),\n                        Athena => todo!(\"Athena\"),\n                        Trino => todo!(\"Trino\"),\n                        Datafusion => todo!(\"Datafusion\"),\n                        Dremio => todo!(\"Dremio\"),\n                        Oracle => todo!(\"Oracle\"),\n                    };\n                Some(metadata_adapter)\n            }\n        }\n    }\n\n    /// Execute `use warehouse [name]` statement for Snowflake.\n    /// For other warehouses, this is noop.\n    /// Returns whether the connection changed and must be restored.\n    pub fn use_warehouse(\n        &self,\n        conn: &'_ mut dyn Connection,\n        warehouse: String,\n        node_id: &str,\n        token: CancellationToken,\n    ) -> FsResult<bool> {\n        match self.inner_adapter() {\n            Replay(_, replay) => replay.replay_use_warehouse(conn, warehouse, node_id),","sourceCodeStart":305,"sourceCodeEnd":341,"githubUrl":"https://github.com/dbt-labs/dbt-core/blob/0267ce9170576975b76b64ce856b2e5848e96617/crates/dbt-adapter/src/adapter/adapter_impl.rs#L305-L341","documentation":"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.","triggerScenarios":"Calling `metadata_adapter()` on a DbtAdapter whose adapter_type() is AdapterType::Oracle in non-sidecar, non-explicit-mock mode.","commonSituations":"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.","solutions":["Switch to an implemented adapter type (Snowflake, Bigquery, Databricks, Redshift, Postgres, DuckDB, Fabric, ClickHouse, Exasol, etc.) until Oracle is supported.","Implement the Oracle arm: replace `Oracle => todo!(\"Oracle\")` with `Box::new(OracleMetadataAdapter::new(engine)) as Box<dyn MetadataAdapter>` (requires writing the Oracle metadata adapter).","Use sidecar mode so schema hydration happens via db_runner and `metadata_adapter` returns None before dispatch."],"exampleFix":"// before\nOracle => todo!(\"Oracle\"),\n// after\nOracle => Box::new(OracleMetadataAdapter::new(engine)) as Box<dyn MetadataAdapter>,","handlingStrategy":"validation","validationCode":"impl AdapterType {\n    pub fn metadata_adapter_implemented(&self) -> bool {\n        !matches!(self,\n            AdapterType::Starburst | AdapterType::Athena | AdapterType::Trino\n            | AdapterType::Datafusion | AdapterType::Dremio | AdapterType::Oracle)\n    }\n}\n// usage: adapter.adapter_type().metadata_adapter_implemented() || return Err(\"Oracle not supported yet\".into());","typeGuard":"fn oracle_not_ready(t: &AdapterType) -> bool {\n    matches!(t, AdapterType::Oracle)\n}","tryCatchPattern":"let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| adapter.metadata_adapter()));\nif result.is_err() {\n    eprintln!(\"Oracle metadata adapter is unimplemented; switch adapter type or use sidecar mode\");\n}","preventionTips":["Check adapter type support before configuring an Oracle target.","Fail fast at profile validation rather than mid-run.","Prefer engines with implemented metadata adapters (Snowflake, Postgres, etc.) where possible.","Subscribe to project milestones for Oracle support."],"tags":["unimplemented","todo-panic","adapter","metadata","oracle"],"backgroundTag":"method-not-implemented","analyzedSha":"0267ce9170576975b76b64ce856b2e5848e96617","analyzedAt":"2026-09-07T21:53:39.732Z","contentChangedAt":"2026-09-07T21:53:39.732Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}