1package db23import (4 "database/sql"5 "errors"67 sqlite "modernc.org/sqlite"8 sqlitelib "modernc.org/sqlite/lib"9)1011var (12 // ErrDuplicateKey is a constraint violation error.13 ErrDuplicateKey = errors.New("duplicate key value violates table constraint")1415 // ErrRecordNotFound is returned when a record is not found.16 ErrRecordNotFound = sql.ErrNoRows17)1819// WrapError is a convenient function that unite various database driver20// errors to consistent errors.21func WrapError(err error) error {22 if err != nil {23 if errors.Is(err, sql.ErrNoRows) {24 return ErrRecordNotFound25 }2627 // Handle sqlite constraint error.28 if liteErr, ok := err.(*sqlite.Error); ok {29 code := liteErr.Code()30 if code == sqlitelib.SQLITE_CONSTRAINT_PRIMARYKEY ||31 code == sqlitelib.SQLITE_CONSTRAINT_FOREIGNKEY ||32 code == sqlitelib.SQLITE_CONSTRAINT_UNIQUE {33 return ErrDuplicateKey34 }35 }3637 }38 return err39}