use crate::utils::database::DatabasePool;
use anyhow::Result;
use sqlx::Row;
pub async fn execute_count_query(pool: &DatabasePool, query: &str) -> Result<i64> {
match pool {
DatabasePool::Postgres(pg_pool) => {
let row = sqlx::query(query).fetch_one(pg_pool).await?;
Ok(row.try_get("count")?)
}
DatabasePool::MySQL(mysql_pool) => {
let row = sqlx::query(query).fetch_one(mysql_pool).await?;
Ok(row.try_get("count")?)
}
}
}
pub async fn execute_update_query(pool: &DatabasePool, query: &str) -> Result<u64> {
match pool {
DatabasePool::Postgres(pg_pool) => {
let result = sqlx::query(query).execute(pg_pool).await?;
Ok(result.rows_affected())
}
DatabasePool::MySQL(mysql_pool) => {
let result = sqlx::query(query).execute(mysql_pool).await?;
Ok(result.rows_affected())
}
}
}
pub async fn execute_count_query_with_param(
pool: &DatabasePool,
query: &str,
param: &str,
) -> Result<i64> {
match pool {
DatabasePool::Postgres(pg_pool) => {
let pg_query = query.replace("?", "$1");
let row = sqlx::query(&pg_query)
.bind(param)
.fetch_one(pg_pool)
.await?;
Ok(row.try_get("count")?)
}
DatabasePool::MySQL(mysql_pool) => {
let row = sqlx::query(query).bind(param).fetch_one(mysql_pool).await?;
Ok(row.try_get("count")?)
}
}
}
pub async fn execute_update_query_with_param(
pool: &DatabasePool,
query: &str,
param: &str,
) -> Result<u64> {
match pool {
DatabasePool::Postgres(pg_pool) => {
let pg_query = query.replace("?", "$1");
let result = sqlx::query(&pg_query).bind(param).execute(pg_pool).await?;
Ok(result.rows_affected())
}
DatabasePool::MySQL(mysql_pool) => {
let result = sqlx::query(query).bind(param).execute(mysql_pool).await?;
Ok(result.rows_affected())
}
}
}