Allow reading altered tables by defaulting to null in Column insn

This commit is contained in:
PThorpe92 2025-04-05 16:19:56 -04:00
parent ed7271a08c
commit 67eda10453
No known key found for this signature in database
GPG key ID: 66DB3FBACBDD05CC
2 changed files with 14 additions and 3 deletions

View file

@ -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()
}

View file

@ -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);
}