diff --git a/src/db/mod.rs b/src/db/mod.rs index 5a610e4..54c5f74 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -2,10 +2,13 @@ pub mod models; mod repository; mod schema; +use diesel::connection::InstrumentationEvent; +use diesel::r2d2::CustomizeConnection; +use diesel::Connection; pub use models::device::{Device, DeviceType, NewDevice}; +pub use models::device_subscription::{DeviceSubscription, NewDeviceSubscription}; pub use models::episode_action::{ActionType, EpisodeAction, NewEpisodeAction}; pub use models::session::Session; -pub use models::device_subscription::{NewDeviceSubscription, DeviceSubscription}; pub use models::user::{NewUser, User}; pub use repository::SqliteRepository; @@ -59,9 +62,27 @@ impl From for DbError { } } +#[derive(Debug)] +pub struct AddQueryDebugLogs; + +impl CustomizeConnection for AddQueryDebugLogs { + fn on_acquire(&self, conn: &mut SqliteConnection) -> Result<(), diesel::r2d2::Error> { + conn.set_instrumentation(|event: InstrumentationEvent<'_>| match event { + InstrumentationEvent::StartQuery { query, .. } => { + tracing::debug!("{}", query); + } + _ => {} + }); + + Ok(()) + } +} + pub fn initialize_db(path: impl AsRef, run_migrations: bool) -> Result { let manager = ConnectionManager::::new(path.as_ref().to_string_lossy()); - let pool = Pool::new(manager)?; + let pool = Pool::builder() + .connection_customizer(Box::new(AddQueryDebugLogs)) + .build(manager)?; if run_migrations { pool.get()?.run_pending_migrations(MIGRATIONS).unwrap();