Skip to content

Commit

Permalink
use default port if port is missing in dsn (#668) (#669)
Browse files Browse the repository at this point in the history
  • Loading branch information
bgaifullin authored and arnehormann committed Sep 21, 2017
1 parent be22b30 commit 7785c74
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 2 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,8 @@ See [net.Dial](https://golang.org/pkg/net/#Dial) for more information which netw
In general you should use an Unix domain socket if available and TCP otherwise for best performance.

#### Address
For TCP and UDP networks, addresses have the form `host:port`.
For TCP and UDP networks, addresses have the form `host[:port]`.
If `port` is omitted, the default port will be used.
If `host` is a literal IPv6 address, it must be enclosed in square brackets.
The functions [net.JoinHostPort](https://golang.org/pkg/net/#JoinHostPort) and [net.SplitHostPort](https://golang.org/pkg/net/#SplitHostPort) manipulate addresses in this form.

Expand Down
10 changes: 10 additions & 0 deletions dsn.go
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,9 @@ func ParseDSN(dsn string) (cfg *Config, err error) {
}

}
if cfg.Net == "tcp" {
cfg.Addr = ensureHavePort(cfg.Addr)
}

return
}
Expand Down Expand Up @@ -575,3 +578,10 @@ func parseDSNParams(cfg *Config, params string) (err error) {

return
}

func ensureHavePort(addr string) string {
if _, _, err := net.SplitHostPort(addr); err != nil {
return net.JoinHostPort(addr, "3306")
}
return addr
}
9 changes: 8 additions & 1 deletion dsn_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,14 @@ var testDSNs = []struct {
}, {
"unix/?arg=%2Fsome%2Fpath.ext",
&Config{Net: "unix", Addr: "/tmp/mysql.sock", Params: map[string]string{"arg": "/some/path.ext"}, Collation: "utf8_general_ci", Loc: time.UTC, AllowNativePasswords: true},
}}
}, {
"tcp(127.0.0.1)/dbname",
&Config{Net: "tcp", Addr: "127.0.0.1:3306", DBName: "dbname", Collation: "utf8_general_ci", Loc: time.UTC, AllowNativePasswords: true},
}, {
"tcp(de:ad:be:ef::ca:fe)/dbname",
&Config{Net: "tcp", Addr: "[de:ad:be:ef::ca:fe]:3306", DBName: "dbname", Collation: "utf8_general_ci", Loc: time.UTC, AllowNativePasswords: true},
},
}

func TestDSNParser(t *testing.T) {
for i, tst := range testDSNs {
Expand Down

0 comments on commit 7785c74

Please sign in to comment.