fix self.pager.replace() panic

This commit is contained in:
meteorgan
2025-07-11 17:54:35 +08:00
parent bf69b86e94
commit e2ab673624
2 changed files with 12 additions and 20 deletions

View File

@@ -540,22 +540,19 @@ impl Connection {
.unwrap()
.trim();
self.maybe_update_schema();
let pager = self.pager.borrow().clone();
match cmd {
Cmd::Stmt(stmt) => {
let program = Rc::new(translate::translate(
self.schema.borrow().deref(),
stmt,
self.pager.borrow().clone(),
pager.clone(),
self.clone(),
&syms,
QueryMode::Normal,
input,
)?);
Ok(Statement::new(
program,
self._db.mv_store.clone(),
self.pager.borrow().clone(),
))
Ok(Statement::new(program, self._db.mv_store.clone(), pager))
}
Cmd::Explain(_stmt) => todo!(),
Cmd::ExplainQueryPlan(_stmt) => todo!(),
@@ -591,22 +588,19 @@ impl Connection {
return Err(LimboError::InternalError("Connection closed".to_string()));
}
let syms = self.syms.borrow();
let pager = self.pager.borrow().clone();
match cmd {
Cmd::Stmt(ref stmt) | Cmd::Explain(ref stmt) => {
let program = translate::translate(
self.schema.borrow().deref(),
stmt.clone(),
self.pager.borrow().clone(),
pager.clone(),
self.clone(),
&syms,
cmd.into(),
input,
)?;
let stmt = Statement::new(
program.into(),
self._db.mv_store.clone(),
self.pager.borrow().clone(),
);
let stmt = Statement::new(program.into(), self._db.mv_store.clone(), pager);
Ok(Some(stmt))
}
Cmd::ExplainQueryPlan(stmt) => {
@@ -646,6 +640,7 @@ impl Connection {
let mut parser = Parser::new(sql.as_bytes());
while let Some(cmd) = parser.next()? {
let syms = self.syms.borrow();
let pager = self.pager.borrow().clone();
let byte_offset_end = parser.offset();
let input = str::from_utf8(&sql.as_bytes()[..byte_offset_end])
.unwrap()
@@ -656,7 +651,7 @@ impl Connection {
let program = translate::translate(
self.schema.borrow().deref(),
stmt,
self.pager.borrow().clone(),
pager,
self.clone(),
&syms,
QueryMode::Explain,
@@ -669,7 +664,7 @@ impl Connection {
let program = translate::translate(
self.schema.borrow().deref(),
stmt,
self.pager.borrow().clone(),
pager.clone(),
self.clone(),
&syms,
QueryMode::Normal,
@@ -679,11 +674,8 @@ impl Connection {
let mut state =
vdbe::ProgramState::new(program.max_registers, program.cursor_ref.len());
loop {
let res = program.step(
&mut state,
self._db.mv_store.clone(),
self.pager.borrow().clone(),
)?;
let res =
program.step(&mut state, self._db.mv_store.clone(), pager.clone())?;
if matches!(res, StepResult::Done) {
break;
}

View File

@@ -30,7 +30,7 @@ fn list_pragmas(program: &mut ProgramBuilder) {
program.emit_result_row(register, 1);
}
program.add_pragma_result_column("pragma_list".into());
program.epilogue(crate::translate::emitter::TransactionMode::None);
program.epilogue(TransactionMode::None);
}
#[allow(clippy::too_many_arguments)]