dbt-labs/dbt-core · error
metadata query plan always includes metadata operation
Error message
metadata query plan always includes metadata operation
What it means
Internal invariant expect in list_relations_in_parallel_inner_with_options: building the Snowflake list-relations query plan must always yield a plan containing the metadata operation, and the unwrap of that construction failed. This is not user input related — it fires only if the query-plan builder regresses or returns an unexpected plan shape.
Solutions
- Inspect the metadata query plan construction (snowflake_list_relations_query_plan) for changes that drop the metadata operation
- Report as an internal bug — no adapter configuration triggers this
- Add a regression test pinning the metadata operation in the generated plan
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at crates/dbt-adapter/src/metadata/snowflake/mod.rs:847 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/cca6690810bcc4c4.
Report an issue: GitHub.
Appendix: source
Thrown at crates/dbt-adapter/src/metadata/snowflake/mod.rs:847
metadata_warehouse.clone(),
token.clone(),
Box::new(AdapterConnectionFactory::new(
self.adapter.engine().clone(),
self.adapter.engine().threads(),
)),
));
let adapter = self.adapter.clone();
let token_clone = token.clone();
let map_f = move |conn: &'_ mut dyn Connection,
db_schema: &CatalogAndSchema|
-> AdapterResult<Vec<Arc<dyn BaseRelation>>> {
let plan = snowflake_list_relations_query_plan(metadata_warehouse.as_deref());
let _metadata_operation = plan
.statements
.last()
.expect("metadata query plan always includes metadata operation");
let query_ctx = QueryCtx::default().with_desc("list_relations_in_parallel");
adapter.list_relations(&query_ctx, conn, db_schema, token_clone.clone())
};
let reduce_f = move |acc: &mut Acc,
db_schema: CatalogAndSchema,
relations: AdapterResult<Vec<Arc<dyn BaseRelation>>>|
-> Result<(), Cancellable<AdapterError>> {
match relations {
Ok(relations) => {
acc.insert(db_schema, Ok(relations));
Ok(())
}
Err(e) => {
// Empty schema error code - no relations in this schema
// XXX: The AdapterError struct is not properly being built at the moment, rely on string search for now
if e.message().contains("Object does not exist") {
acc.insert(db_schema, Ok(Vec::new()));View on GitHub (pinned to 0267ce9170)