diff --git a/rust/src/lancedb_ops.rs b/rust/src/lancedb_ops.rs index b6e112f..be53166 100644 --- a/rust/src/lancedb_ops.rs +++ b/rust/src/lancedb_ops.rs @@ -708,7 +708,12 @@ impl LanceDBOps { let op = ttbl .update() .only_if(&predicate) - .column("recall_seen_count", &format!("recall_seen_count + {}", delta)) + // C档 (t_5aa7cb77):recall_seen_count 是可空列(存量 43.8% 行为 NULL)。 + // 裸 `recall_seen_count + delta` 在 NULL 上恒为 NULL ⇒ 观测值静默丢失。 + // COALESCE(.., 0) 让 NULL 行按 0 起算(NULL+1 ⇒ 1)。不可空列行为不变。 + // 注意:不得给逐条 fallback 的 value 字符串加 COALESCE —— 那走 current-value + // 算术解析(split_whitespace 期望恰好 3 段),COALESCE 会炸掉解析。 + .column("recall_seen_count", &format!("COALESCE(recall_seen_count, 0) + {}", delta)) .column("last_recalled_at", &ts_lit); rt().block_on(op.execute()).map_err(Into::into) };