diff --git a/config.go b/config.go index 291be26..df0e9da 100644 --- a/config.go +++ b/config.go @@ -1,14 +1,31 @@ package dbx +import "fmt" + // DBConfig provides a template for database connection configuration compatible // with go-toolkit/config. If used as a field in a struct, remember to include // the `validate:"dive"` tag to ensure that the validator checks sub-fields. type DBConfig struct { User string `validate:"required"` Password string `validate:"required"` - Path string `validate:"hostname_port,required"` + URI string `validate:"hostname_port,required"` Name string `validate:"required"` MaxConn int `validate:"min=1,max=1000"` AutoMigrate bool DebugLog bool } + +// ConnectionString returns a connection string compatible with the given +// SQL dialect. +func (cfg *DBConfig) ConnectionString(dialect Dialect) string { + switch dialect { + case DialectPostgres: + return fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=disable", + cfg.User, cfg.Password, cfg.URI, cfg.Name) + case DialectMySQL: + return fmt.Sprintf("%s:%s@tcp(%s)/%s?parseTime=true&loc=Local", + cfg.User, cfg.Password, cfg.URI, cfg.Name) + default: + panic("unsupported dialect: " + string(dialect)) + } +}