()
| 175 | } |
| 176 | |
| 177 | pub async fn run_db_migrations() -> Result<()> { |
| 178 | info!("Applying schema migrations"); |
| 179 | |
| 180 | let c = get_async_db_conn().await?; |
| 181 | let mut c_wrapped: AsyncConnectionWrapper<AsyncDbPoolConnection> = |
| 182 | AsyncConnectionWrapper::from(c); |
| 183 | |
| 184 | #[cfg(feature = "postgres")] |
| 185 | let _ = task::spawn_blocking(move || -> Result<()> { |
| 186 | c_wrapped |
| 187 | .run_pending_migrations(MIGRATIONS) |
| 188 | .map_err(|e| anyhow!("{}", e))?; |
| 189 | |
| 190 | Ok(()) |
| 191 | }) |
| 192 | .await?; |
| 193 | |
| 194 | #[cfg(feature = "sqlite")] |
| 195 | let _ = task::spawn_blocking(move || -> Result<()> { |
| 196 | use diesel::sql_types::Integer; |
| 197 | use diesel::{QueryableByName, RunQueryDsl}; |
| 198 | |
| 199 | #[derive(QueryableByName)] |
| 200 | struct FkPragma { |
| 201 | #[diesel(sql_type = Integer)] |
| 202 | foreign_keys: i32, |
| 203 | } |
| 204 | |
| 205 | let fk_pragma: i32 = diesel::sql_query("pragma foreign_keys") |
| 206 | .get_result::<FkPragma>(&mut c_wrapped)? |
| 207 | .foreign_keys; |
| 208 | if fk_pragma != 0 { |
| 209 | let _ = diesel::sql_query("pragma foreign_keys = 0").execute(&mut c_wrapped)?; |
| 210 | } |
| 211 | |
| 212 | c_wrapped |
| 213 | .run_pending_migrations(MIGRATIONS) |
| 214 | .map_err(|e| anyhow!("{}", e))?; |
| 215 | |
| 216 | if fk_pragma != 0 { |
| 217 | let _ = diesel::sql_query("pragma foreign_keys = 1").execute(&mut c_wrapped)?; |
| 218 | } |
| 219 | |
| 220 | Ok(()) |
| 221 | }) |
| 222 | .await?; |
| 223 | |
| 224 | Ok(()) |
| 225 | } |
| 226 | |
| 227 | async fn set_async_redis_pool(p: AsyncRedisPool) { |
| 228 | let mut pool_w = ASYNC_REDIS_POOL.write().await; |
no test coverage detected