(manager: &SchemaManager<'_>)
| 273 | } |
| 274 | |
| 275 | async fn exec_fresh<M>(manager: &SchemaManager<'_>) -> Result<(), DbErr> |
| 276 | where |
| 277 | M: MigratorTrait + ?Sized, |
| 278 | { |
| 279 | let db = manager.get_connection(); |
| 280 | |
| 281 | M::install(db).await?; |
| 282 | let db_backend = db.get_database_backend(); |
| 283 | |
| 284 | // Temporarily disable the foreign key check |
| 285 | if db_backend == DbBackend::Sqlite { |
| 286 | info!("Disabling foreign key check"); |
| 287 | db.execute(Statement::from_string( |
| 288 | db_backend, |
| 289 | "PRAGMA foreign_keys = OFF".to_owned(), |
| 290 | )) |
| 291 | .await?; |
| 292 | info!("Foreign key check disabled"); |
| 293 | } |
| 294 | |
| 295 | // Drop all foreign keys |
| 296 | if db_backend == DbBackend::MySql { |
| 297 | info!("Dropping all foreign keys"); |
| 298 | let stmt = query_mysql_foreign_keys(db); |
| 299 | let rows = db.query_all(db_backend.build(&stmt)).await?; |
| 300 | for row in rows.into_iter() { |
| 301 | let constraint_name: String = row.try_get("", "CONSTRAINT_NAME")?; |
| 302 | let table_name: String = row.try_get("", "TABLE_NAME")?; |
| 303 | info!( |
| 304 | "Dropping foreign key '{}' from table '{}'", |
| 305 | constraint_name, table_name |
| 306 | ); |
| 307 | let mut stmt = ForeignKey::drop(); |
| 308 | stmt.table(Alias::new(table_name.as_str())) |
| 309 | .name(constraint_name.as_str()); |
| 310 | db.execute(db_backend.build(&stmt)).await?; |
| 311 | info!("Foreign key '{}' has been dropped", constraint_name); |
| 312 | } |
| 313 | info!("All foreign keys dropped"); |
| 314 | } |
| 315 | |
| 316 | // Drop all tables |
| 317 | let stmt = query_tables(db).await; |
| 318 | let rows = db.query_all(db_backend.build(&stmt)).await?; |
| 319 | for row in rows.into_iter() { |
| 320 | let table_name: String = row.try_get("", "table_name")?; |
| 321 | info!("Dropping table '{}'", table_name); |
| 322 | let mut stmt = Table::drop(); |
| 323 | stmt.table(Alias::new(table_name.as_str())) |
| 324 | .if_exists() |
| 325 | .cascade(); |
| 326 | db.execute(db_backend.build(&stmt)).await?; |
| 327 | info!("Table '{}' has been dropped", table_name); |
| 328 | } |
| 329 | |
| 330 | // Drop all types |
| 331 | if db_backend == DbBackend::Postgres { |
| 332 | info!("Dropping all types"); |
nothing calls this directly
no test coverage detected