this repo has no description
at fix-ts-uint8array 44 lines 1.6 kB view raw
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 include_str!("../migrations/004_add_streak_freezes.sql"), 23 include_str!("../migrations/005_push_notifications.sql"), 24 ]; 25 26 for sql in &migrations { 27 // Each migration file may contain multiple statements separated by semicolons. 28 for statement in sql.split(';') { 29 let trimmed = statement.trim(); 30 if trimmed.is_empty() { 31 continue; 32 } 33 if let Err(e) = sqlx::query(trimmed).execute(pool).await { 34 // ALTER TABLE ADD COLUMN is not idempotent in SQLite — 35 // ignore "duplicate column" errors on restart. 36 let msg = e.to_string(); 37 if msg.contains("duplicate column") { 38 continue; 39 } 40 panic!("Failed to run migration: {e}"); 41 } 42 } 43 } 44}