dbt-labs/dbt-core · error
RelationConfigBaseObject does not support method: {}
Error message
RelationConfigBaseObject does not support method: {} What it means
RelationConfigBaseObject is a minijinja object exposing methods on a relation's config (v2). call_method resolves a fixed set of method names; if the requested method name is not among the supported arms, it panics with unimplemented!("RelationConfigBaseObject does not support method: {name}"). It indicates a Jinja call against relation.config that the v2 config object does not expose.
Source
Thrown at crates/dbt-adapter/src/relation/config_v2.rs:410
if !change_set.is_empty() {
let intermediate_map = Value::from(ValueMap::from([
(
Value::from("requires_full_refresh"),
Value::from(change_set.requires_full_refresh()),
),
(Value::from("changes"), Value::from_object(change_set)),
]));
Value::from_serialize(intermediate_map)
} else {
none_value()
}
} else {
none_value()
};
Ok(val)
}
(_, _) => unimplemented!("RelationConfigBaseObject does not support method: {}", name),
}
}
fn get_value(self: &Arc<Self>, key: &Value) -> Option<Value> {
use AdapterType::Bigquery;
match (self.adapter_type, key.as_str()?) {
(Bigquery, "options") => {
let obj = DynJinjaObject::<(), Self>::new_arc(
"BigqueryMaterializedViewOptions",
(),
self.clone(),
)
.with_method("as_ddl_dict", |obj, _state, _args, _listeners| {
jinja::bigquery_as_ddl_dict(
obj.repr_ref()
.components
.iter()View on GitHub (pinned to 0267ce9170)
Solutions
- Check the method name against the supported set in call_method (crates/dbt-adapter/src/relation/config_v2.rs) and use an exposed accessor instead.
- Read the value generically via get_value(key) rather than an unsupported method.
- If the method is genuinely needed, add a match arm in call_method implementing it for the relevant adapter type.
Example fix
// before (Jinja)
{% set t = relation.config.some_unsupported_method() %}
// after
{% set t = relation.config.get('some_property') %} Defensive patterns
Strategy: validation
Validate before calling
{% if 'method_name' in relation_config %}{% set v = relation_config.method_name() %}{% else %}{% set v = relation_config.get('key') %}{% endif %} Prevention
- Consult the implemented method list in config_v2.rs call_method before calling new methods on relation.config.
- Prefer generic key access (get_value) over named methods for config values.
- When migrating from config v1, map removed accessors to their v2 equivalents.
When it happens
Trigger: From a macro or Jinja context, calling an unsupported method on the RelationConfigBaseObject wrapper — e.g. invoking a relation-config attribute accessor or helper whose (name, args) pair is not implemented in call_method's match.
Common situations: Migrating macros from relation config v1 to v2 where removed/renamed accessors are still called; copying macros between adapters whose config surfaces differ; typos in the method name passed to the config object.
Related errors
- {} relation creation from Jinja values
- group_by with function key
- model_config must be a RelationConfig
- ReplayStatement::bind
- ReplayStatement::bind_stream
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/522f3ff06e23ce0b.
Report an issue: GitHub.