diff --git a/api/database/database.go b/api/database/database.go index d4d721e6..cc429368 100644 --- a/api/database/database.go +++ b/api/database/database.go @@ -191,22 +191,28 @@ func MigrateDatabase(db *gorm.DB) error { func ClearDatabase(db *gorm.DB) error { err := db.Transaction(func(tx *gorm.DB) error { + db_driver := drivers.DatabaseDriver() + + if db_driver == drivers.DatabaseDriverMysql { + if err := tx.Exec("SET FOREIGN_KEY_CHECKS = 0;").Error; err != nil { + return err + } + } + dry_run := tx.Session(&gorm.Session{DryRun: true}) for _, model := range database_models { // get table name of model structure table := dry_run.Find(model).Statement.Table - switch drivers.DatabaseDriver() { + switch db_driver { case drivers.DatabaseDriverPostgres: if err := tx.Exec(fmt.Sprintf("TRUNCATE TABLE %s CASCADE", table)).Error; err != nil { return err } - break case drivers.DatabaseDriverMysql: if err := tx.Exec(fmt.Sprintf("TRUNCATE TABLE %s", table)).Error; err != nil { return err } - break case drivers.DatabaseDriverSqlite: if err := tx.Exec(fmt.Sprintf("DELETE FROM %s", table)).Error; err != nil { return err @@ -215,6 +221,12 @@ func ClearDatabase(db *gorm.DB) error { } + if db_driver == drivers.DatabaseDriverMysql { + if err := tx.Exec("SET FOREIGN_KEY_CHECKS = 1;").Error; err != nil { + return err + } + } + return nil }) diff --git a/api/scanner/photoview_test.db b/api/scanner/photoview_test.db new file mode 100644 index 00000000..b97d513c Binary files /dev/null and b/api/scanner/photoview_test.db differ