1
0
mirror of https://github.com/uptrace/go-clickhouse.git synced 2025-06-29 00:21:46 +02:00

Merge pull request #31 from odenio/ro/fix_zero_applied_migrations

Fix for upping applying zero migrations
This commit is contained in:
Vladimir Mihailenco
2022-06-28 08:55:48 +03:00
committed by GitHub

View File

@ -145,40 +145,47 @@ func (m *Migrator) Migrate(ctx context.Context, opts ...MigrationOption) (*Migra
if err != nil { if err != nil {
return nil, err return nil, err
} }
// Get the unapplied migrations we will range over and apply
migrations = migrations.Unapplied() migrations = migrations.Unapplied()
if len(migrations) == 0 {
group := new(MigrationGroup) return &MigrationGroup{}, nil
if len(group.Migrations) == 0 {
return group, nil
} }
group.ID = lastGroupID + 1
for i := range group.Migrations { // Create empty group to track applied migrations
migration := &group.Migrations[i] applied := new(MigrationGroup)
migration.GroupID = group.ID applied.ID = lastGroupID + 1
for i := range migrations {
migration := &migrations[i]
migration.GroupID = applied.ID
if !m.markAppliedOnSuccess { if !m.markAppliedOnSuccess {
if err := m.MarkApplied(ctx, migration); err != nil { if err := m.MarkApplied(ctx, migration); err != nil {
return group, err return applied, err
}
} }
group.Migrations = migrations[:i+1] // Add to the group before upping the migration when always marking applied
applied.Migrations = append(applied.Migrations, *migration)
}
if !cfg.nop && migration.Up != nil { if !cfg.nop && migration.Up != nil {
if err := migration.Up(ctx, m.db); err != nil { if err := migration.Up(ctx, m.db); err != nil {
return group, err return applied, err
} }
} }
if m.markAppliedOnSuccess { if m.markAppliedOnSuccess {
if err := m.MarkApplied(ctx, migration); err != nil { if err := m.MarkApplied(ctx, migration); err != nil {
return group, err return applied, err
} }
// Add to the group after upping the migration when marking applied on success
applied.Migrations = append(applied.Migrations, *migration)
} }
} }
return group, nil return applied, nil
} }
func (m *Migrator) Rollback(ctx context.Context, opts ...MigrationOption) (*MigrationGroup, error) { func (m *Migrator) Rollback(ctx context.Context, opts ...MigrationOption) (*MigrationGroup, error) {
@ -200,25 +207,35 @@ func (m *Migrator) Rollback(ctx context.Context, opts ...MigrationOption) (*Migr
lastGroup := migrations.LastGroup() lastGroup := migrations.LastGroup()
// Create empty group to track unapplied migrations
unapplied := new(MigrationGroup)
unapplied.ID = lastGroup.ID
for i := len(lastGroup.Migrations) - 1; i >= 0; i-- { for i := len(lastGroup.Migrations) - 1; i >= 0; i-- {
migration := &lastGroup.Migrations[i] migration := &lastGroup.Migrations[i]
if !m.markAppliedOnSuccess { if !m.markAppliedOnSuccess {
if err := m.MarkUnapplied(ctx, migration); err != nil { if err := m.MarkUnapplied(ctx, migration); err != nil {
return lastGroup, err return unapplied, err
} }
// Add to the group before downing the migration when always marking unapplied
unapplied.Migrations = append(unapplied.Migrations, *migration)
} }
if !cfg.nop && migration.Down != nil { if !cfg.nop && migration.Down != nil {
if err := migration.Down(ctx, m.db); err != nil { if err := migration.Down(ctx, m.db); err != nil {
return lastGroup, err return unapplied, err
} }
} }
if m.markAppliedOnSuccess { if m.markAppliedOnSuccess {
if err := m.MarkUnapplied(ctx, migration); err != nil { if err := m.MarkUnapplied(ctx, migration); err != nil {
return lastGroup, err return unapplied, err
} }
// Add to the group after downing the migration when marking unapplied on success
unapplied.Migrations = append(unapplied.Migrations, *migration)
} }
} }