dbt-labs/dbt-core · error

ReplayStatement::cancel

Error message

ReplayStatement::cancel

What it means

todo!() stub: ReplayStatement::cancel (ADBC statement cancellation) is unimplemented in the record-replay backend, so a driver-level cancel request panics instead of aborting an in-flight replayed query.

Solutions

  1. Implement cancel as a no-op returning Ok(()) — replayed execution has nothing to cancel
  2. Track a cancelled flag and check it between replay steps
  3. Return ADBC NOT_IMPLEMENTED instead of panicking
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at crates/adbc-record-replay/src/replay.rs:357 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/3fc5c2b2fe2f721d. Report an issue: GitHub.

Appendix: source

Thrown at crates/adbc-record-replay/src/replay.rs:357

    fn get_parameter_schema(&self) -> AdbcResult<Schema> {
        todo!("ReplayStatement::get_parameter_schema")
    }

    fn prepare(&mut self) -> AdbcResult<()> {
        todo!("ReplayStatement::prepare")
    }

    fn set_sql_query(&mut self, sql: &str) -> AdbcResult<()> {
        self.sql = Some(sql.to_string());
        Ok(())
    }

    fn set_substrait_plan(&mut self, _plan: &[u8]) -> AdbcResult<()> {
        unimplemented!("ReplayStatement::set_substrait_plan")
    }

    fn cancel(&mut self) -> AdbcResult<()> {
        todo!("ReplayStatement::cancel")
    }

    fn set_option(&mut self, key: OptionStatement, value: OptionValue) -> AdbcResult<()> {
        if let OptionStatement::Other(ref name) = key {
            self.ctx.absorb_option(name, &value);
        }
        Ok(())
    }

    fn get_option_string(&self, key: OptionStatement) -> AdbcResult<String> {
        // Serve back what the live driver reported for this option when the
        // recording was made. Anything not captured keeps the historical
        // behavior of reporting an empty value rather than an error, so replays
        // that never depended on an option are unaffected.
        if let OptionStatement::Other(ref name) = key
            && let Some(value) = self.recorded_options.get(name)
        {
            return Ok(value.clone());

View on GitHub (pinned to 0267ce9170)