{"record":{"id":"8d6a1b97b76e8fee","repo":"dbt-labs/dbt-core","slug":"query-addition-to-connection-in-mockadapter","errorCode":null,"errorMessage":"query addition to connection in MockAdapter","messagePattern":"query addition to connection in MockAdapter","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/dbt-adapter/src/adapter/adapter_impl.rs","lineNumber":960,"sourceCode":"            token,\n        )\n    }\n\n    /// SQLAdapter https://github.com/dbt-labs/dbt-adapters/blob/0efd8d3d1081e1ab43e38797d5104f7b424a6284/dbt-adapters/src/dbt/adapters/sql/impl.py#L55\n    /// BigQueryAdapter https://github.com/dbt-labs/dbt-adapters/blob/0efd8d3d1081e1ab43e38797d5104f7b424a6284/dbt-bigquery/src/dbt/adapters/bigquery/impl.py#L573\n    #[allow(clippy::too_many_arguments)]\n    pub fn add_query(\n        &self,\n        state: &State,\n        conn: &'_ mut dyn Connection,\n        sql: &str,\n        auto_begin: bool,\n        bindings: Option<&Value>,\n        abridge_sql_log: bool,\n        token: CancellationToken,\n    ) -> AdapterResult<()> {\n        if self.mock_state().is_some() {\n            unimplemented!(\"query addition to connection in MockAdapter\")\n        }\n        let sql = if let Some(bindings) = bindings {\n            Cow::Owned(format_sql_with_bindings(\n                self.adapter_type(),\n                sql,\n                bindings,\n            )?)\n        } else {\n            Cow::Borrowed(sql)\n        };\n        let ctx = query_ctx_from_state(state)?.with_desc(\"add_query adapter call\");\n        match self.inner_adapter() {\n            Replay(_, replay) => replay.replay_add_query(\n                &ctx,\n                conn,\n                sql.as_ref(),\n                auto_begin,\n                bindings,","sourceCodeStart":942,"sourceCodeEnd":978,"githubUrl":"https://github.com/dbt-labs/dbt-core/blob/0267ce9170576975b76b64ce856b2e5848e96617/crates/dbt-adapter/src/adapter/adapter_impl.rs#L942-L978","documentation":"AdapterImpl::add_query panics when the adapter is a MockAdapter (mock_state().is_some()) and an executable query is added to its connection. MockAdapter is intended for parsing/planning without a real database, so executing SQL against it is unsupported by design.","triggerScenarios":"Calling add_query (execute/bind SQL with auto_begin, bindings, cancellation token) on an adapter constructed in mock mode, e.g. during `dbt parse` flows or tests that later reach a code path that executes SQL.","commonSituations":"Running `dbt compile`/`parse` with a mock adapter while a macro or model invokes execute()/run_query; unit tests that accidentally use MockAdapter for execution paths.","solutions":["Use a real database-backed adapter (DuckDB, Postgres, etc.) whenever SQL execution is expected.","Audit the calling macro/model so no execute path runs under parse/compile with a mock adapter.","If MockAdapter should support query logging, implement the mock branch in add_query to record the SQL instead of panicking."],"exampleFix":"// before\nif self.mock_state().is_some() {\n    unimplemented!(\"query addition to connection in MockAdapter\")\n}\n// after\nif let Some(state) = self.mock_state() {\n    state.record_query(&sql);\n    return Ok(());\n}","handlingStrategy":"validation","validationCode":"if adapter.is_mock() {\n    return Err(\"cannot execute SQL: adapter is in mock mode\".into());\n}","typeGuard":"fn can_execute(adapter: &AdapterImpl) -> bool { adapter.mock_state().is_none() }","tryCatchPattern":null,"preventionTips":["Only use MockAdapter for parse/compile; use a real adapter (e.g. DuckDB) for run/execute","Assert execution paths never run under `dbt parse` in CI","Add a capability check before invoking add_query"],"tags":["rust","adapter","mock","sql-execution","unimplemented"],"backgroundTag":"unsupported-operation","analyzedSha":"0267ce9170576975b76b64ce856b2e5848e96617","analyzedAt":"2026-09-07T21:53:39.732Z","contentChangedAt":"2026-09-07T21:53:39.732Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}