Skip to content

Commit 25031f3

Browse files
committed
db: log executed queries
1 parent b2e5187 commit 25031f3

File tree

1 file changed

+36
-20
lines changed

1 file changed

+36
-20
lines changed

src/db/mod.rs

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use r2d2_sqlite::SqliteConnectionManager;
77
use rusqlite::types::ToSql;
88
use rusqlite::{Connection, Row, Transaction};
99
use std::sync::Arc;
10+
use std::time::Instant;
1011
use tempfile::NamedTempFile;
1112

1213
static LEGACY_DATABASE_PATHS: &[&str] = &["server.db"];
@@ -119,16 +120,20 @@ pub trait QueryUtils {
119120

120121
fn exists(&self, sql: &str, params: &[&ToSql]) -> Fallible<bool> {
121122
self.with_conn(|conn| {
122-
let mut prepared = conn.prepare(sql)?;
123-
Ok(prepared.exists(params)?)
123+
self.trace(sql, || {
124+
let mut prepared = conn.prepare(sql)?;
125+
Ok(prepared.exists(params)?)
126+
})
124127
})
125128
}
126129

127130
fn execute(&self, sql: &str, params: &[&ToSql]) -> Fallible<usize> {
128131
self.with_conn(|conn| {
129-
let mut prepared = conn.prepare(sql)?;
130-
let changes = prepared.execute(params)?;
131-
Ok(changes)
132+
self.trace(sql, || {
133+
let mut prepared = conn.prepare(sql)?;
134+
let changes = prepared.execute(params)?;
135+
Ok(changes)
136+
})
132137
})
133138
}
134139

@@ -139,14 +144,16 @@ pub trait QueryUtils {
139144
func: F,
140145
) -> Fallible<Option<T>> {
141146
self.with_conn(|conn| {
142-
let mut prepared = conn.prepare(sql)?;
143-
let mut iter = prepared.query_map(params, func)?;
144-
145-
if let Some(item) = iter.next() {
146-
Ok(Some(item?))
147-
} else {
148-
Ok(None)
149-
}
147+
self.trace(sql, || {
148+
let mut prepared = conn.prepare(sql)?;
149+
let mut iter = prepared.query_map(params, func)?;
150+
151+
if let Some(item) = iter.next() {
152+
Ok(Some(item?))
153+
} else {
154+
Ok(None)
155+
}
156+
})
150157
})
151158
}
152159

@@ -157,17 +164,26 @@ pub trait QueryUtils {
157164
func: F,
158165
) -> Fallible<Vec<T>> {
159166
self.with_conn(|conn| {
160-
let mut prepared = conn.prepare(sql)?;
161-
let rows = prepared.query_map(params, func)?;
167+
self.trace(sql, || {
168+
let mut prepared = conn.prepare(sql)?;
169+
let rows = prepared.query_map(params, func)?;
162170

163-
let mut results = Vec::new();
164-
for row in rows {
165-
results.push(row?);
166-
}
171+
let mut results = Vec::new();
172+
for row in rows {
173+
results.push(row?);
174+
}
167175

168-
Ok(results)
176+
Ok(results)
177+
})
169178
})
170179
}
180+
181+
fn trace<T, F: FnOnce() -> T>(&self, sql: &str, f: F) -> T {
182+
let start = Instant::now();
183+
let res = f();
184+
trace!("sql query \"{}\" executed in {:?}", sql, start.elapsed());
185+
res
186+
}
171187
}
172188

173189
impl QueryUtils for Database {

0 commit comments

Comments
 (0)