You've already forked go-clickhouse
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:
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user