dialect/sql/schema: make use of new atlas migration directories and r… (#2873)

* dialect/sql/schema: make use of new atlas migration directories and remove examples for custom formatters

* typo
This commit is contained in:
Jannik Clausen
2022-08-19 14:42:54 +02:00
committed by GitHub
parent a46edf3ac7
commit b6c185a660
6 changed files with 306 additions and 90 deletions

View File

@@ -310,7 +310,6 @@ func (f DiffFunc) Diff(current, desired *schema.Schema) ([]schema.Change, error)
// return changes, nil
// })
// })
//
func WithDiffHook(hooks ...DiffHook) MigrateOption {
return func(a *Atlas) {
a.diffHooks = append(a.diffHooks, hooks...)
@@ -321,7 +320,6 @@ func WithDiffHook(hooks ...DiffHook) MigrateOption {
// returned by the Differ before executing migration planning.
//
// SkipChanges(schema.DropTable|schema.DropColumn)
//
func WithSkipChanges(skip ChangeKind) MigrateOption {
return func(a *Atlas) {
a.skip = skip
@@ -488,7 +486,6 @@ func (f ApplyFunc) Apply(ctx context.Context, conn dialect.ExecQuerier, plan *mi
// return next.Apply(ctx, conn, plan)
// })
// })
//
func WithApplyHook(hooks ...ApplyHook) MigrateOption {
return func(a *Atlas) {
a.applyHook = append(a.applyHook, hooks...)
@@ -608,7 +605,18 @@ func (a *Atlas) init() error {
a.diffHooks = append(a.diffHooks, withoutForeignKeys)
}
if a.dir != nil && a.fmt == nil {
a.fmt = sqltool.GolangMigrateFormatter
switch a.dir.(type) {
case *sqltool.GooseDir:
a.fmt = sqltool.GooseFormatter
case *sqltool.DBMateDir:
a.fmt = sqltool.DBMateFormatter
case *sqltool.FlywayDir:
a.fmt = sqltool.FlywayFormatter
case *sqltool.LiquibaseDir:
a.fmt = sqltool.LiquibaseFormatter
default: // migrate.LocalDir, sqltool.GolangMigrateDir and custom ones
a.fmt = sqltool.GolangMigrateFormatter
}
}
if a.mode == ModeReplay {
// ModeReplay requires a migration directory.

View File

@@ -16,6 +16,7 @@ import (
"ariga.io/atlas/sql/migrate"
"ariga.io/atlas/sql/schema"
"ariga.io/atlas/sql/sqltool"
"entgo.io/ent/dialect"
"entgo.io/ent/dialect/sql"
"entgo.io/ent/schema/field"
@@ -72,6 +73,34 @@ func TestMigrateHookAddTable(t *testing.T) {
require.NoError(t, err)
}
func TestMigrate_Formatter(t *testing.T) {
db, _, err := sqlmock.New()
require.NoError(t, err)
// If no formatter is given it will be set according to the given migration directory implementation.
for _, tt := range []struct {
dir migrate.Dir
fmt migrate.Formatter
}{
{&migrate.LocalDir{}, sqltool.GolangMigrateFormatter},
{&sqltool.GolangMigrateDir{}, sqltool.GolangMigrateFormatter},
{&sqltool.GooseDir{}, sqltool.GooseFormatter},
{&sqltool.DBMateDir{}, sqltool.DBMateFormatter},
{&sqltool.FlywayDir{}, sqltool.FlywayFormatter},
{&sqltool.LiquibaseDir{}, sqltool.LiquibaseFormatter},
{struct{ migrate.Dir }{}, sqltool.GolangMigrateFormatter}, // default one if migration dir is unknown
} {
m, err := NewMigrate(sql.OpenDB("", db), WithDir(tt.dir))
require.NoError(t, err)
require.Equal(t, tt.fmt, m.fmt)
}
// If a formatter is given, it is not overridden.
m, err := NewMigrate(sql.OpenDB("", db), WithDir(&migrate.LocalDir{}), WithFormatter(migrate.DefaultFormatter))
require.NoError(t, err)
require.Equal(t, migrate.DefaultFormatter, m.fmt)
}
func TestMigrate_Diff(t *testing.T) {
ctx := context.Background()
@@ -94,7 +123,7 @@ func TestMigrate_Diff(t *testing.T) {
p = t.TempDir()
d, err = migrate.NewLocalDir(p)
require.NoError(t, err)
m, err = NewMigrate(db, WithDir(d), WithSumFile())
m, err = NewMigrate(db, WithDir(d))
require.NoError(t, err)
require.NoError(t, m.Diff(ctx, &Table{Name: "users"}))
requireFileEqual(t, filepath.Join(p, v+"_changes.up.sql"), "-- create \"users\" table\nCREATE TABLE `users` (, PRIMARY KEY ());\n")