mirror of
https://github.com/aljazceru/turso.git
synced 2026-02-05 00:04:23 +01:00
reprepare optimization using reset()
This commit is contained in:
16
core/lib.rs
16
core/lib.rs
@@ -2225,8 +2225,14 @@ impl Statement {
|
||||
};
|
||||
// Save parameters before they are reset
|
||||
let parameters = std::mem::take(&mut self.state.parameters);
|
||||
self.state =
|
||||
vdbe::ProgramState::new(self.program.max_registers, self.program.cursor_ref.len());
|
||||
self._reset(
|
||||
Some(match self.query_mode {
|
||||
QueryMode::Normal => self.program.max_registers,
|
||||
QueryMode::Explain => EXPLAIN_COLUMNS.len(),
|
||||
QueryMode::ExplainQueryPlan => EXPLAIN_QUERY_PLAN_COLUMNS.len(),
|
||||
}),
|
||||
Some(self.program.cursor_ref.len()),
|
||||
);
|
||||
// Load the parameters back into the state
|
||||
self.state.parameters = parameters;
|
||||
Ok(())
|
||||
@@ -2326,7 +2332,11 @@ impl Statement {
|
||||
}
|
||||
|
||||
pub fn reset(&mut self) {
|
||||
self.state.reset();
|
||||
self._reset(None, None);
|
||||
}
|
||||
|
||||
pub fn _reset(&mut self, max_registers: Option<usize>, max_cursors: Option<usize>) {
|
||||
self.state.reset(max_registers, max_cursors);
|
||||
self.busy = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -373,8 +373,16 @@ impl ProgramState {
|
||||
self.parameters.get(&index).cloned().unwrap_or(Value::Null)
|
||||
}
|
||||
|
||||
pub fn reset(&mut self) {
|
||||
pub fn reset(&mut self, max_registers: Option<usize>, max_cursors: Option<usize>) {
|
||||
self.pc = 0;
|
||||
|
||||
if let Some(max_cursors) = max_cursors {
|
||||
self.cursors.resize_with(max_cursors, || None);
|
||||
}
|
||||
if let Some(max_resgisters) = max_registers {
|
||||
self.registers
|
||||
.resize_with(max_resgisters, || Register::Value(Value::Null));
|
||||
}
|
||||
self.cursors.iter_mut().for_each(|c| *c = None);
|
||||
self.registers
|
||||
.iter_mut()
|
||||
|
||||
Reference in New Issue
Block a user