1package util
2
3import (
4 "runtime"
5 "strconv"
6)
7
8type ErrorString string
9
10func (e ErrorString) Error() string { return string(e) }
11
12const (
13 NilErr = ErrorString("sqlite3: invalid memory address or null pointer dereference")
14 OOMErr = ErrorString("sqlite3: out of memory")
15 RangeErr = ErrorString("sqlite3: index out of range")
16 NoNulErr = ErrorString("sqlite3: missing NUL terminator")
17 NoBinaryErr = ErrorString("sqlite3: no SQLite binary embed/set/loaded")
18 BadBinaryErr = ErrorString("sqlite3: invalid SQLite binary embed/set/loaded")
19 TimeErr = ErrorString("sqlite3: invalid time value")
20 WhenceErr = ErrorString("sqlite3: invalid whence")
21 OffsetErr = ErrorString("sqlite3: invalid offset")
22 TailErr = ErrorString("sqlite3: multiple statements")
23 IsolationErr = ErrorString("sqlite3: unsupported isolation level")
24 ValueErr = ErrorString("sqlite3: unsupported value")
25 NoVFSErr = ErrorString("sqlite3: no such vfs: ")
26)
27
28func AssertErr() ErrorString {
29 msg := "sqlite3: assertion failed"
30 if _, file, line, ok := runtime.Caller(1); ok {
31 msg += " (" + file + ":" + strconv.Itoa(line) + ")"
32 }
33 return ErrorString(msg)
34}
35
36func ErrorCodeString(rc uint32) string {
37 switch rc {
38 case ABORT_ROLLBACK:
39 return "sqlite3: abort due to ROLLBACK"
40 case ROW:
41 return "sqlite3: another row available"
42 case DONE:
43 return "sqlite3: no more rows available"
44 }
45 switch rc & 0xff {
46 case OK:
47 return "sqlite3: not an error"
48 case ERROR:
49 return "sqlite3: SQL logic error"
50 case INTERNAL:
51 break
52 case PERM:
53 return "sqlite3: access permission denied"
54 case ABORT:
55 return "sqlite3: query aborted"
56 case BUSY:
57 return "sqlite3: database is locked"
58 case LOCKED:
59 return "sqlite3: database table is locked"
60 case NOMEM:
61 return "sqlite3: out of memory"
62 case READONLY:
63 return "sqlite3: attempt to write a readonly database"
64 case INTERRUPT:
65 return "sqlite3: interrupted"
66 case IOERR:
67 return "sqlite3: disk I/O error"
68 case CORRUPT:
69 return "sqlite3: database disk image is malformed"
70 case NOTFOUND:
71 return "sqlite3: unknown operation"
72 case FULL:
73 return "sqlite3: database or disk is full"
74 case CANTOPEN:
75 return "sqlite3: unable to open database file"
76 case PROTOCOL:
77 return "sqlite3: locking protocol"
78 case EMPTY:
79 break
80 case SCHEMA:
81 return "sqlite3: database schema has changed"
82 case TOOBIG:
83 return "sqlite3: string or blob too big"
84 case CONSTRAINT:
85 return "sqlite3: constraint failed"
86 case MISMATCH:
87 return "sqlite3: datatype mismatch"
88 case MISUSE:
89 return "sqlite3: bad parameter or other API misuse"
90 case NOLFS:
91 break
92 case AUTH:
93 return "sqlite3: authorization denied"
94 case FORMAT:
95 break
96 case RANGE:
97 return "sqlite3: column index out of range"
98 case NOTADB:
99 return "sqlite3: file is not a database"
100 case NOTICE:
101 return "sqlite3: notification message"
102 case WARNING:
103 return "sqlite3: warning message"
104 }
105 return "sqlite3: unknown error"
106}
107
108type ErrorJoiner []error
109
110func (j *ErrorJoiner) Join(errs ...error) {
111 for _, err := range errs {
112 if err != nil {
113 *j = append(*j, err)
114 }
115 }
116}