From 8d0744c22b7dae372512dad4c277033735d3f68b Mon Sep 17 00:00:00 2001 From: altair823 Date: Mon, 4 May 2026 18:33:28 +0000 Subject: [PATCH] =?UTF-8?q?review(p9-fb-23):=20=ED=9A=8C=EC=B0=A8=201=20ni?= =?UTF-8?q?t=20=EB=B0=98=EC=98=81=20=E2=80=94=20named=20columns=20+=20safe?= =?UTF-8?q?=20byte=5Flen=20+=20trait=20check=20+=20count?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 (1M context) --- crates/kebab-store-sqlite/src/documents.rs | 36 ++++++++++++---------- tasks/HOTFIXES.md | 2 +- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/crates/kebab-store-sqlite/src/documents.rs b/crates/kebab-store-sqlite/src/documents.rs index a2568a1..ac59939 100644 --- a/crates/kebab-store-sqlite/src/documents.rs +++ b/crates/kebab-store-sqlite/src/documents.rs @@ -507,24 +507,21 @@ fn rows_optional(err: rusqlite::Error) -> rusqlite::Result> { } /// Reconstruct a [`kebab_core::RawAsset`] from one `assets` row. -/// -/// Column order must match the SELECT in -/// [`DocumentStore::get_asset_by_workspace_path`]: -/// `asset_id(0), source_uri(1), workspace_path(2), media_type(3), -/// byte_len(4), checksum(5), storage_kind(6), storage_path(7), -/// discovered_at(8)`. +/// Row mapper for `RawAsset`. Column names are self-documenting; the +/// SELECT in [`DocumentStore::get_asset_by_workspace_path`] must include +/// all nine columns by their schema names. fn asset_from_row(row: &rusqlite::Row<'_>) -> rusqlite::Result { use std::path::PathBuf; - let asset_id: String = row.get(0)?; - let source_uri_raw: String = row.get(1)?; - let workspace_path_raw: String = row.get(2)?; - let media_type_json: String = row.get(3)?; - let byte_len: i64 = row.get(4)?; - let checksum_raw: String = row.get(5)?; - let storage_kind: String = row.get(6)?; - let storage_path_raw: String = row.get(7)?; - let discovered_at_raw: String = row.get(8)?; + let asset_id: String = row.get("asset_id")?; + let source_uri_raw: String = row.get("source_uri")?; + let workspace_path_raw: String = row.get("workspace_path")?; + let media_type_json: String = row.get("media_type")?; + let byte_len: i64 = row.get("byte_len")?; + let checksum_raw: String = row.get("checksum")?; + let storage_kind: String = row.get("storage_kind")?; + let storage_path_raw: String = row.get("storage_path")?; + let discovered_at_raw: String = row.get("discovered_at")?; // Parse source_uri: stored as "file://" or "kb://". let source_uri = if let Some(path_str) = source_uri_raw.strip_prefix("file://") { @@ -558,7 +555,14 @@ fn asset_from_row(row: &rusqlite::Row<'_>) -> rusqlite::Result