Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d574676

Browse files
committed
drop custom query params
1 parent f458215 commit d574676

File tree

4 files changed

+48
-10
lines changed

4 files changed

+48
-10
lines changed

database/postgres/postgres.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
nurl "net/url"
1010

1111
"github.com/lib/pq"
12+
"github.com/mattes/migrate"
1213
"github.com/mattes/migrate/database"
1314
)
1415

@@ -30,6 +31,14 @@ type Config struct {
3031
DatabaseName string
3132
}
3233

34+
type Postgres struct {
35+
db *sql.DB
36+
isLocked bool
37+
38+
// Open and WithInstance need to garantuee that config is never nil
39+
config *Config
40+
}
41+
3342
func WithInstance(instance *sql.DB, config *Config) (database.Driver, error) {
3443
if config == nil {
3544
return nil, ErrNilConfig
@@ -63,21 +72,13 @@ func WithInstance(instance *sql.DB, config *Config) (database.Driver, error) {
6372
return px, nil
6473
}
6574

66-
type Postgres struct {
67-
db *sql.DB
68-
isLocked bool
69-
70-
// Open and WithInstance need to garantuee that config is never nil
71-
config *Config
72-
}
73-
7475
func (p *Postgres) Open(url string) (database.Driver, error) {
7576
purl, err := nurl.Parse(url)
7677
if err != nil {
7778
return nil, err
7879
}
7980

80-
db, err := sql.Open("postgres", url)
81+
db, err := sql.Open("postgres", migrate.FilterCustomQuery(purl).String())
8182
if err != nil {
8283
return nil, err
8384
}
@@ -155,7 +156,7 @@ func (p *Postgres) Run(version int, migration io.Reader) error {
155156
if dirty, err := p.isDirty(); err != nil {
156157
return err
157158
} else if dirty {
158-
return ErrDatabaseDirty
159+
return ErrDatabaseDirty // TODO: add more verbose error
159160
}
160161

161162
if migration == nil {

database/postgres/postgres_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,18 @@ func TestMultiStatement(t *testing.T) {
7878
})
7979
}
8080

81+
func TestFilterCustomQuery(t *testing.T) {
82+
mt.ParallelTest(t, versions, isReady,
83+
func(t *testing.T, i mt.Instance) {
84+
p := &Postgres{}
85+
addr := fmt.Sprintf("postgres://postgres@%v:%v/postgres?sslmode=disable&x-custom=foobar", i.Host(), i.Port())
86+
_, err := p.Open(addr)
87+
if err != nil {
88+
t.Fatalf("%v", err)
89+
}
90+
})
91+
}
92+
8193
func TestWithSchema(t *testing.T) {
8294
mt.ParallelTest(t, versions, isReady,
8395
func(t *testing.T, i mt.Instance) {

util.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,16 @@ func schemeFromUrl(url string) (string, error) {
9090

9191
return u.Scheme, nil
9292
}
93+
94+
// FilterCustomQuery filters all query values starting with `x-`
95+
func FilterCustomQuery(u *nurl.URL) *nurl.URL {
96+
ux := *u
97+
vx := make(nurl.Values)
98+
for k, v := range ux.Query() {
99+
if len(k) <= 1 || (len(k) > 1 && k[0:2] != "x-") {
100+
vx[k] = v
101+
}
102+
}
103+
ux.RawQuery = vx.Encode()
104+
return &ux
105+
}

util_test.go

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

33
import (
4+
nurl "net/url"
45
"testing"
56
)
67

@@ -18,3 +19,14 @@ func TestSuint(t *testing.T) {
1819
t.Fatalf("expected 0, got %v", u)
1920
}
2021
}
22+
23+
func TestFilterCustomQuery(t *testing.T) {
24+
n, err := nurl.Parse("foo://host?a=b&x-custom=foo&c=d")
25+
if err != nil {
26+
t.Fatal(err)
27+
}
28+
nx := FilterCustomQuery(n).Query()
29+
if nx.Get("x-custom") != "" {
30+
t.Fatalf("didn't expect x-custom")
31+
}
32+
}

0 commit comments

Comments
 (0)