pub use sea_orm_migration::prelude::*; pub async fn execute_sql(manager: &SchemaManager<'_>, sql: &str) -> Result<(), DbErr> { for stmt in split_sql_statements(sql) { if stmt.is_empty() { continue; } manager .get_connection() .execute_raw(sea_orm::Statement::from_string( sea_orm::DbBackend::Postgres, stmt, )) .await?; } Ok(()) } fn split_sql_statements(sql: &str) -> Vec<&str> { sql.split(';') .map(|s| s.trim()) .filter(|s| !s.is_empty()) .collect() } #[cfg(test)] mod tests { use super::*; #[test] fn test_split_simple() { let sql = "SELECT 1; SELECT 2; SELECT 3"; let stmts = split_sql_statements(sql); assert_eq!(stmts, &["SELECT 1", "SELECT 2", "SELECT 3"]); } } pub struct Migrator; #[async_trait::async_trait] impl MigratorTrait for Migrator { fn migrations() -> Vec> { vec![ Box::new(init::Migration), Box::new(room_compact_summary::Migration), Box::new(user_billing_history::Migration), Box::new(project_message_favorite::Migration), Box::new(ai_subagent_session::Migration), ] } } pub mod ai_subagent_session; pub mod init; pub mod project_message_favorite; pub mod room_compact_summary; pub mod user_billing_history;