From 1148a73b8880fbe7bba71b1159233fddc6f59ce0 Mon Sep 17 00:00:00 2001 From: cel 🌸 Date: Sun, 17 Aug 2025 09:42:25 +0100 Subject: feat: db logging --- filamento/src/db.rs | 54 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 4 deletions(-) (limited to 'filamento/src') diff --git a/filamento/src/db.rs b/filamento/src/db.rs index 79fdd9a..0b94f0c 100644 --- a/filamento/src/db.rs +++ b/filamento/src/db.rs @@ -1,8 +1,11 @@ use core::fmt::Display; +use std::ffi::c_int; use std::{collections::HashSet, ops::Deref, path::Path, sync::Arc}; use chrono::{DateTime, Utc}; use jid::{BareJID, FullJID, JID}; +use rusqlite::trace::TraceEventCodes; +use rusqlite::trace::config_log; use rusqlite::{Connection, OptionalExtension}; use tokio::sync::{Mutex, MutexGuard}; use tokio::sync::{mpsc, oneshot}; @@ -53,6 +56,41 @@ macro_rules! impl_db_sends { } } +unsafe fn enable_log() -> Result<(), DatabaseOpenError> { + unsafe { + config_log(Some(|_, log| debug!("rusqlite (db): {}", log)))?; + } + Ok(()) +} + +fn enable_trace(connection: &mut Connection) { + connection.trace_v2( + TraceEventCodes::all(), + Some(|trace| match trace { + rusqlite::trace::TraceEvent::Stmt(stmt_ref, _) => { + debug!( + "rusqlite (db) statement: {}", + stmt_ref.expanded_sql().unwrap_or_default() + ) + } + rusqlite::trace::TraceEvent::Profile(stmt_ref, duration) => {} + rusqlite::trace::TraceEvent::Row(stmt_ref) => { + debug!( + "rusqlite (db) row: {}", + stmt_ref.expanded_sql().unwrap_or_default() + ) + } + rusqlite::trace::TraceEvent::Close(conn_ref) => { + debug!( + "rusqlite (db) connection closed: {}", + conn_ref.db_filename().unwrap_or_default() + ) + } + _ => {} + }), + ); +} + impl Db { #[cfg(not(target_arch = "wasm32"))] pub async fn create_connect_and_migrate( @@ -709,7 +747,9 @@ impl DbActor { // let db = SqlitePool::connect(&url).await?; // migrate!().run(&db).await?; // Ok(Self { db }) - let db = Connection::open(url)?; + unsafe { enable_log()? } + let mut db = Connection::open(url)?; + enable_trace(&mut db); db.execute_batch(include_str!("../migrations/1.sql"))?; Ok(Self { db, receiver }) } @@ -719,7 +759,9 @@ impl DbActor { pub(crate) fn new_memory( receiver: mpsc::UnboundedReceiver, ) -> Result { - let db = Connection::open_in_memory()?; + unsafe { enable_log()? } + let mut db = Connection::open_in_memory()?; + enable_trace(&mut db); db.execute_batch(include_str!("../migrations/1.sql"))?; Ok(Self { db, receiver }) } @@ -729,7 +771,9 @@ impl DbActor { pub fn new_memory( receiver: mpsc::UnboundedReceiver, ) -> Result { - let db = Connection::open("mem.db")?; + unsafe { enable_log()? } + let mut db = Connection::open("mem.db")?; + enable_trace(&mut db); db.execute_batch(include_str!("../migrations/1.sql"))?; Ok(Self { db, receiver }) } @@ -740,7 +784,9 @@ impl DbActor { file_name: impl AsRef, receiver: mpsc::UnboundedReceiver, ) -> Result { - let db = Connection::open(file_name)?; + unsafe { enable_log()? } + let mut db = Connection::open(file_name)?; + enable_trace(&mut db); db.execute_batch(include_str!("../migrations/1.sql"))?; Ok(Self { db, receiver }) } -- cgit