ParseDSN parse the DSN string to a Config.
(dsn string)
| 85 | |
| 86 | // ParseDSN parse the DSN string to a Config. |
| 87 | func ParseDSN(dsn string) (cfg *Config, err error) { |
| 88 | if !strings.HasPrefix(dsn, DBScheme) && !strings.HasPrefix(dsn, DBSchemeAlias) { |
| 89 | dsn = DBScheme + "://" + dsn |
| 90 | } |
| 91 | |
| 92 | var u *url.URL |
| 93 | if u, err = url.Parse(dsn); err != nil { |
| 94 | return nil, err |
| 95 | } |
| 96 | |
| 97 | cfg = NewConfig() |
| 98 | cfg.DatabaseID = u.Host |
| 99 | |
| 100 | q := u.Query() |
| 101 | // option: use_leader, use_follower |
| 102 | cfg.UseLeader, _ = strconv.ParseBool(q.Get(paramUseLeader)) |
| 103 | cfg.UseFollower, _ = strconv.ParseBool(q.Get(paramUseFollower)) |
| 104 | if !cfg.UseLeader && !cfg.UseFollower { |
| 105 | cfg.UseLeader = true |
| 106 | } |
| 107 | cfg.Mirror = q.Get(paramMirror) |
| 108 | cfg.UseDirectRPC, _ = strconv.ParseBool(q.Get(paramUseDirectRPC)) |
| 109 | |
| 110 | return cfg, nil |
| 111 | } |