Merge 'Allow reading altered tables by defaulting to null in Column insn' from Preston Thorpe

Closes #1259

Closes #1260
This commit is contained in:
Pekka Enberg
2025-04-06 13:33:16 +03:00
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);
}