dbt-labs/dbt-core · error · minijinja::Error::InvalidOperation
In adapter.dispatch, got a macro name of "{macro_name}", but
Error message
In adapter.dispatch, got a macro name of "{macro_name}", but "." is not a valid macro name component. Did you mean `adapter.dispatch("{parts[1]}", macro_namespace="{parts[0]}")`? What it means
`adapter.dispatch` resolves macros at runtime, and macro names may not contain a dot. When a name like `package.macro_name` is passed, the library raises `InvalidOperation` and suggests the correct form: pass the bare macro name positionally and the package via the `macro_namespace` keyword argument. This mirrors upstream dbt's dispatch validation.
Source
Thrown at crates/dbt-adapter/src/adapter/mod.rs:1852
///
/// https://github.com/dbt-labs/dbt-adapters/blob/main/dbt-adapters/src/dbt/adapters/base/impl.py#L226
///
/// ```python
/// def dispatch(
/// self,
/// macro_name: str,
/// macro_namespace: Optional[str] = None
/// ) -> DispatchObject
/// ```
pub fn dispatch(&self, state: &State, args: &[Value]) -> Result<Value, minijinja::Error> {
let iter = ArgsIter::new("dispatch", &["macro_name"], args);
let macro_name = iter.next_arg::<&str>()?;
let macro_namespace = iter.next_kwarg::<Option<&str>>("macro_namespace")?;
iter.finish()?;
if macro_name.contains('.') {
let parts: Vec<&str> = macro_name.split('.').collect();
return Err(minijinja::Error::new(
minijinja::ErrorKind::InvalidOperation,
format!(
"In adapter.dispatch, got a macro name of \"{}\", but \".\" is not a valid macro name component. Did you mean `adapter.dispatch(\"{}\", macro_namespace=\"{}\")`?",
macro_name, parts[1], parts[0]
),
));
}
Ok(Value::from_object(DispatchObject {
macro_name: macro_name.to_string(),
package_name: macro_namespace.map(|s| s.to_string()),
strict: false,
auto_execute: false,
context: Some(state.get_base_context()),
}))
}
/// Nest column data types for BigQuery STRUCT/ARRAY types.View on GitHub (pinned to 0267ce9170)
Solutions
- Split the qualified name: pass the part after the dot as the first argument.
- Pass the part before the dot as `macro_namespace='...'`.
- Search the project for `adapter.dispatch(` calls containing a `.` and fix them all.
- If the dot was accidental, remove it so the name is a bare macro name.
Example fix
// before (Jinja)
{% set my_macro = adapter.dispatch('my_package.my_macro') %}
// after
{% set my_macro = adapter.dispatch('my_macro', macro_namespace='my_package') %} Defensive patterns
Strategy: validation
Validate before calling
{# Jinja #}
{% if '.' in macro_name %}
{% set parts = macro_name.split('.') %}
{% set macro_name, ns = parts[1], parts[0] %}
{% endif %}
{% do adapter.dispatch(macro_name, macro_namespace=ns) %} Type guard
function isValidMacroName(name) { return typeof name === 'string' && !name.includes('.'); } Try / catch
{% try %}
{% set fn = adapter.dispatch(macro_name) %}
{% except %}
{{ log('dispatch failed for ' ~ macro_name ~ ': split on . and use macro_namespace', info=true) }}
{% endtry %} Prevention
- Never pass dotted names to adapter.dispatch
- Lint macros for `adapter.dispatch(` calls containing a dot
- Use macro_namespace for package-qualified dispatch
When it happens
Trigger: Calling `adapter.dispatch('my_package.my_macro')` or `adapter.dispatch('namespace.macro', ...)` from Jinja — any macro name containing `.`.
Common situations: Copy-pasted `{{ package }}__macro` conventions from Python dbt; users converting `ref()`-style qualified names to dispatch; older macros written before `macro_namespace` was introduced.
Understand the failure class
Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.
Related errors
- describe_dynamic_table is not supported by the {} adapter
- describe_interactive_table is not supported by the {} adapte
- invalid return value
- target is not set in state
- get_table_options: Failed to deserialize InternalDbtNodeWrap
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/c5c9cda1dbd11764.
Report an issue: GitHub.