From b30bc67bd4f3541eecb8983ebc53829e45b819e6 Mon Sep 17 00:00:00 2001 From: realaravinth Date: Mon, 30 May 2022 15:48:54 +0530 Subject: [PATCH] feat: conditional SQL statements logging for db-sqlx-postgres --- db/db-sqlx-postgres/src/lib.rs | 25 ++++++++++++++++++++----- db/db-sqlx-postgres/src/tests.rs | 6 +++++- src/data.rs | 1 + 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/db/db-sqlx-postgres/src/lib.rs b/db/db-sqlx-postgres/src/lib.rs index 56b15491..7ad96784 100644 --- a/db/db-sqlx-postgres/src/lib.rs +++ b/db/db-sqlx-postgres/src/lib.rs @@ -14,10 +14,13 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ +use std::str::FromStr; + use db_core::dev::*; use sqlx::postgres::PgPoolOptions; use sqlx::types::time::OffsetDateTime; +use sqlx::ConnectOptions; use sqlx::PgPool; pub mod errors; @@ -42,6 +45,7 @@ pub enum ConnectionOptions { pub struct Fresh { pub pool_options: PgPoolOptions, + pub disable_logging: bool, pub url: String, } @@ -63,11 +67,22 @@ impl Connect for ConnectionOptions { type Pool = Database; async fn connect(self) -> DBResult { let pool = match self { - Self::Fresh(fresh) => fresh - .pool_options - .connect(&fresh.url) - .await - .map_err(|e| DBError::DBError(Box::new(e)))?, + Self::Fresh(fresh) => { + let mut connect_options = + sqlx::postgres::PgConnectOptions::from_str(&fresh.url).unwrap(); + if fresh.disable_logging { + connect_options.disable_statement_logging(); + } + sqlx::postgres::PgConnectOptions::from_str(&fresh.url) + .unwrap() + .disable_statement_logging(); + fresh + .pool_options + .connect_with(connect_options) + .await + .map_err(|e| DBError::DBError(Box::new(e)))? + } + Self::Existing(conn) => conn.0, }; Ok(Database { pool }) diff --git a/db/db-sqlx-postgres/src/tests.rs b/db/db-sqlx-postgres/src/tests.rs index cfb60069..ac098278 100644 --- a/db/db-sqlx-postgres/src/tests.rs +++ b/db/db-sqlx-postgres/src/tests.rs @@ -68,7 +68,11 @@ async fn everyting_works() { let url = env::var("POSTGRES_DATABASE_URL").unwrap(); let pool_options = PgPoolOptions::new().max_connections(2); - let connection_options = ConnectionOptions::Fresh(Fresh { pool_options, url }); + let connection_options = ConnectionOptions::Fresh(Fresh { + pool_options, + url, + disable_logging: false, + }); let db = connection_options.connect().await.unwrap(); db.migrate().await.unwrap(); diff --git a/src/data.rs b/src/data.rs index b64fd243..82bb6eae 100644 --- a/src/data.rs +++ b/src/data.rs @@ -190,6 +190,7 @@ impl Data { let connection_options = ConnectionOptions::Fresh(Fresh { pool_options, url: s.database.url.clone(), + disable_logging: s.debug, }); let db = connection_options.connect().await.unwrap(); db.migrate().await.unwrap();