2018-05-15 11:30:37 +00:00
|
|
|
package sqlstore
|
2018-05-08 10:31:51 +00:00
|
|
|
|
2018-06-13 08:04:42 +00:00
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
mysql "github.com/go-sql-driver/mysql"
|
|
|
|
)
|
2018-05-08 10:31:51 +00:00
|
|
|
|
|
|
|
type Config struct {
|
2018-05-08 14:21:22 +00:00
|
|
|
Driver string `default:"sqlite3"`
|
2018-05-08 10:31:51 +00:00
|
|
|
Host string `default:""`
|
|
|
|
User string `default:""`
|
|
|
|
Password string `default:""`
|
2018-05-08 10:45:24 +00:00
|
|
|
Name string `default:"fathom.db"`
|
2018-07-12 11:37:52 +00:00
|
|
|
SSLMode string `default:""`
|
2018-05-08 10:31:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Config) DSN() string {
|
|
|
|
var dsn string
|
|
|
|
|
|
|
|
switch c.Driver {
|
|
|
|
case "postgres":
|
|
|
|
dsn = fmt.Sprintf("host=%s user=%s password=%s dbname=%s", c.Host, c.User, c.Password, c.Name)
|
2018-07-12 11:37:52 +00:00
|
|
|
|
|
|
|
if c.SSLMode != "" {
|
|
|
|
dsn = dsn + fmt.Sprintf(" sslmode=%s", c.SSLMode)
|
|
|
|
}
|
2018-05-08 10:31:51 +00:00
|
|
|
case "mysql":
|
2018-06-13 08:04:42 +00:00
|
|
|
mc := mysql.NewConfig()
|
|
|
|
mc.User = c.User
|
|
|
|
mc.Passwd = c.Password
|
|
|
|
mc.Addr = c.Host
|
|
|
|
mc.Net = "tcp"
|
|
|
|
mc.DBName = c.Name
|
|
|
|
mc.Params = map[string]string{
|
|
|
|
"parseTime": "true",
|
|
|
|
"loc": "Local",
|
|
|
|
}
|
2018-07-12 11:37:52 +00:00
|
|
|
if c.SSLMode != "" {
|
|
|
|
mc.Params["tls"] = c.SSLMode
|
|
|
|
}
|
2018-06-13 08:04:42 +00:00
|
|
|
dsn = mc.FormatDSN()
|
2018-05-08 14:21:22 +00:00
|
|
|
case "sqlite3":
|
|
|
|
dsn = c.Name + "?_loc=auto"
|
2018-05-08 10:31:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return dsn
|
|
|
|
}
|