{"record":{"id":"ed5e86c0a2a43c3a","repo":"dbt-labs/dbt-core","slug":"type-conversion-from-table-column-in-mockadapter","errorCode":null,"errorMessage":"type conversion from table column in MockAdapter","messagePattern":"type conversion from table column in MockAdapter","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/dbt-adapter/src/adapter/adapter_impl.rs","lineNumber":2357,"sourceCode":"            ) => {\n                if quote_config.unwrap_or(true) {\n                    Ok(self.quote(column))\n                } else {\n                    Ok(column.to_string())\n                }\n            }\n        }\n    }\n\n    /// BaseAdapter https://github.com/dbt-labs/dbt-adapters/blob/0efd8d3d1081e1ab43e38797d5104f7b424a6284/dbt-adapters/src/dbt/adapters/base/impl.py#L1231\n    pub fn convert_type(\n        &self,\n        state: &State,\n        table: Arc<AgateTable>,\n        col_idx: i64,\n    ) -> AdapterResult<String> {\n        if self.mock_state().is_some() {\n            unimplemented!(\"type conversion from table column in MockAdapter\")\n        }\n        let batch = table.original_record_batch();\n        let schema = batch.schema();\n        let data_type = schema.field(col_idx as usize).data_type();\n\n        let data_type = match data_type {\n            dt if dt.is_null() => &DataType::Int32,\n            DataType::Float64 => {\n                let is_int = batch\n                    .column(col_idx as usize)\n                    .as_any()\n                    .downcast_ref::<arrow_array::Float64Array>()\n                    .is_some_and(try_to_int_col);\n                if is_int { &DataType::Int64 } else { data_type }\n            }\n            dt => dt,\n        };\n","sourceCodeStart":2339,"sourceCodeEnd":2375,"githubUrl":"https://github.com/dbt-labs/dbt-core/blob/0267ce9170576975b76b64ce856b2e5848e96617/crates/dbt-adapter/src/adapter/adapter_impl.rs#L2339-L2375","documentation":"AdapterImpl::convert_type panics when called on a MockAdapter. This method maps an Arrow field DataType from an AgateTable column into the adapter's SQL type string; the mock adapter has no meaningful type-mapping to offer, so the case is explicitly unimplemented.","triggerScenarios":"Calling convert_type(state, table, col_idx) on an adapter in mock mode — typically during column schema rendering of loaded AgateTables under parse/mock runs.","commonSituations":"Seed or model column rendering pipelines running with a mock adapter; tests that load table data into AgateTable but never execute against a real adapter.","solutions":["Use a real adapter when type conversion of table columns is needed.","Avoid code paths that render column DDL/types from AgateTables in mock mode.","Extend the mock branch in convert_type to return a generic type (e.g. from the Arrow schema) instead of panicking."],"exampleFix":"// before\nif self.mock_state().is_some() {\n    unimplemented!(\"type conversion from table column in MockAdapter\")\n}\n// after\nif self.mock_state().is_some() {\n    return Ok(default_type_for(data_type));\n}","handlingStrategy":"validation","validationCode":"if adapter.is_mock() {\n    return Err(\"convert_type requires a real adapter\".into());\n}","typeGuard":"fn supports_type_conversion(adapter: &AdapterImpl) -> bool { adapter.mock_state().is_none() }","tryCatchPattern":null,"preventionTips":["Do not render column DDL/types from AgateTables under a mock adapter","Use a real adapter for seeds or any flow that needs column type mapping","Keep mock-mode tests limited to parsing-level assertions"],"tags":["rust","adapter","mock","type-conversion","unimplemented"],"backgroundTag":"type-mismatch","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"}