dbt-labs/dbt-core · error
Salesforce column creation not implemented yet
Error message
Salesforce column creation not implemented yet
What it means
A `todo!()` panic in `ColumnBuilder::build_from_parts` (column_builder.rs:106) for the Salesforce adapter. The manual Column construction path (used when precision/scale are supplied explicitly) has no Salesforce arm, so constructing a Column for Salesforce panics with 'Salesforce column creation not implemented yet'.
Source
Thrown at crates/dbt-adapter/src/column/column_builder.rs:106
// TODO: BigQuery fields
Bigquery => Column::new_bigquery(name, dtype, &[], mode.unwrap_or_default()),
Redshift => Column::new(
Redshift,
name,
dtype,
char_size,
numeric_precision,
numeric_scale,
),
Databricks | Spark => Column::new(
self.adapter_type,
name,
dtype,
char_size,
None, // numeric_precision
None, // numeric_scale
),
Salesforce => todo!("Salesforce column creation not implemented yet"),
ClickHouse => Column::new(
ClickHouse,
name,
dtype,
char_size,
numeric_precision,
numeric_scale,
),
Exasol => Column::new(
Exasol,
name,
dtype,
char_size,
numeric_precision,
numeric_scale,
),
Starburst => todo!("Starburst"),
Athena => todo!("Athena"),View on GitHub (pinned to 0267ce9170)
Solutions
- Avoid the Salesforce adapter for workflows that rebuild columns from parts until implemented.
- Implement the Salesforce arm in column_builder.rs:106, choosing appropriate precision/scale semantics for Salesforce (SOQL decimal precision).
- Replace `todo!()` with a clear unsupported-adapter error so callers can handle it.
Example fix
// before
Salesforce => todo!("Salesforce column creation not implemented yet"),
// after
Salesforce => Ok(Column::new(
Salesforce, name, dtype, char_size, numeric_precision, numeric_scale,
)), Defensive patterns
Strategy: type-guard
Validate before calling
if adapter == AdapterType::Salesforce {
return Err(anyhow!("Salesforce column creation is not implemented; cannot build_from_parts"));
} Type guard
fn build_from_parts_supported(t: AdapterType) -> bool {
!matches!(t, AdapterType::Salesforce | AdapterType::Starburst | AdapterType::Athena | AdapterType::Trino | AdapterType::Dremio | AdapterType::Oracle | AdapterType::Datafusion)
} Try / catch
let res = std::panic::catch_unwind(AssertUnwindSafe(|| builder.build_from_parts(name, dtype, char_size, p, s)));
match res { Ok(c) => c, Err(_) => Err(anyhow!("unsupported adapter for build_from_parts")) } Prevention
- Verify the adapter arm exists in build_from_parts before constructing columns from explicit precision/scale
- Avoid Salesforce for relation-column reconstruction workflows
- Contribute a Salesforce arm with SOQL-appropriate precision semantics
- Test all AdapterType variants against build_from_parts in CI
When it happens
Trigger: Calling the public `build_from_parts(name, dtype, char_size, numeric_precision, numeric_scale)` with adapter type Salesforce — e.g. when relation/column metadata is rebuilt with explicit numeric precision from a schema definition.
Common situations: Column metadata reconstruction on a Salesforce adapter profile where a parsed schema carries numeric_precision/scale; also from adapter-coverage tests that sweep all adapter variants through build_from_parts.
Related errors
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/52bbff16e584099f.
Report an issue: GitHub.