mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-02-23 14:40:30 +01:00
In this commit, we use exhaustive build tags to ensure that we can always build the `sqlbase` package, independent of the set build tags. To do this, we move the type declarations _into_ the parsing functions. This then allows us to create two versions for each db: with the db, and without it. To avoid a module tag round trip to get this working, we use a local replace for now. Once this is merged in, we can do the tag (along side rc3), then remove the replace.
64 lines
1.7 KiB
Go
64 lines
1.7 KiB
Go
package sqlbase
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
var (
|
|
// ErrRetriesExceeded is returned when a transaction is retried more
|
|
// than the max allowed valued without a success.
|
|
ErrRetriesExceeded = errors.New("db tx retries exceeded")
|
|
)
|
|
|
|
// MapSQLError attempts to interpret a given error as a database agnostic SQL
|
|
// error.
|
|
func MapSQLError(err error) error {
|
|
// Attempt to interpret the error as a sqlite error.
|
|
if sqliteErr := parseSqliteError(err); sqliteErr != nil {
|
|
return sqliteErr
|
|
}
|
|
|
|
// Attempt to interpret the error as a postgres error.
|
|
if postgresErr := parsePostgresError(err); postgresErr != nil {
|
|
return postgresErr
|
|
}
|
|
|
|
// Return original error if it could not be classified as a database
|
|
// specific error.
|
|
return err
|
|
}
|
|
|
|
// ErrSQLUniqueConstraintViolation is an error type which represents a database
|
|
// agnostic SQL unique constraint violation.
|
|
type ErrSQLUniqueConstraintViolation struct {
|
|
DBError error
|
|
}
|
|
|
|
func (e ErrSQLUniqueConstraintViolation) Error() string {
|
|
return fmt.Sprintf("sql unique constraint violation: %v", e.DBError)
|
|
}
|
|
|
|
// ErrSerializationError is an error type which represents a database agnostic
|
|
// error that a transaction couldn't be serialized with other concurrent db
|
|
// transactions.
|
|
type ErrSerializationError struct {
|
|
DBError error
|
|
}
|
|
|
|
// Unwrap returns the wrapped error.
|
|
func (e ErrSerializationError) Unwrap() error {
|
|
return e.DBError
|
|
}
|
|
|
|
// Error returns the error message.
|
|
func (e ErrSerializationError) Error() string {
|
|
return e.DBError.Error()
|
|
}
|
|
|
|
// IsSerializationError returns true if the given error is a serialization
|
|
// error.
|
|
func IsSerializationError(err error) bool {
|
|
var serializationError *ErrSerializationError
|
|
return errors.As(err, &serializationError)
|
|
}
|