Skip to content

Commit b49ce11

Browse files
committed
✨ v2 migrator
1 parent 188d910 commit b49ce11

13 files changed

Lines changed: 188 additions & 171 deletions

.golangci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ linters-settings:
77
- performance
88
- style
99
goimports:
10-
local-prefixes: github.com/golangci/golangci-lint
10+
local-prefixes: github.com/lawzava/go-pg-migrate
1111
govet:
1212
check-shadowing: true
1313
misspell:

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
# go-pg-migrate
1010

11-
CLI-friendly package for [go-pg](https://github.com/go-pg/pg) migrations management.
11+
CLI-friendly package for PostgreSQL migrations management poweder by [pgx](https://github.com/jackc/pgx)
1212

1313
## Installation
1414

examples/1_create_users_table.go

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,29 @@ import (
44
"fmt"
55

66
migrate "github.com/lawzava/go-pg-migrate"
7-
8-
"github.com/go-pg/pg/v10"
97
)
108

11-
var m1 = &migrate.Migration{
12-
Name: "Create Users Table",
13-
Number: 1,
14-
Forwards: func(tx *pg.Tx) error {
15-
_, err := tx.Exec("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)")
16-
if err != nil {
17-
return fmt.Errorf("failed to create users table: %w", err)
18-
}
9+
func init() {
10+
migrate.AddMigration(
11+
&migrate.Migration{
12+
Name: "Create Users Table",
13+
Number: 1,
14+
Up: func(tx migrate.Tx) error {
15+
_, err := tx.Exec("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)")
16+
if err != nil {
17+
return fmt.Errorf("failed to create users table: %w", err)
18+
}
1919

20-
return nil
21-
},
22-
Backwards: func(tx *pg.Tx) error {
23-
_, err := tx.Exec("DROP TABLE users")
24-
if err != nil {
25-
return fmt.Errorf("failed to drop users table: %w", err)
26-
}
20+
return nil
21+
},
22+
Down: func(tx migrate.Tx) error {
23+
_, err := tx.Exec("DROP TABLE users")
24+
if err != nil {
25+
return fmt.Errorf("failed to drop users table: %w", err)
26+
}
2727

28-
return nil
29-
},
28+
return nil
29+
},
30+
},
31+
)
3032
}

examples/2_add_email_for_users.go

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,29 @@ import (
44
"fmt"
55

66
migrate "github.com/lawzava/go-pg-migrate"
7-
8-
"github.com/go-pg/pg/v10"
97
)
108

11-
var m2 = &migrate.Migration{
12-
Name: "Add Email For Users",
13-
Number: 2,
14-
Forwards: func(tx *pg.Tx) error {
15-
_, err := tx.Exec("ALTER TABLE users ADD COLUMN email TEXT")
16-
if err != nil {
17-
return fmt.Errorf("failed to alter users table to add email: %w", err)
18-
}
9+
func init() {
10+
migrate.AddMigration(
11+
&migrate.Migration{
12+
Name: "Add Email For Users",
13+
Number: 2,
14+
Up: func(tx migrate.Tx) error {
15+
_, err := tx.Exec("ALTER TABLE users ADD COLUMN email TEXT")
16+
if err != nil {
17+
return fmt.Errorf("failed to alter users table to add email: %w", err)
18+
}
1919

20-
return nil
21-
},
22-
Backwards: func(tx *pg.Tx) error {
23-
_, err := tx.Exec("ALTER TABLE users DROP COLUMN email")
24-
if err != nil {
25-
return fmt.Errorf("failed to drop email column for users table: %w", err)
26-
}
20+
return nil
21+
},
22+
Down: func(tx migrate.Tx) error {
23+
_, err := tx.Exec("ALTER TABLE users DROP COLUMN email")
24+
if err != nil {
25+
return fmt.Errorf("failed to drop email column for users table: %w", err)
26+
}
2727

28-
return nil
29-
},
28+
return nil
29+
},
30+
},
31+
)
3032
}

examples/3_add_address_for_users.go

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,30 @@ package main
33
import (
44
"fmt"
55

6-
"github.com/go-pg/pg/v10"
76
migrate "github.com/lawzava/go-pg-migrate"
87
)
98

10-
var m3 = &migrate.Migration{
11-
Name: "Add Address For Users",
12-
Number: 3,
13-
Forwards: func(tx *pg.Tx) error {
14-
_, err := tx.Exec("ALTER TABLE users ADD COLUMN address TEXT")
15-
if err != nil {
16-
return fmt.Errorf("failed to alter users table to add address: %w", err)
17-
}
9+
func init() {
10+
migrate.AddMigration(
11+
&migrate.Migration{
12+
Name: "Add Address For Users",
13+
Number: 3,
14+
Up: func(tx migrate.Tx) error {
15+
_, err := tx.Exec("ALTER TABLE users ADD COLUMN address TEXT")
16+
if err != nil {
17+
return fmt.Errorf("failed to alter users table to add address: %w", err)
18+
}
1819

19-
return nil
20-
},
21-
Backwards: func(tx *pg.Tx) error {
22-
_, err := tx.Exec("ALTER TABLE users DROP COLUMN address")
23-
if err != nil {
24-
return fmt.Errorf("failed to drop address column for users table: %w", err)
25-
}
20+
return nil
21+
},
22+
Down: func(tx migrate.Tx) error {
23+
_, err := tx.Exec("ALTER TABLE users DROP COLUMN address")
24+
if err != nil {
25+
return fmt.Errorf("failed to drop address column for users table: %w", err)
26+
}
2627

27-
return nil
28-
},
28+
return nil
29+
},
30+
},
31+
)
2932
}

examples/main.go

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,14 @@ import (
44
"flag"
55
"log"
66

7-
"github.com/go-pg/pg/v10"
87
migrate "github.com/lawzava/go-pg-migrate"
98
)
109

1110
func main() {
12-
db := pg.Connect(&pg.Options{
13-
User: "postgres",
14-
Database: "migrate-test",
15-
})
16-
1711
var opt migrate.Options
1812

13+
flag.StringVar(&opt.DatabaseURI, "database-uri", "postgres://postgres@localhost:5432/migrate-test",
14+
"database uri to connect to")
1915
flag.UintVar(&opt.VersionNumberToApply, "version", 0,
2016
"migrate to specified printVersion; 0 will apply all forward migrations")
2117
flag.BoolVar(&opt.PrintInfoAndExit, "current", false,
@@ -26,8 +22,7 @@ func main() {
2622
"refresh database, should be set for first run (when DB is empty)")
2723
flag.Parse()
2824

29-
m, err := migrate.New(db, opt,
30-
m1, m2, m3)
25+
m, err := migrate.New(opt)
3126
if err != nil {
3227
log.Fatal(err)
3328
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/go-pg/pg/v10 v10.10.6
99
github.com/golang/snappy v0.0.2 // indirect
1010
github.com/google/go-cmp v0.5.6 // indirect
11-
github.com/lib/pq v1.9.0 // indirect
11+
github.com/lib/pq v1.10.4
1212
github.com/nwaples/rardecode v1.1.0 // indirect
1313
github.com/pierrec/lz4 v2.6.0+incompatible // indirect
1414
github.com/rs/zerolog v1.26.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
5959
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
6060
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
6161
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
62-
github.com/lib/pq v1.9.0 h1:L8nSXQQzAYByakOFMTwpjRoHsMJklur4Gi59b6VivR8=
63-
github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
62+
github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk=
63+
github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
6464
github.com/mholt/archiver v3.1.1+incompatible h1:1dCVxuqs0dJseYEhi5pl7MYPH9zDa1wBi7mF09cbNkU=
6565
github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU=
6666
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=

migrate.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package migrate
22

33
import (
4+
"context"
45
"errors"
56
"fmt"
67
"sort"
78

8-
"github.com/go-pg/pg/v10"
99
"github.com/rs/zerolog/log"
1010
)
1111

@@ -16,6 +16,9 @@ type InfoLogger func(format string, args ...interface{})
1616

1717
// Options define applied migrations options and behavior.
1818
type Options struct {
19+
// DatabaseURI is the database connection string. Format 'postgres://user:password@host:port/database?sslmode=disable'.
20+
DatabaseURI string
21+
1922
// VersionNumberToApply defines target version for migration actions.
2023
VersionNumberToApply uint
2124

@@ -49,6 +52,7 @@ type Migrate interface {
4952

5053
type migrate struct {
5154
task *migrationTask
55+
ctx context.Context
5256
}
5357

5458
// Migrate executes actual migrations based on the specified options.
@@ -57,7 +61,7 @@ func (m migrate) Migrate() error {
5761
}
5862

5963
// New creates new migration instance.
60-
func New(db *pg.DB, opt Options, migrations ...*Migration) (Migrate, error) {
64+
func New(opt Options) (Migrate, error) {
6165
if err := validateMigrations(migrations); err != nil {
6266
return nil, err
6367
}
@@ -68,10 +72,15 @@ func New(db *pg.DB, opt Options, migrations ...*Migration) (Migrate, error) {
6872
}
6973
}
7074

75+
repo, err := newRepo(opt.DatabaseURI)
76+
if err != nil {
77+
return nil, err
78+
}
79+
7180
return migrate{
7281
task: &migrationTask{
7382
migrations: mapMigrations(migrations),
74-
repo: newRepo(db),
83+
repo: repo,
7584
opt: opt,
7685
},
7786
}, nil

0 commit comments

Comments
 (0)