diff --git a/pkg/sqlite/migrations/52_postmigrate.go b/pkg/sqlite/migrations/52_postmigrate.go index 3db07fde8..f173d8087 100644 --- a/pkg/sqlite/migrations/52_postmigrate.go +++ b/pkg/sqlite/migrations/52_postmigrate.go @@ -2,6 +2,8 @@ package migrations import ( "context" + "database/sql" + "errors" "fmt" "path/filepath" "strings" @@ -60,6 +62,19 @@ func (m *schema52Migrator) migrate(ctx context.Context) error { logger.Infof("correcting folder path %s to %s", folderPath, correctPath) + // ensure the correct path is unique + var v int + isEmptyErr := m.db.Get(&v, "SELECT 1 FROM folders WHERE path = ?", correctPath) + if isEmptyErr != nil && !errors.Is(isEmptyErr, sql.ErrNoRows) { + return fmt.Errorf("error checking if correct path %s is unique: %w", correctPath, isEmptyErr) + } + + if isEmptyErr == nil { + // correct path is not unique, log and skip + logger.Warnf("correct path %s already exists, skipping...", correctPath) + continue + } + if _, err := m.db.Exec("UPDATE folders SET path = ? WHERE id = ?", correctPath, id); err != nil { return fmt.Errorf("error updating folder path %s to %s: %w", folderPath, correctPath, err) }