fix: expose stable row IDs in Function errors (#4841)

Function error records expose physical row locations, which can change
when a table is compacted. Expose the server-provided optional stable
`row_id` through Rust and Python so callers can locate the same row
after compaction. Document stable-ID retries and retain physical
addresses for tables without stable row IDs. Older server responses
continue to deserialize with `row_id=None`.

The Python remote response test and Rust remote deserialization test
passed on verification SDK `4e1725fa352035e2079dfd235b8271cd05adf433`,
including decoding a legacy response without the new field. This branch
applies the same SDK patch to current main; intervening main changes
leave the affected error types and assertions unchanged. Formatting and
lint checks passed after correcting the retry examples to use the
`table.name` property. In a separate Linux server experiment, a real
skipped Function row retained `_rowid=506` after compaction changed its
physical address. The SDK field requires a server that emits stable row
IDs; this PR does not change server dependencies.
This commit is contained in:
Xuanwo
2026-11-05 10:36:11 +08:00
committed by GitHub
parent 17f90f8403
commit deb8834b5a
7 changed files with 73 additions and 10 deletions
+2
View File
@@ -614,6 +614,7 @@ pub struct FunctionErrorRecord {
pub job_id: String,
pub fragment_id: u64,
pub row_offset: Option<u32>,
pub row_id: Option<u64>,
pub row_address: Option<u64>,
pub column: String,
pub function: String,
@@ -653,6 +654,7 @@ impl From<lancedb::function::FunctionErrorRecord> for FunctionErrorRecord {
job_id: record.job_id,
fragment_id: record.fragment_id,
row_offset: record.row_offset,
row_id: record.row_id,
row_address: record.row_address,
column: record.column,
function: record.function,