/
dsn.go
52 lines (47 loc) · 1.1 KB
/
dsn.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package gormx
import (
"fmt"
"strings"
)
type Dsn struct {
User string `json:"user" toml:"user"`
Password string `json:"password" toml:"password"`
Proto string `json:"proto" toml:"proto"`
Host string `json:"host" toml:"host"`
Schema string `json:"schema" toml:"schema"`
Options map[string]string `json:"options" toml:"options"`
}
func (d *Dsn) String() string {
return d.UseDefault()
}
func (d *Dsn) UseDefault() string {
if d.Options == nil {
d.Options = make(map[string]string)
}
var ok bool
_, ok = d.Options["charset"]
if !ok {
d.Options["charset"] = "utf8mb4"
}
_, ok = d.Options["parseTime"]
if !ok {
d.Options["parseTime"] = "True"
}
_, ok = d.Options["loc"]
if !ok {
d.Options["loc"] = "Local"
}
return d.toString()
}
func (d *Dsn) toString() string {
var url = fmt.Sprintf("%s:%s@%s(%s)/%s", d.User, d.Password, d.Proto, d.Host, d.Schema)
if len(d.Options) == 0 {
return url
}
url += "?"
for k, v := range d.Options {
url += fmt.Sprintf("%s=%s&", k, v)
}
url = strings.TrimSuffix(url, "&")
return url
}