dbt-labs/dbt-core · error

Unknown method on ResultObject

Error message

Unknown method on ResultObject: '{method}'

What it means

Catch-all arm of the Jinja method dispatch on ResultObject: only the 'keys' method is implemented (deliberately retained for dbt-external-table's stage_external_sources macro); any other method invocation raises this UnknownMethod error. Data access should go through the response/table/data attributes instead.

Solutions

  1. Use attribute access (response, table, data) or the 'keys' method
  2. Fix the method name in the template
  3. Extend the match arm if a new accessor is required — but keep 'keys' for dbt-external-table compatibility
Defensive patterns

Strategy: type-guard

When it happens

Trigger: Thrown at crates/dbt-adapter/src/response.rs:415 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at crates/dbt-adapter/src/response.rs:415

            data,
        }
    }
}

impl Object for ResultObject {
    fn call_method(
        self: &Arc<Self>,
        _state: &State<'_, '_>,
        method: &str,
        _args: &[Value],
        _listeners: &[Rc<dyn RenderingEventListener>],
    ) -> Result<Value, minijinja::Error> {
        // NOTE: the `keys` method is used by the `stage_external_sources` macro in
        // `dbt-external-table`. Don't delete this unless the external package is fixed.
        if method == "keys" {
            Ok(Value::from_iter(["response", "table", "data"]))
        } else {
            Err(minijinja::Error::new(
                minijinja::ErrorKind::UnknownMethod,
                format!("Unknown method on ResultObject: '{method}'"),
            ))
        }
    }

    fn get_value(self: &Arc<Self>, key: &Value) -> Option<Value> {
        match key.as_str()? {
            "table" => self
                .table
                .as_ref()
                .map(|t| Value::from_object((*t).clone())),
            "data" => self.data.clone(),
            "response" => Some(Value::from_object(self.response.clone())),
            _ => Some(Value::UNDEFINED), // Only return empty at Parsetime TODO fix later
        }
    }

View on GitHub (pinned to 0267ce9170)