#[cfg(feature = "sqlite")]
use sqlx::sqlite::{SqliteConnectOptions, SqliteJournalMode, SqlitePool, SqlitePoolOptions};
#[cfg(feature = "sqlite")]
use std::str::FromStr;
#[cfg(feature = "sqlite")]
use crate::error::WalletResult;
#[cfg(feature = "sqlite")]
use crate::storage::StorageConfig;
#[cfg(feature = "sqlite")]
pub async fn create_sqlite_pools(config: &StorageConfig) -> WalletResult<(SqlitePool, SqlitePool)> {
let base_opts = SqliteConnectOptions::from_str(&config.url)?
.journal_mode(SqliteJournalMode::Wal)
.busy_timeout(std::time::Duration::from_secs(30))
.create_if_missing(true);
let writer_pool = SqlitePoolOptions::new()
.max_connections(1)
.min_connections(config.min_connections.min(1))
.idle_timeout(config.idle_timeout)
.acquire_timeout(config.connect_timeout)
.connect_with(base_opts.clone())
.await?;
let reader_pool = SqlitePoolOptions::new()
.max_connections(config.sqlite_read_connections)
.min_connections(config.min_connections)
.idle_timeout(config.idle_timeout)
.acquire_timeout(config.connect_timeout)
.connect_with(base_opts.read_only(true))
.await?;
sqlx::query("PRAGMA journal_mode=WAL")
.execute(&writer_pool)
.await?;
sqlx::query("PRAGMA synchronous=NORMAL")
.execute(&writer_pool)
.await?;
Ok((writer_pool, reader_pool))
}