mirror of
https://github.com/hanzo-fi/stack.git
synced 2026-10-30 20:34:43 +00:00
71 lines
1.2 KiB
Go
71 lines
1.2 KiB
Go
package sqlutils
|
|
|
|
import (
|
|
"database/sql"
|
|
|
|
"github.com/lib/pq"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// postgresError is an helper to wrap postgres errors into storage errors
|
|
func PostgresError(err error) error {
|
|
if err != nil {
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
return ErrNotFound
|
|
}
|
|
|
|
switch pge := err.(type) {
|
|
case *pq.Error:
|
|
switch pge.Code {
|
|
case "23505":
|
|
return newErrConstraintsFailed(err)
|
|
case "53300":
|
|
return newErrTooManyClient(err)
|
|
}
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
var (
|
|
ErrNotFound = errors.New("not found")
|
|
ErrBucketAlreadyExists = errors.New("bucket already exists")
|
|
ErrStoreAlreadyExists = errors.New("store already exists")
|
|
ErrStoreNotFound = errors.New("store not found")
|
|
)
|
|
|
|
func IsNotFoundError(err error) bool {
|
|
return errors.Is(err, ErrNotFound)
|
|
}
|
|
|
|
type errConstraintsFailed struct {
|
|
err error
|
|
}
|
|
|
|
func (e errConstraintsFailed) Error() string {
|
|
return e.err.Error()
|
|
}
|
|
|
|
func newErrConstraintsFailed(err error) *errConstraintsFailed {
|
|
return &errConstraintsFailed{
|
|
err: err,
|
|
}
|
|
}
|
|
|
|
type errTooManyClient struct {
|
|
err error
|
|
}
|
|
|
|
func (e errTooManyClient) Error() string {
|
|
return e.err.Error()
|
|
}
|
|
|
|
func newErrTooManyClient(err error) *errTooManyClient {
|
|
return &errTooManyClient{
|
|
err: err,
|
|
}
|
|
}
|