Skip to main content

post_archiver/query/
file_meta.rs

1//! FileMeta point-query helpers (no builder — use the direct methods below).
2
3use rusqlite::OptionalExtension;
4
5use crate::{
6    manager::{PostArchiverConnection, PostArchiverManager},
7    FileMeta, FileMetaId, PostId,
8};
9
10use super::FromQuery;
11
12impl<C: PostArchiverConnection> PostArchiverManager<C> {
13    /// Fetch a single [`FileMeta`] by primary key. Returns `None` if not found.
14    pub fn get_file_meta(&self, id: FileMetaId) -> crate::error::Result<Option<FileMeta>> {
15        let mut stmt = self
16            .conn()
17            .prepare_cached("SELECT * FROM file_metas WHERE id = ?")?;
18        Ok(stmt.query_row([id], FileMeta::from_row).optional()?)
19    }
20
21    /// Find a [`FileMetaId`] by owning `post` and `filename`.
22    pub fn find_file_meta(
23        &self,
24        post: PostId,
25        filename: &str,
26    ) -> crate::error::Result<Option<FileMetaId>> {
27        let mut stmt = self
28            .conn()
29            .prepare_cached("SELECT id FROM file_metas WHERE post = ? AND filename = ?")?;
30        Ok(stmt
31            .query_row(rusqlite::params![post, filename], |row| row.get(0))
32            .optional()?)
33    }
34}