feat: add support for Item.digest_type and digest_value in database operations

This commit is contained in:
Andrew Phillips (aider)
2025-05-13 17:18:09 -03:00
parent 6a2476825b
commit 3e79b653b5

View File

@@ -90,8 +90,8 @@ pub fn open(path: PathBuf) -> Result<Connection, Error> {
pub fn insert_item(conn: &Connection, item: Item) -> Result<i64> { pub fn insert_item(conn: &Connection, item: Item) -> Result<i64> {
debug!("DB: Inserting item: {:?}", item); debug!("DB: Inserting item: {:?}", item);
conn.execute( conn.execute(
"INSERT INTO items (ts, size, compression) VALUES (?1, ?2, ?3)", "INSERT INTO items (ts, size, compression, digest_type, digest_value) VALUES (?1, ?2, ?3, ?4, ?5)",
(item.ts, item.size, item.compression), (item.ts, item.size, item.compression, item.digest_type, item.digest_value),
)?; )?;
Ok(conn.last_insert_rowid()) Ok(conn.last_insert_rowid())
} }
@@ -99,8 +99,8 @@ pub fn insert_item(conn: &Connection, item: Item) -> Result<i64> {
pub fn update_item(conn: &Connection, item: Item) -> Result<()> { pub fn update_item(conn: &Connection, item: Item) -> Result<()> {
debug!("DB: Updating item: {:?}", item); debug!("DB: Updating item: {:?}", item);
conn.execute( conn.execute(
"UPDATE items SET size=?2, compression=?3 WHERE id=?1", "UPDATE items SET size=?2, compression=?3, digest_type=?4, digest_value=?5 WHERE id=?1",
(item.id, item.size, item.compression), (item.id, item.size, item.compression, item.digest_type, item.digest_value),
)?; )?;
Ok(()) Ok(())
} }
@@ -175,7 +175,7 @@ pub fn set_item_tags(conn: &Connection, item: Item, tags: &Vec<String>) -> Resul
pub fn query_all_items(conn: &Connection) -> Result<Vec<Item>> { pub fn query_all_items(conn: &Connection) -> Result<Vec<Item>> {
debug!("DB: Querying all items"); debug!("DB: Querying all items");
let mut statement = conn let mut statement = conn
.prepare("SELECT id, ts, size, compression FROM items ORDER BY id ASC") .prepare("SELECT id, ts, size, compression, digest_type, digest_value FROM items ORDER BY id ASC")
.context("Problem preparing SQL statement")?; .context("Problem preparing SQL statement")?;
let mut rows = statement.query([])?; let mut rows = statement.query([])?;
let mut items = Vec::new(); let mut items = Vec::new();
@@ -186,6 +186,8 @@ pub fn query_all_items(conn: &Connection) -> Result<Vec<Item>> {
ts: row.get(1)?, ts: row.get(1)?,
size: row.get(2)?, size: row.get(2)?,
compression: row.get(3)?, compression: row.get(3)?,
digest_type: row.get(4)?,
digest_value: row.get(5)?,
}; };
items.push(item); items.push(item);
} }
@@ -202,6 +204,8 @@ pub fn query_tagged_items<'a>(conn: &'a Connection, tags: &'a Vec<String>) -> Re
items.ts, items.ts,
items.size, items.size,
items.compression, items.compression,
items.digest_type,
items.digest_value,
count(tags_match.id) as tags_score count(tags_match.id) as tags_score
FROM items, FROM items,
(SELECT tags.id FROM tags WHERE tags.name IN rarray(?1)) as tags_match (SELECT tags.id FROM tags WHERE tags.name IN rarray(?1)) as tags_match
@@ -228,6 +232,8 @@ pub fn query_tagged_items<'a>(conn: &'a Connection, tags: &'a Vec<String>) -> Re
ts: row.get(1)?, ts: row.get(1)?,
size: row.get(2)?, size: row.get(2)?,
compression: row.get(3)?, compression: row.get(3)?,
digest_type: row.get(4)?,
digest_value: row.get(5)?,
}; };
items.push(item); items.push(item);
} }
@@ -302,6 +308,8 @@ pub fn get_item_matching(
items.ts, items.ts,
items.size, items.size,
items.compression, items.compression,
items.digest_type,
items.digest_value,
count(sel.id) as score count(sel.id) as score
FROM items, FROM items,
(SELECT tags.id FROM tags WHERE tags.name IN rarray(?1)) as sel (SELECT tags.id FROM tags WHERE tags.name IN rarray(?1)) as sel
@@ -328,6 +336,8 @@ pub fn get_item_matching(
ts: row.get(1)?, ts: row.get(1)?,
size: row.get(2)?, size: row.get(2)?,
compression: row.get(3)?, compression: row.get(3)?,
digest_type: row.get(4)?,
digest_value: row.get(5)?,
})), })),
None => Ok(None), None => Ok(None),
} }
@@ -338,7 +348,7 @@ pub fn get_item(conn: &Connection, item_id: i64) -> Result<Option<Item>> {
let mut statement = conn let mut statement = conn
.prepare_cached( .prepare_cached(
" "
SELECT id, ts, size, compression SELECT id, ts, size, compression, digest_type, digest_value
FROM items FROM items
WHERE items.id = ?1", WHERE items.id = ?1",
) )
@@ -352,6 +362,8 @@ pub fn get_item(conn: &Connection, item_id: i64) -> Result<Option<Item>> {
ts: row.get(1)?, ts: row.get(1)?,
size: row.get(2)?, size: row.get(2)?,
compression: row.get(3)?, compression: row.get(3)?,
digest_type: row.get(4)?,
digest_value: row.get(5)?,
})), })),
None => Ok(None), None => Ok(None),
} }
@@ -362,7 +374,7 @@ pub fn get_item_last(conn: &Connection) -> Result<Option<Item>> {
let mut statement = conn let mut statement = conn
.prepare_cached( .prepare_cached(
" "
SELECT id, ts, size, compression SELECT id, ts, size, compression, digest_type, digest_value
FROM items FROM items
ORDER BY id DESC ORDER BY id DESC
LIMIT 1", LIMIT 1",
@@ -377,6 +389,8 @@ pub fn get_item_last(conn: &Connection) -> Result<Option<Item>> {
ts: row.get(1)?, ts: row.get(1)?,
size: row.get(2)?, size: row.get(2)?,
compression: row.get(3)?, compression: row.get(3)?,
digest_type: row.get(4)?,
digest_value: row.get(5)?,
})), })),
None => Ok(None), None => Ok(None),
} }