diff --git a/core/types.rs b/core/types.rs index 9e7869b76..1556ee100 100644 --- a/core/types.rs +++ b/core/types.rs @@ -732,6 +732,10 @@ impl ImmutableRecord { &self.values[idx] } + pub fn get_value_opt(&self, idx: usize) -> Option<&RefValue> { + self.values.get(idx) + } + pub fn len(&self) -> usize { self.values.len() } diff --git a/core/vdbe/execute.rs b/core/vdbe/execute.rs index 3c511a0db..58153319c 100644 --- a/core/vdbe/execute.rs +++ b/core/vdbe/execute.rs @@ -1278,7 +1278,10 @@ pub fn op_column( if cursor.get_null_flag() { RefValue::Null } else { - record.get_value(*column).clone() + match record.get_value_opt(*column) { + Some(val) => val.clone(), + None => RefValue::Null, + } } } else { RefValue::Null @@ -1305,10 +1308,14 @@ pub fn op_column( let record = { let mut cursor = state.get_cursor(*cursor_id); let cursor = cursor.as_sorter_mut(); - cursor.record().map(|r| r.clone()) + cursor.record().cloned() }; if let Some(record) = record { - state.registers[*dest] = Register::OwnedValue(record.get_value(*column).to_owned()); + state.registers[*dest] = + Register::OwnedValue(match record.get_value_opt(*column) { + Some(val) => val.to_owned(), + None => OwnedValue::Null, + }); } else { state.registers[*dest] = Register::OwnedValue(OwnedValue::Null); }