From 5c0b112125e59a780236fc654848afa563314aa7 Mon Sep 17 00:00:00 2001 From: "Levy A." Date: Sat, 12 Apr 2025 17:40:29 -0300 Subject: [PATCH 1/2] fix: return null when parameter is unbound --- core/error.rs | 4 ---- core/vdbe/execute.rs | 7 +------ core/vdbe/mod.rs | 4 ++-- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/core/error.rs b/core/error.rs index 3a1fd8112..e8eb83a5a 100644 --- a/core/error.rs +++ b/core/error.rs @@ -1,5 +1,3 @@ -use std::num::NonZero; - use thiserror::Error; #[derive(Debug, Error, miette::Diagnostic)] @@ -49,8 +47,6 @@ pub enum LimboError { Constraint(String), #[error("Extension error: {0}")] ExtensionError(String), - #[error("Unbound parameter at index {0}")] - Unbound(NonZero), #[error("Runtime error: integer overflow")] IntegerOverflow, #[error("Schema is locked for write")] diff --git a/core/vdbe/execute.rs b/core/vdbe/execute.rs index 4d2a96d10..21a8d208d 100644 --- a/core/vdbe/execute.rs +++ b/core/vdbe/execute.rs @@ -4395,12 +4395,7 @@ pub fn op_variable( let Insn::Variable { index, dest } = insn else { unreachable!("unexpected Insn {:?}", insn) }; - state.registers[*dest] = Register::OwnedValue( - state - .get_parameter(*index) - .ok_or(LimboError::Unbound(*index))? - .clone(), - ); + state.registers[*dest] = Register::OwnedValue(state.get_parameter(*index)); state.pc += 1; Ok(InsnFunctionStepResult::Step) } diff --git a/core/vdbe/mod.rs b/core/vdbe/mod.rs index daad191b4..c5ab69eb9 100644 --- a/core/vdbe/mod.rs +++ b/core/vdbe/mod.rs @@ -284,8 +284,8 @@ impl ProgramState { self.parameters.insert(index, value); } - pub fn get_parameter(&self, index: NonZero) -> Option<&OwnedValue> { - self.parameters.get(&index) + pub fn get_parameter(&self, index: NonZero) -> OwnedValue { + self.parameters.get(&index).cloned().unwrap_or(OwnedValue::Null) } pub fn reset(&mut self) { From d210ee149783cf1a25a3e5606a2589e645c0f677 Mon Sep 17 00:00:00 2001 From: "Levy A." Date: Sat, 12 Apr 2025 18:55:48 -0300 Subject: [PATCH 2/2] cargo fmt --- core/vdbe/mod.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/vdbe/mod.rs b/core/vdbe/mod.rs index c5ab69eb9..a95cc7fba 100644 --- a/core/vdbe/mod.rs +++ b/core/vdbe/mod.rs @@ -285,7 +285,10 @@ impl ProgramState { } pub fn get_parameter(&self, index: NonZero) -> OwnedValue { - self.parameters.get(&index).cloned().unwrap_or(OwnedValue::Null) + self.parameters + .get(&index) + .cloned() + .unwrap_or(OwnedValue::Null) } pub fn reset(&mut self) {