coven_database/
sql_read.rs1use crate::{BulkSqlContext, SqlContext, SqlReadContext};
4use rusqlite::{Params, Row};
5
6pub trait SqlRead {
10 fn query_row<T, P, F>(&self, sql: &str, params: P, map: F) -> rusqlite::Result<T>
12 where
13 P: Params,
14 F: FnOnce(&Row<'_>) -> rusqlite::Result<T>;
15
16 fn query<T, P, F>(&self, sql: &str, params: P, map: F) -> rusqlite::Result<Vec<T>>
18 where
19 P: Params,
20 F: FnMut(&Row<'_>) -> rusqlite::Result<T>;
21}
22
23impl SqlRead for SqlReadContext<'_> {
24 fn query_row<T, P, F>(&self, sql: &str, params: P, map: F) -> rusqlite::Result<T>
25 where
26 P: Params,
27 F: FnOnce(&Row<'_>) -> rusqlite::Result<T>,
28 {
29 SqlReadContext::query_row(self, sql, params, map)
30 }
31
32 fn query<T, P, F>(&self, sql: &str, params: P, map: F) -> rusqlite::Result<Vec<T>>
33 where
34 P: Params,
35 F: FnMut(&Row<'_>) -> rusqlite::Result<T>,
36 {
37 SqlReadContext::query(self, sql, params, map)
38 }
39}
40
41impl SqlRead for SqlContext<'_, '_> {
42 fn query_row<T, P, F>(&self, sql: &str, params: P, map: F) -> rusqlite::Result<T>
43 where
44 P: Params,
45 F: FnOnce(&Row<'_>) -> rusqlite::Result<T>,
46 {
47 SqlContext::query_row(self, sql, params, map)
48 }
49
50 fn query<T, P, F>(&self, sql: &str, params: P, map: F) -> rusqlite::Result<Vec<T>>
51 where
52 P: Params,
53 F: FnMut(&Row<'_>) -> rusqlite::Result<T>,
54 {
55 SqlContext::query(self, sql, params, map)
56 }
57}
58
59impl SqlRead for BulkSqlContext<'_> {
60 fn query_row<T, P, F>(&self, sql: &str, params: P, map: F) -> rusqlite::Result<T>
61 where
62 P: Params,
63 F: FnOnce(&Row<'_>) -> rusqlite::Result<T>,
64 {
65 BulkSqlContext::query_row(self, sql, params, map)
66 }
67
68 fn query<T, P, F>(&self, sql: &str, params: P, map: F) -> rusqlite::Result<Vec<T>>
69 where
70 P: Params,
71 F: FnMut(&Row<'_>) -> rusqlite::Result<T>,
72 {
73 BulkSqlContext::query(self, sql, params, map)
74 }
75}
76
77#[cfg(test)]
78#[path = "sql_read_tests.rs"]
79mod tests;