2023-08-29 21:34:01 +02:00
|
|
|
use std::time;
|
|
|
|
|
|
2023-08-29 21:34:01 +02:00
|
|
|
use tracing::Instrument;
|
|
|
|
|
|
2023-08-29 21:34:00 +02:00
|
|
|
use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions};
|
2023-08-29 21:34:01 +02:00
|
|
|
use sqlx::ConnectOptions;
|
2023-08-29 21:34:00 +02:00
|
|
|
pub use sqlx::{Pool, Sqlite};
|
|
|
|
|
|
|
|
|
|
use std::str::FromStr as _;
|
|
|
|
|
|
|
|
|
|
use crate::StartError;
|
|
|
|
|
|
2023-08-29 21:34:01 +02:00
|
|
|
//#[tracing::instrument]
|
2023-08-29 21:34:00 +02:00
|
|
|
pub async fn init_database_pool(url: &str) -> Result<Pool<Sqlite>, StartError> {
|
|
|
|
|
Ok(SqlitePoolOptions::new()
|
|
|
|
|
.max_connections(5)
|
2023-08-29 21:34:01 +02:00
|
|
|
.connect_with(
|
|
|
|
|
SqliteConnectOptions::from_str(url)?
|
2023-08-29 21:34:01 +02:00
|
|
|
.log_statements(log::LevelFilter::Debug)
|
2023-08-29 21:34:01 +02:00
|
|
|
.log_slow_statements(log::LevelFilter::Warn, time::Duration::from_millis(100))
|
|
|
|
|
.pragma("foreign_keys", "1"),
|
|
|
|
|
)
|
2023-08-29 21:34:00 +02:00
|
|
|
.await?)
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-29 21:34:01 +02:00
|
|
|
//#[tracing::instrument]
|
2023-08-29 21:34:00 +02:00
|
|
|
pub async fn migrate(url: &str) -> Result<(), StartError> {
|
|
|
|
|
let pool = SqlitePoolOptions::new()
|
|
|
|
|
.max_connections(5)
|
2023-08-29 21:34:01 +02:00
|
|
|
.connect_with(
|
|
|
|
|
SqliteConnectOptions::from_str(url)?
|
|
|
|
|
.pragma("foreign_keys", "0")
|
2023-08-29 21:34:01 +02:00
|
|
|
.log_statements(log::LevelFilter::Warn),
|
2023-08-29 21:34:01 +02:00
|
|
|
)
|
2023-08-29 21:34:00 +02:00
|
|
|
.await?;
|
|
|
|
|
|
2023-08-29 21:34:01 +02:00
|
|
|
async { sqlx::migrate!().run(&pool).await }
|
2023-08-29 21:34:01 +02:00
|
|
|
// .instrument(tracing::info_span!("packager::query", "migration"))
|
2023-08-29 21:34:01 +02:00
|
|
|
.await?;
|
|
|
|
|
|
2023-08-29 21:34:00 +02:00
|
|
|
Ok(())
|
|
|
|
|
}
|