Something went wrong. Try again.
forked from charmbracelet/soft-serve
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849package db
import ( "database/sql" "errors"
"github.com/lib/pq" sqlite "modernc.org/sqlite" sqlitelib "modernc.org/sqlite/lib")
var ( // ErrDuplicateKey is a constraint violation error. ErrDuplicateKey = errors.New("duplicate key value violates table constraint")
// ErrRecordNotFound is returned when a record is not found. ErrRecordNotFound = sql.ErrNoRows)
// WrapError is a convenient function that unite various database driver// errors to consistent errors.func WrapError(err error) error { if err != nil { if errors.Is(err, sql.ErrNoRows) { return ErrRecordNotFound }
// Handle sqlite constraint error. if liteErr, ok := err.(*sqlite.Error); ok { code := liteErr.Code() if code == sqlitelib.SQLITE_CONSTRAINT_PRIMARYKEY || code == sqlitelib.SQLITE_CONSTRAINT_FOREIGNKEY || code == sqlitelib.SQLITE_CONSTRAINT_UNIQUE { return ErrDuplicateKey } }
// Handle postgres constraint error. if pgErr, ok := err.(*pq.Error); ok { if pgErr.Code == "23505" || pgErr.Code == "23503" || pgErr.Code == "23514" { return ErrDuplicateKey } } } return err}