fix: replace silent error swallowing with proper error propagation

Replace .filter_map(Result::ok).collect() with .collect::<Result<Vec<_>,_>>()?
in rename chain resolution and suffix probe queries. The old pattern silently
discarded database errors, making failures invisible. Now any rusqlite error
propagates to the caller immediately.

Affected: resolve_rename_chain (2 queries) and resolve_ambiguity (1 query).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
teernisse
2026-02-18 13:28:30 -05:00
parent c953d8e519
commit c0ca501662
2 changed files with 3 additions and 6 deletions

View File

@@ -44,15 +44,13 @@ pub fn resolve_rename_chain(
let mut fwd_stmt = conn.prepare_cached(forward_sql)?; let mut fwd_stmt = conn.prepare_cached(forward_sql)?;
let forward: Vec<String> = fwd_stmt let forward: Vec<String> = fwd_stmt
.query_map(rusqlite::params![project_id, &current], |row| row.get(0))? .query_map(rusqlite::params![project_id, &current], |row| row.get(0))?
.filter_map(std::result::Result::ok) .collect::<std::result::Result<Vec<_>, _>>()?;
.collect();
// Backward: current was the new name -> discover old names // Backward: current was the new name -> discover old names
let mut bwd_stmt = conn.prepare_cached(backward_sql)?; let mut bwd_stmt = conn.prepare_cached(backward_sql)?;
let backward: Vec<String> = bwd_stmt let backward: Vec<String> = bwd_stmt
.query_map(rusqlite::params![project_id, &current], |row| row.get(0))? .query_map(rusqlite::params![project_id, &current], |row| row.get(0))?
.filter_map(std::result::Result::ok) .collect::<std::result::Result<Vec<_>, _>>()?;
.collect();
for discovered in forward.into_iter().chain(backward) { for discovered in forward.into_iter().chain(backward) {
if visited.insert(discovered.clone()) { if visited.insert(discovered.clone()) {

View File

@@ -294,8 +294,7 @@ fn try_resolve_rename_ambiguity(
let old_paths: Vec<String> = stmt let old_paths: Vec<String> = stmt
.query_map(param_refs.as_slice(), |row| row.get(0))? .query_map(param_refs.as_slice(), |row| row.get(0))?
.filter_map(std::result::Result::ok) .collect::<std::result::Result<Vec<_>, _>>()?;
.collect();
// The newest path is a candidate that is NOT an old_path in any intra-chain rename. // The newest path is a candidate that is NOT an old_path in any intra-chain rename.
let newest = candidates.iter().find(|c| !old_paths.contains(c)); let newest = candidates.iter().find(|c| !old_paths.contains(c));