Skip to content

[MEDIUM] Missing transactions in bulk_import, clear_all_data, data_quality #33

@matthewod11-stack

Description

@matthewod11-stack

Description

Bulk operations write row-by-row with no transaction wrapping. Partial failures commit half-imported / half-deleted state. By contrast documents.rs correctly uses pool.begin().

Current State

  • src-tauri/src/bulk_import.rs:106-113clear_all_data issues 5 sequential DELETEs, no transaction. Interrupted run leaves DB inconsistent.
  • src-tauri/src/bulk_import.rsimport_reviews_bulk, import_employees_bulk insert rows individually, no transaction.
  • src-tauri/src/data_quality.rs — dedupe / merge operations run multiple writes without atomicity.

Suggested Fix

  • In each bulk function, start let mut tx = pool.begin().await?; → use tx for all writes → tx.commit().await? at the end.
  • On any write error, drop tx (rollback is automatic).
  • For very large imports (>10k rows), consider chunked transactions (e.g., 1000 rows per COMMIT) to bound memory/journal size.

Verification

  • cargo test bulk_import passes + add a test that simulates mid-import error and verifies no partial rows remain.
  • Manual: import a CSV, kill the app mid-import → next launch shows empty or pre-import state, not partial.

Automation Hints

scope: src-tauri/src/bulk_import.rs, src-tauri/src/data_quality.rs
do-not-touch: src-tauri/src/documents.rs (already correct, use as reference)
approach: add-declarations
risk: medium (transaction semantics)
max-files-changed: 2
blocked-by: none
bail-if: none

Priority

Medium — data-integrity protection for import failure modes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghardeningReliability or defense-in-depth improvementtech-debtEligible for automated overnight fixing

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions