this repo has no description
1use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions};
2use sqlx::SqlitePool;
3use std::str::FromStr;
4
5pub async fn init_pool(database_url: &str) -> SqlitePool {
6 let options = SqliteConnectOptions::from_str(database_url)
7 .expect("Invalid DATABASE_URL")
8 .create_if_missing(true);
9
10 SqlitePoolOptions::new()
11 .max_connections(5)
12 .connect_with(options)
13 .await
14 .expect("Failed to create database pool")
15}
16
17pub async fn run_migrations(pool: &SqlitePool) {
18 let migrations = [
19 include_str!("../migrations/001_create_users.sql"),
20 include_str!("../migrations/002_create_progress.sql"),
21 include_str!("../migrations/003_create_lesson_state.sql"),
22 ];
23
24 for sql in &migrations {
25 // Each migration file may contain multiple statements separated by semicolons.
26 for statement in sql.split(';') {
27 let trimmed = statement.trim();
28 if trimmed.is_empty() {
29 continue;
30 }
31 sqlx::query(trimmed)
32 .execute(pool)
33 .await
34 .expect("Failed to run migration");
35 }
36 }
37}