Skip to content

Commit

Permalink
feat: add transaction option to CreateSQLMigrations
Browse files Browse the repository at this point in the history
Allow CreateSQLMigrations to use .tx.sql and use a transactional template
  • Loading branch information
codeliger committed Oct 6, 2023
1 parent 8a43835 commit 6471c12
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 6 deletions.
2 changes: 1 addition & 1 deletion example/migrate/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ func newDBCommand(migrator *migrate.Migrator) *cli.Command {
Usage: "create up and down SQL migrations",
Action: func(c *cli.Context) error {
name := strings.Join(c.Args().Slice(), "_")
files, err := migrator.CreateSQLMigrations(c.Context, name)
files, err := migrator.CreateSQLMigrations(c.Context, name, false)
if err != nil {
return err
}
Expand Down
4 changes: 4 additions & 0 deletions migrate/migration.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,10 @@ SELECT 1
SELECT 2
`

const transactionalSQLTemplate = `SET statement_timeout = 0;
SELECT 1;`

//------------------------------------------------------------------------------

type MigrationSlice []Migration
Expand Down
23 changes: 18 additions & 5 deletions migrate/migrator.go
Original file line number Diff line number Diff line change
Expand Up @@ -268,29 +268,42 @@ func (m *Migrator) CreateGoMigration(
}

// CreateSQLMigrations creates an up and down SQL migration files.
func (m *Migrator) CreateSQLMigrations(ctx context.Context, name string) ([]*MigrationFile, error) {
func (m *Migrator) CreateSQLMigrations(ctx context.Context, name string, transactional bool) ([]*MigrationFile, error) {
name, err := m.genMigrationName(name)
if err != nil {
return nil, err
}

up, err := m.createSQL(ctx, name+".up.sql")
upSuffix := ".up.sql"
downSuffix := ".down.sql"

if transactional {
upSuffix = ".up.tx.sql"
downSuffix = ".down.tx.sql"
}

up, err := m.createSQL(ctx, name+upSuffix, transactional)
if err != nil {
return nil, err
}

down, err := m.createSQL(ctx, name+".down.sql")
down, err := m.createSQL(ctx, name+downSuffix, transactional)
if err != nil {
return nil, err
}

return []*MigrationFile{up, down}, nil
}

func (m *Migrator) createSQL(ctx context.Context, fname string) (*MigrationFile, error) {
func (m *Migrator) createSQL(ctx context.Context, fname string, transactional bool) (*MigrationFile, error) {
fpath := filepath.Join(m.migrations.getDirectory(), fname)

if err := os.WriteFile(fpath, []byte(sqlTemplate), 0o644); err != nil {
template := sqlTemplate
if transactional {
template = transactionalSQLTemplate
}

if err := os.WriteFile(fpath, []byte(template), 0o644); err != nil {
return nil, err
}

Expand Down

0 comments on commit 6471c12

Please sign in to comment.