soft-serve

Fork https://github.com/charmbracelet/soft-serve

git clone git://git.lin.moe/go/soft-serve.git

 1package db
 2
 3import (
 4	"database/sql"
 5	"errors"
 6
 7	sqlite "modernc.org/sqlite"
 8	sqlitelib "modernc.org/sqlite/lib"
 9)
10
11var (
12	// ErrDuplicateKey is a constraint violation error.
13	ErrDuplicateKey = errors.New("duplicate key value violates table constraint")
14
15	// ErrRecordNotFound is returned when a record is not found.
16	ErrRecordNotFound = sql.ErrNoRows
17)
18
19// WrapError is a convenient function that unite various database driver
20// errors to consistent errors.
21func WrapError(err error) error {
22	if err != nil {
23		if errors.Is(err, sql.ErrNoRows) {
24			return ErrRecordNotFound
25		}
26
27		// 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 ErrDuplicateKey
34			}
35		}
36
37	}
38	return err
39}