Merge 'properly execute pragmas - they may require some IO' from Nikita Sivukhin

- for example CDC pragma execute create table under the hood

Reviewed-by: Pere Diaz Bou <pere-altea@homail.com>

Closes #2701
This commit is contained in:
Jussi Saurio
2025-08-21 15:45:49 +03:00
committed by GitHub

View File

@@ -1612,21 +1612,7 @@ impl Connection {
}
let pragma = format!("PRAGMA {pragma_name}");
let mut stmt = self.prepare(pragma)?;
let mut results = Vec::new();
loop {
match stmt.step()? {
vdbe::StepResult::Row => {
let row: Vec<Value> = stmt.row().unwrap().get_values().cloned().collect();
results.push(row);
}
vdbe::StepResult::Interrupt | vdbe::StepResult::Busy => {
return Err(LimboError::Busy);
}
_ => break,
}
}
Ok(results)
stmt.run_collect_rows()
}
/// Set a new value to `pragma_name`.
@@ -1643,21 +1629,7 @@ impl Connection {
}
let pragma = format!("PRAGMA {pragma_name} = {pragma_value}");
let mut stmt = self.prepare(pragma)?;
let mut results = Vec::new();
loop {
match stmt.step()? {
vdbe::StepResult::Row => {
let row: Vec<Value> = stmt.row().unwrap().get_values().cloned().collect();
results.push(row);
}
vdbe::StepResult::Interrupt | vdbe::StepResult::Busy => {
return Err(LimboError::Busy);
}
_ => break,
}
}
Ok(results)
stmt.run_collect_rows()
}
pub fn experimental_views_enabled(&self) -> bool {
@@ -2021,6 +1993,23 @@ impl Statement {
}
}
pub(crate) fn run_collect_rows(&mut self) -> Result<Vec<Vec<Value>>> {
let mut values = Vec::new();
loop {
match self.step()? {
vdbe::StepResult::Done => return Ok(values),
vdbe::StepResult::IO => self.run_once()?,
vdbe::StepResult::Row => {
values.push(self.row().unwrap().get_values().cloned().collect());
continue;
}
vdbe::StepResult::Interrupt | vdbe::StepResult::Busy => {
return Err(LimboError::Busy)
}
}
}
}
#[instrument(skip_all, level = Level::DEBUG)]
fn reprepare(&mut self) -> Result<()> {
tracing::trace!("repreparing statement");