dbt-labs/dbt-core · error
ReplayStatement::bind_stream
Error message
ReplayStatement::bind_stream
What it means
todo!() stub in the ADBC record-replay backend: ReplayStatement::bind_stream (binding parameters from a RecordBatchReader stream) is not implemented for replay mode. Any ADBC client that streams parameter batches through this statement will abort here — only ingestion via the non-streaming bind or replayed DML is available.
Source
Thrown at crates/adbc-record-replay/src/replay.rs:221
ctx: RecordingContext,
) -> Self {
Self {
recordings_path,
config,
ctx,
sql: None,
recorded_options: BTreeMap::new(),
}
}
}
impl Statement for ReplayStatement {
fn bind(&mut self, _batch: RecordBatch) -> AdbcResult<()> {
todo!("ReplayStatement::bind")
}
fn bind_stream(&mut self, _reader: Box<dyn RecordBatchReader + Send>) -> AdbcResult<()> {
todo!("ReplayStatement::bind_stream")
}
#[allow(deprecated)]
fn execute<'a>(&'a mut self) -> AdbcResult<Box<dyn RecordBatchReader + Send + 'a>> {
let replay_sql = match &self.sql {
Some(sql) => sql,
None => "none",
};
let path = self.recordings_path.clone();
let unique_id = compute_file_name(
&path,
self.ctx.node_id.as_ref(),
Some(replay_sql),
self.ctx.metadata,
)?;
let storage_type = crate::storage::detect_storage_type(&path, &unique_id);View on GitHub (pinned to 0267ce9170)
Solutions
- Avoid bind_stream() in recorded workloads; materialize parameters into the SQL or skip replay for such statements
- Implement ReplayStatement::bind_stream to persist and replay stream data
- Return a proper Status::NotImplemented error instead of panicking
- Use the real ADBC driver when stream binding is required
Example fix
// before
fn bind_stream(&mut self, _reader: Box<dyn RecordBatchReader + Send>) -> AdbcResult<()> {
todo!("ReplayStatement::bind_stream")
}
// after
fn bind_stream(&mut self, _reader: Box<dyn RecordBatchReader + Send>) -> AdbcResult<()> {
Err(adbc_core::error::Error::with_message(
Status::NotImplemented,
"bind_stream is not supported by the replay driver".into(),
))
} Defensive patterns
Strategy: validation
Validate before calling
fn replay_supports_bind_stream(stmt: &ReplayStatement) -> bool {
false // bind_stream is not implemented in the replay driver
} Try / catch
if replay_supports_bind_stream(&stmt) {
stmt.bind_stream(reader)?;
} else {
return Err(anyhow!("bind_stream unsupported on replay driver"));
} Prevention
- Avoid bind_stream() in recorded workloads
- Branch driver behavior on whether the driver is record-replay
- Contribute bind_stream support before replaying parameterized streams
When it happens
Trigger: Calling Statement::bind_stream with a Box<dyn RecordBatchReader + Send> on a record-replay driver statement.
Common situations: Replaying parameterized queries that bind large datasets via streams; generic ADBC client code that calls bind_stream on every statement regardless of driver support.
Related errors
- ReplayStatement::bind
- ReplayStatement::execute_schema
- ReplayStatement::execute_partitions
- ReplayStatement::get_parameter_schema
- ReplayStatement::prepare
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/3e63b008189bd033.
Report an issue: GitHub.