mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-03-04 17:55:36 +01:00
38 lines
825 B
Go
38 lines
825 B
Go
|
//go:build kvdb_sqlite && !(windows && (arm || 386)) && !(linux && (ppc64 || mips || mipsle || mips64))
|
||
|
|
||
|
package sqlbase
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"fmt"
|
||
|
|
||
|
"modernc.org/sqlite"
|
||
|
sqlite3 "modernc.org/sqlite/lib"
|
||
|
)
|
||
|
|
||
|
// parseSqliteError attempts to parse a sqlite error as a database agnostic
|
||
|
// SQL error.
|
||
|
func parseSqliteError(err error) error {
|
||
|
var sqliteErr *sqlite.Error
|
||
|
if !errors.As(err, &sqliteErr) {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
switch sqliteErr.Code() {
|
||
|
// Handle unique constraint violation error.
|
||
|
case sqlite3.SQLITE_CONSTRAINT_UNIQUE:
|
||
|
return &ErrSQLUniqueConstraintViolation{
|
||
|
DBError: sqliteErr,
|
||
|
}
|
||
|
|
||
|
// Database is currently busy, so we'll need to try again.
|
||
|
case sqlite3.SQLITE_BUSY:
|
||
|
return &ErrSerializationError{
|
||
|
DBError: sqliteErr,
|
||
|
}
|
||
|
|
||
|
default:
|
||
|
return fmt.Errorf("unknown sqlite error: %w", sqliteErr)
|
||
|
}
|
||
|
}
|