use based::get_pg; pub async fn get_fragment(hash: &str) -> Option<(Vec, String)> { sqlx::query_as("SELECT blob, mime FROM fragments WHERE id = $1") .bind(hash) .fetch_optional(get_pg!()) .await .unwrap() } pub async fn get_random_fragment_id() -> String { let random_id: (String,) = sqlx::query_as("SELECT id FROM fragments ORDER BY RANDOM() LIMIT 1") .fetch_one(get_pg!()) .await .unwrap(); random_id.0 } pub async fn domain_has_fragments(domain: &str) -> bool { let exists: (bool,) = sqlx::query_as("SELECT EXISTS(SELECT 1 FROM document_fragments WHERE domain = $1)") .bind(domain) .fetch_one(get_pg!()) .await .unwrap(); exists.0 } pub async fn get_fragments_of_domain(domain: &str) -> Vec<(String, String)> { let res: Vec<(String, String)> = sqlx::query_as("SELECT df.fragment, f.mime FROM document_fragments df JOIN fragments f ON df.fragment = f.id WHERE df.domain = $1") .bind(domain) .fetch_all(get_pg!()).await.unwrap(); res.into_iter().map(|x| (x.0, x.1)).collect() } pub async fn get_domains_of_fragment(fragment: &str) -> Vec<(String, String, chrono::NaiveDate)> { let res: Vec<(String, String, chrono::NaiveDate)> = sqlx::query_as("SELECT domain, path, version FROM document_fragments WHERE fragment = $1") .bind(fragment) .fetch_all(get_pg!()) .await .unwrap(); res.into_iter().map(|x| (x.0, x.1, x.2)).collect() }