Files
packager/rust/src/sqlite.rs

43 lines
1.2 KiB
Rust
Raw Normal View History

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(())
}