mirror of
https://github.com/status-im/migrate.git
synced 2025-02-23 00:08:06 +00:00
* Let database.Open() use schemeFromURL as well Otherwise it will fail on MySQL DSNs. Moved schemeFromURL into the database package. Also removed databaseSchemeFromURL and sourceSchemeFromURL as they were just calling schemeFromURL. Fixes https://github.com/golang-migrate/migrate/pull/265#issuecomment-522301237 * Moved url functions into internal/url Also merged the test cases. * Add some database tests to improve coverage * Fix suggestions
63 lines
1.3 KiB
Go
63 lines
1.3 KiB
Go
package migrate
|
|
|
|
import (
|
|
"fmt"
|
|
nurl "net/url"
|
|
"strings"
|
|
)
|
|
|
|
// MultiError holds multiple errors.
|
|
//
|
|
// Deprecated: Use github.com/hashicorp/go-multierror instead
|
|
type MultiError struct {
|
|
Errs []error
|
|
}
|
|
|
|
// NewMultiError returns an error type holding multiple errors.
|
|
//
|
|
// Deprecated: Use github.com/hashicorp/go-multierror instead
|
|
//
|
|
func NewMultiError(errs ...error) MultiError {
|
|
compactErrs := make([]error, 0)
|
|
for _, e := range errs {
|
|
if e != nil {
|
|
compactErrs = append(compactErrs, e)
|
|
}
|
|
}
|
|
return MultiError{compactErrs}
|
|
}
|
|
|
|
// Error implements error. Multiple errors are concatenated with 'and's.
|
|
func (m MultiError) Error() string {
|
|
var strs = make([]string, 0)
|
|
for _, e := range m.Errs {
|
|
if len(e.Error()) > 0 {
|
|
strs = append(strs, e.Error())
|
|
}
|
|
}
|
|
return strings.Join(strs, " and ")
|
|
}
|
|
|
|
// suint safely converts int to uint
|
|
// see https://goo.gl/wEcqof
|
|
// see https://goo.gl/pai7Dr
|
|
func suint(n int) uint {
|
|
if n < 0 {
|
|
panic(fmt.Sprintf("suint(%v) expects input >= 0", n))
|
|
}
|
|
return uint(n)
|
|
}
|
|
|
|
// FilterCustomQuery filters all query values starting with `x-`
|
|
func FilterCustomQuery(u *nurl.URL) *nurl.URL {
|
|
ux := *u
|
|
vx := make(nurl.Values)
|
|
for k, v := range ux.Query() {
|
|
if len(k) <= 1 || (len(k) > 1 && k[0:2] != "x-") {
|
|
vx[k] = v
|
|
}
|
|
}
|
|
ux.RawQuery = vx.Encode()
|
|
return &ux
|
|
}
|