mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-12-29 10:36:31 +00:00
1de41f64f2
More linkanme fixes.
117 lines
3 KiB
Go
117 lines
3 KiB
Go
package util
|
|
|
|
import (
|
|
"runtime"
|
|
"strconv"
|
|
)
|
|
|
|
type ErrorString string
|
|
|
|
func (e ErrorString) Error() string { return string(e) }
|
|
|
|
const (
|
|
NilErr = ErrorString("sqlite3: invalid memory address or null pointer dereference")
|
|
OOMErr = ErrorString("sqlite3: out of memory")
|
|
RangeErr = ErrorString("sqlite3: index out of range")
|
|
NoNulErr = ErrorString("sqlite3: missing NUL terminator")
|
|
NoBinaryErr = ErrorString("sqlite3: no SQLite binary embed/set/loaded")
|
|
BadBinaryErr = ErrorString("sqlite3: invalid SQLite binary embed/set/loaded")
|
|
TimeErr = ErrorString("sqlite3: invalid time value")
|
|
WhenceErr = ErrorString("sqlite3: invalid whence")
|
|
OffsetErr = ErrorString("sqlite3: invalid offset")
|
|
TailErr = ErrorString("sqlite3: multiple statements")
|
|
IsolationErr = ErrorString("sqlite3: unsupported isolation level")
|
|
ValueErr = ErrorString("sqlite3: unsupported value")
|
|
NoVFSErr = ErrorString("sqlite3: no such vfs: ")
|
|
)
|
|
|
|
func AssertErr() ErrorString {
|
|
msg := "sqlite3: assertion failed"
|
|
if _, file, line, ok := runtime.Caller(1); ok {
|
|
msg += " (" + file + ":" + strconv.Itoa(line) + ")"
|
|
}
|
|
return ErrorString(msg)
|
|
}
|
|
|
|
func ErrorCodeString(rc uint32) string {
|
|
switch rc {
|
|
case ABORT_ROLLBACK:
|
|
return "sqlite3: abort due to ROLLBACK"
|
|
case ROW:
|
|
return "sqlite3: another row available"
|
|
case DONE:
|
|
return "sqlite3: no more rows available"
|
|
}
|
|
switch rc & 0xff {
|
|
case OK:
|
|
return "sqlite3: not an error"
|
|
case ERROR:
|
|
return "sqlite3: SQL logic error"
|
|
case INTERNAL:
|
|
break
|
|
case PERM:
|
|
return "sqlite3: access permission denied"
|
|
case ABORT:
|
|
return "sqlite3: query aborted"
|
|
case BUSY:
|
|
return "sqlite3: database is locked"
|
|
case LOCKED:
|
|
return "sqlite3: database table is locked"
|
|
case NOMEM:
|
|
return "sqlite3: out of memory"
|
|
case READONLY:
|
|
return "sqlite3: attempt to write a readonly database"
|
|
case INTERRUPT:
|
|
return "sqlite3: interrupted"
|
|
case IOERR:
|
|
return "sqlite3: disk I/O error"
|
|
case CORRUPT:
|
|
return "sqlite3: database disk image is malformed"
|
|
case NOTFOUND:
|
|
return "sqlite3: unknown operation"
|
|
case FULL:
|
|
return "sqlite3: database or disk is full"
|
|
case CANTOPEN:
|
|
return "sqlite3: unable to open database file"
|
|
case PROTOCOL:
|
|
return "sqlite3: locking protocol"
|
|
case FORMAT:
|
|
break
|
|
case SCHEMA:
|
|
return "sqlite3: database schema has changed"
|
|
case TOOBIG:
|
|
return "sqlite3: string or blob too big"
|
|
case CONSTRAINT:
|
|
return "sqlite3: constraint failed"
|
|
case MISMATCH:
|
|
return "sqlite3: datatype mismatch"
|
|
case MISUSE:
|
|
return "sqlite3: bad parameter or other API misuse"
|
|
case NOLFS:
|
|
break
|
|
case AUTH:
|
|
return "sqlite3: authorization denied"
|
|
case EMPTY:
|
|
break
|
|
case RANGE:
|
|
return "sqlite3: column index out of range"
|
|
case NOTADB:
|
|
return "sqlite3: file is not a database"
|
|
case NOTICE:
|
|
return "sqlite3: notification message"
|
|
case WARNING:
|
|
return "sqlite3: warning message"
|
|
}
|
|
return "sqlite3: unknown error"
|
|
}
|
|
|
|
type ErrorJoiner []error
|
|
|
|
func (j *ErrorJoiner) Join(errs ...error) {
|
|
for _, err := range errs {
|
|
if err != nil {
|
|
*j = append(*j, err)
|
|
}
|
|
}
|
|
}
|