dbt-labs/dbt-core · error
Starburst
Error message
Starburst
What it means
A `todo!()` panic in `ColumnBuilder::build` (crates/dbt-adapter/src/column/column_builder.rs:36). The method maps an adapter type to a column-building strategy, and the Starburst arm was never implemented. Building column metadata from an Arrow field/type_ops while using the Starburst adapter panics with the message 'Starburst'.
Source
Thrown at crates/dbt-adapter/src/column/column_builder.rs:36
impl ColumnBuilder {
pub fn new(adapter_type: AdapterType) -> Self {
Self { adapter_type }
}
pub fn build(&self, field: &FieldRef, type_ops: &dyn TypeOps) -> AdapterResult<Column> {
use AdapterType::*;
match self.adapter_type {
Snowflake => Ok(Self::build_snowflake(field, type_ops)),
Bigquery => Ok(Self::build_bigquery(field, type_ops)),
Databricks | Spark => Ok(Self::build_databricks(field, type_ops)),
Redshift => Ok(Self::build_redshift(field, type_ops)),
Postgres | Salesforce | DuckDB | LakeCompute => {
Ok(Self::build_postgres_like(field, type_ops))
}
Fabric => Ok(Self::build_fabric(field, type_ops)),
ClickHouse => Self::build_clickhouse(field, type_ops),
Exasol => Ok(Self::build_exasol(field, type_ops)),
Starburst => todo!("Starburst"),
Athena => todo!("Athena"),
Trino => todo!("Trino"),
Dremio => todo!("Dremio"),
Oracle => todo!("Oracle"),
Datafusion => todo!("Datafusion"),
}
}
pub fn build_from_parts(
&self,
name: String,
dtype: String,
char_size: Option<u32>,
numeric_precision: Option<u64>,
numeric_scale: Option<u64>,
mode: Option<BigqueryColumnMode>,
) -> Column {
use AdapterType::*;View on GitHub (pinned to 0267ce9170)
Solutions
- Use a currently supported adapter (Postgres/DuckDB/LakeCompute-like, Fabric, ClickHouse, or Exasol) for schema-to-column workflows.
- Implement the Starburst arm by delegating to `build_postgres_like` (Trino/Starburst types are PostgreSQL-like) in column_builder.rs:36.
- Gate Starburst usage behind a feature flag until the builder is implemented so the failure is a clean error, not a panic.
Example fix
// before
Starburst => todo!("Starburst"),
// after
Starburst | Trino => Ok(Self::build_postgres_like(field, type_ops)), Defensive patterns
Strategy: type-guard
Validate before calling
const SUPPORTED: &[AdapterType] = &[AdapterType::Postgres, AdapterType::Salesforce, AdapterType::DuckDB, AdapterType::LakeCompute, AdapterType::Fabric, AdapterType::ClickHouse, AdapterType::Exasol];
if !SUPPORTED.contains(&adapter) {
return Err(anyhow!("column building not implemented for {:?}", adapter));
} Type guard
fn build_supported(t: AdapterType) -> bool {
matches!(t, Postgres | Salesforce | DuckDB | LakeCompute | Fabric | ClickHouse | Exasol)
} Try / catch
let res = std::panic::catch_unwind(AssertUnwindSafe(|| ColumnBuilder::new(adapter).build(field, type_ops)));
if res.is_err() { eprintln!("column builder unimplemented for this adapter"); } Prevention
- Verify the adapter arm exists in ColumnBuilder::build before enabling a new adapter profile
- Share build_postgres_like for Trino-family adapters (Starburst/Trino/Athena) when contributing support
- Add exhaustiveness tests that iterate all AdapterType variants through build
- Prefer a typed unsupported-adapter error over todo!() in new adapter code
When it happens
Trigger: Any call path into `ColumnBuilder::build` — schema_to_columns, get_column_schema_from_query, update_node_columns — while the adapter type is Starburst. E.g. catalog/query-result schema introspection on a Starburst connection.
Common situations: Running `dbt docs generate` or query-result column extraction against a Starburst adapter before the builder arm was added. Developers enabling the Starburst adapter for testing hit this on the first schema query.
Related errors
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/f3d313d34a607434.
Report an issue: GitHub.