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

  1. 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.
  2. Read the value generically via get_value(key) rather than an unsupported method.
  3. 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

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


AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07). Data as JSON: /api/errors/522f3ff06e23ce0b. Report an issue: GitHub.