sqlx_cloudflare_core/
result.rs1#[derive(Debug, Default, Clone, PartialEq, Eq)]
3pub struct QueryResult {
4 rows_affected: u64,
5 last_insert_rowid: i64,
6}
7
8impl QueryResult {
9 #[must_use]
12 pub fn new(rows_affected: u64, last_insert_rowid: i64) -> Self {
13 Self {
14 rows_affected,
15 last_insert_rowid,
16 }
17 }
18
19 #[must_use]
21 pub fn rows_affected(&self) -> u64 {
22 self.rows_affected
23 }
24
25 #[must_use]
33 pub fn last_insert_rowid(&self) -> i64 {
34 self.last_insert_rowid
35 }
36}
37
38impl Extend<QueryResult> for QueryResult {
39 fn extend<T: IntoIterator<Item = QueryResult>>(&mut self, iter: T) {
40 for result in iter {
41 self.rows_affected += result.rows_affected;
42 if result.last_insert_rowid != 0 {
46 self.last_insert_rowid = result.last_insert_rowid;
47 }
48 }
49 }
50}
51
52#[derive(Debug, Clone)]
57pub struct BatchResult<R> {
58 rows: Vec<R>,
59 result: QueryResult,
60}
61
62impl<R> BatchResult<R> {
63 #[must_use]
65 pub fn new(rows: Vec<R>, result: QueryResult) -> Self {
66 Self { rows, result }
67 }
68
69 #[must_use]
72 pub fn rows(&self) -> &[R] {
73 &self.rows
74 }
75
76 #[must_use]
78 pub fn into_rows(self) -> Vec<R> {
79 self.rows
80 }
81
82 #[must_use]
84 pub fn result(&self) -> &QueryResult {
85 &self.result
86 }
87
88 #[must_use]
90 pub fn into_parts(self) -> (Vec<R>, QueryResult) {
91 (self.rows, self.result)
92 }
93}
94
95#[cfg(test)]
96mod tests {
97 use super::QueryResult;
98
99 #[test]
100 fn extend_sums_changes_and_keeps_the_last_reported_rowid() {
101 let mut result = QueryResult::default();
102
103 result.extend([
104 QueryResult::new(2, 7),
105 QueryResult::new(1, 9),
106 QueryResult::new(0, 0),
107 ]);
108
109 assert_eq!(result.rows_affected(), 3);
110 assert_eq!(result.last_insert_rowid(), 9);
111 }
112}