summaryrefslogtreecommitdiff
path: root/errors.zig
diff options
context:
space:
mode:
Diffstat (limited to 'errors.zig')
-rw-r--r--errors.zig268
1 files changed, 268 insertions, 0 deletions
diff --git a/errors.zig b/errors.zig
new file mode 100644
index 0000000..cad107b
--- /dev/null
+++ b/errors.zig
@@ -0,0 +1,268 @@
1const std = @import("std");
2
3const c = @cImport({
4 @cInclude("sqlite3.h");
5});
6
7pub const SQLiteExtendedIOError = error{
8 SQLiteIOErrRead,
9 SQLiteIOErrShortRead,
10 SQLiteIOErrWrite,
11 SQLiteIOErrFsync,
12 SQLiteIOErrDirFsync,
13 SQLiteIOErrTruncate,
14 SQLiteIOErrFstat,
15 SQLiteIOErrUnlock,
16 SQLiteIOErrRDLock,
17 SQLiteIOErrDelete,
18 SQLiteIOErrBlocked,
19 SQLiteIOErrNoMem,
20 SQLiteIOErrAccess,
21 SQLiteIOErrCheckReservedLock,
22 SQLiteIOErrLock,
23 SQLiteIOErrClose,
24 SQLiteIOErrDirClose,
25 SQLiteIOErrSHMOpen,
26 SQLiteIOErrSHMSize,
27 SQLiteIOErrSHMLock,
28 SQLiteIOErrSHMMap,
29 SQLiteIOErrSeek,
30 SQLiteIOErrDeleteNoEnt,
31 SQLiteIOErrMmap,
32 SQLiteIOErrGetTempPath,
33 SQLiteIOErrConvPath,
34 SQLiteIOErrVnode,
35 SQLiteIOErrAuth,
36 SQLiteIOErrBeginAtomic,
37 SQLiteIOErrCommitAtomic,
38 SQLiteIOErrRollbackAtomic,
39 SQLiteIOErrData,
40 SQLiteIOErrCorruptFS,
41};
42
43pub const SQLiteExtendedCantOpenError = error{
44 SQLiteCantOpenNoTempDir,
45 SQLiteCantOpenIsDir,
46 SQLiteCantOpenFullPath,
47 SQLiteCantOpenConvPath,
48 SQLiteCantOpenDirtyWAL,
49 SQLiteCantOpenSymlink,
50};
51
52pub const SQLiteExtendedReadOnlyError = error{
53 SQLiteReadOnlyRecovery,
54 SQLiteReadOnlyCantLock,
55 SQLiteReadOnlyRollback,
56 SQLiteReadOnlyDBMoved,
57 SQLiteReadOnlyCantInit,
58 SQLiteReadOnlyDirectory,
59};
60
61pub const SQLiteExtendedConstraintError = error{
62 SQLiteConstraintCheck,
63 SQLiteConstraintCommitHook,
64 SQLiteConstraintForeignKey,
65 SQLiteConstraintFunction,
66 SQLiteConstraintNotNull,
67 SQLiteConstraintPrimaryKey,
68 SQLiteConstraintTrigger,
69 SQLiteConstraintUnique,
70 SQLiteConstraintVTab,
71 SQLiteConstraintRowID,
72 SQLiteConstraintPinned,
73};
74
75pub const SQLiteExtendedError = error{
76 SQLiteErrorMissingCollSeq,
77 SQLiteErrorRetry,
78 SQLiteErrorSnapshot,
79
80 SQLiteLockedSharedCache,
81 SQLiteLockedVTab,
82
83 SQLiteBusyRecovery,
84 SQLiteBusySnapshot,
85 SQLiteBusyTimeout,
86
87 SQLiteCorruptVTab,
88 SQLiteCorruptSequence,
89 SQLiteCorruptIndex,
90
91 SQLiteAbortRollback,
92};
93
94pub const SQLiteError = error{
95 SQLiteError,
96 SQLiteInternal,
97 SQLitePerm,
98 SQLiteAbort,
99 SQLiteBusy,
100 SQLiteLocked,
101 SQLiteNoMem,
102 SQLiteReadOnly,
103 SQLiteInterrupt,
104 SQLiteIOErr,
105 SQLiteCorrupt,
106 SQLiteNotFound,
107 SQLiteFull,
108 SQLiteCantOpen,
109 SQLiteProtocol,
110 SQLiteEmpty,
111 SQLiteSchema,
112 SQLiteTooBig,
113 SQLiteConstraint,
114 SQLiteMismatch,
115 SQLiteMisuse,
116 SQLiteNoLFS,
117 SQLiteAuth,
118 SQLiteRange,
119 SQLiteNotADatabase,
120 SQLiteNotice,
121 SQLiteWarning,
122};
123
124pub const Error = SQLiteError ||
125 SQLiteExtendedError ||
126 SQLiteExtendedIOError ||
127 SQLiteExtendedCantOpenError ||
128 SQLiteExtendedReadOnlyError ||
129 SQLiteExtendedConstraintError;
130
131pub fn errorFromResultCode(code: c_int) Error {
132 // TODO(vincent): can we do something with comptime here ?
133 // The version number is always static and defined by sqlite.
134
135 // These errors are only available since 3.25.0.
136 if (c.SQLITE_VERSION_NUMBER >= 3025000) {
137 switch (code) {
138 c.SQLITE_ERROR_SNAPSHOT => return error.SQLiteErrorSnapshot,
139 c.SQLITE_LOCKED_VTAB => return error.SQLiteLockedVTab,
140 c.SQLITE_CANTOPEN_DIRTYWAL => return error.SQLiteCantOpenDirtyWAL,
141 c.SQLITE_CORRUPT_SEQUENCE => return error.SQLiteCorruptSequence,
142 else => {},
143 }
144 }
145 // These errors are only available since 3.31.0.
146 if (c.SQLITE_VERSION_NUMBER >= 3031000) {
147 switch (code) {
148 c.SQLITE_CANTOPEN_SYMLINK => return error.SQLiteCantOpenSymlink,
149 c.SQLITE_CONSTRAINT_PINNED => return error.SQLiteConstraintPinned,
150 else => {},
151 }
152 }
153 // These errors are only available since 3.32.0.
154 if (c.SQLITE_VERSION_NUMBER >= 3032000) {
155 switch (code) {
156 c.SQLITE_IOERR_DATA => return error.SQLiteIOErrData, // See https://sqlite.org/cksumvfs.html
157 c.SQLITE_BUSY_TIMEOUT => return error.SQLiteBusyTimeout,
158 c.SQLITE_CORRUPT_INDEX => return error.SQLiteCorruptIndex,
159 else => {},
160 }
161 }
162 // These errors are only available since 3.34.0.
163 if (c.SQLITE_VERSION_NUMBER >= 3034000) {
164 switch (code) {
165 c.SQLITE_IOERR_CORRUPTFS => return error.SQLiteIOErrCorruptFS,
166 else => {},
167 }
168 }
169
170 switch (code) {
171 c.SQLITE_ERROR => return error.SQLiteError,
172 c.SQLITE_INTERNAL => return error.SQLiteInternal,
173 c.SQLITE_PERM => return error.SQLitePerm,
174 c.SQLITE_ABORT => return error.SQLiteAbort,
175 c.SQLITE_BUSY => return error.SQLiteBusy,
176 c.SQLITE_LOCKED => return error.SQLiteLocked,
177 c.SQLITE_NOMEM => return error.SQLiteNoMem,
178 c.SQLITE_READONLY => return error.SQLiteReadOnly,
179 c.SQLITE_INTERRUPT => return error.SQLiteInterrupt,
180 c.SQLITE_IOERR => return error.SQLiteIOErr,
181 c.SQLITE_CORRUPT => return error.SQLiteCorrupt,
182 c.SQLITE_NOTFOUND => return error.SQLiteNotFound,
183 c.SQLITE_FULL => return error.SQLiteFull,
184 c.SQLITE_CANTOPEN => return error.SQLiteCantOpen,
185 c.SQLITE_PROTOCOL => return error.SQLiteProtocol,
186 c.SQLITE_EMPTY => return error.SQLiteEmpty,
187 c.SQLITE_SCHEMA => return error.SQLiteSchema,
188 c.SQLITE_TOOBIG => return error.SQLiteTooBig,
189 c.SQLITE_CONSTRAINT => return error.SQLiteConstraint,
190 c.SQLITE_MISMATCH => return error.SQLiteMismatch,
191 c.SQLITE_MISUSE => return error.SQLiteMisuse,
192 c.SQLITE_NOLFS => return error.SQLiteNoLFS,
193 c.SQLITE_AUTH => return error.SQLiteAuth,
194 c.SQLITE_RANGE => return error.SQLiteRange,
195 c.SQLITE_NOTADB => return error.SQLiteNotADatabase,
196 c.SQLITE_NOTICE => return error.SQLiteNotice,
197 c.SQLITE_WARNING => return error.SQLiteWarning,
198
199 c.SQLITE_ERROR_MISSING_COLLSEQ => return error.SQLiteErrorMissingCollSeq,
200 c.SQLITE_ERROR_RETRY => return error.SQLiteErrorRetry,
201
202 c.SQLITE_IOERR_READ => return error.SQLiteIOErrRead,
203 c.SQLITE_IOERR_SHORT_READ => return error.SQLiteIOErrShortRead,
204 c.SQLITE_IOERR_WRITE => return error.SQLiteIOErrWrite,
205 c.SQLITE_IOERR_FSYNC => return error.SQLiteIOErrFsync,
206 c.SQLITE_IOERR_DIR_FSYNC => return error.SQLiteIOErrDirFsync,
207 c.SQLITE_IOERR_TRUNCATE => return error.SQLiteIOErrTruncate,
208 c.SQLITE_IOERR_FSTAT => return error.SQLiteIOErrFstat,
209 c.SQLITE_IOERR_UNLOCK => return error.SQLiteIOErrUnlock,
210 c.SQLITE_IOERR_RDLOCK => return error.SQLiteIOErrRDLock,
211 c.SQLITE_IOERR_DELETE => return error.SQLiteIOErrDelete,
212 c.SQLITE_IOERR_BLOCKED => return error.SQLiteIOErrBlocked,
213 c.SQLITE_IOERR_NOMEM => return error.SQLiteIOErrNoMem,
214 c.SQLITE_IOERR_ACCESS => return error.SQLiteIOErrAccess,
215 c.SQLITE_IOERR_CHECKRESERVEDLOCK => return error.SQLiteIOErrCheckReservedLock,
216 c.SQLITE_IOERR_LOCK => return error.SQLiteIOErrLock,
217 c.SQLITE_IOERR_CLOSE => return error.SQLiteIOErrClose,
218 c.SQLITE_IOERR_DIR_CLOSE => return error.SQLiteIOErrDirClose,
219 c.SQLITE_IOERR_SHMOPEN => return error.SQLiteIOErrSHMOpen,
220 c.SQLITE_IOERR_SHMSIZE => return error.SQLiteIOErrSHMSize,
221 c.SQLITE_IOERR_SHMLOCK => return error.SQLiteIOErrSHMLock,
222 c.SQLITE_IOERR_SHMMAP => return error.SQLiteIOErrSHMMap,
223 c.SQLITE_IOERR_SEEK => return error.SQLiteIOErrSeek,
224 c.SQLITE_IOERR_DELETE_NOENT => return error.SQLiteIOErrDeleteNoEnt,
225 c.SQLITE_IOERR_MMAP => return error.SQLiteIOErrMmap,
226 c.SQLITE_IOERR_GETTEMPPATH => return error.SQLiteIOErrGetTempPath,
227 c.SQLITE_IOERR_CONVPATH => return error.SQLiteIOErrConvPath,
228 c.SQLITE_IOERR_VNODE => return error.SQLiteIOErrVnode,
229 c.SQLITE_IOERR_AUTH => return error.SQLiteIOErrAuth,
230 c.SQLITE_IOERR_BEGIN_ATOMIC => return error.SQLiteIOErrBeginAtomic,
231 c.SQLITE_IOERR_COMMIT_ATOMIC => return error.SQLiteIOErrCommitAtomic,
232 c.SQLITE_IOERR_ROLLBACK_ATOMIC => return error.SQLiteIOErrRollbackAtomic,
233
234 c.SQLITE_LOCKED_SHAREDCACHE => return error.SQLiteLockedSharedCache,
235
236 c.SQLITE_BUSY_RECOVERY => return error.SQLiteBusyRecovery,
237 c.SQLITE_BUSY_SNAPSHOT => return error.SQLiteBusySnapshot,
238
239 c.SQLITE_CANTOPEN_NOTEMPDIR => return error.SQLiteCantOpenNoTempDir,
240 c.SQLITE_CANTOPEN_ISDIR => return error.SQLiteCantOpenIsDir,
241 c.SQLITE_CANTOPEN_FULLPATH => return error.SQLiteCantOpenFullPath,
242 c.SQLITE_CANTOPEN_CONVPATH => return error.SQLiteCantOpenConvPath,
243
244 c.SQLITE_CORRUPT_VTAB => return error.SQLiteCorruptVTab,
245
246 c.SQLITE_READONLY_RECOVERY => return error.SQLiteReadOnlyRecovery,
247 c.SQLITE_READONLY_CANTLOCK => return error.SQLiteReadOnlyCantLock,
248 c.SQLITE_READONLY_ROLLBACK => return error.SQLiteReadOnlyRollback,
249 c.SQLITE_READONLY_DBMOVED => return error.SQLiteReadOnlyDBMoved,
250 c.SQLITE_READONLY_CANTINIT => return error.SQLiteReadOnlyCantInit,
251 c.SQLITE_READONLY_DIRECTORY => return error.SQLiteReadOnlyDirectory,
252
253 c.SQLITE_ABORT_ROLLBACK => return error.SQLiteAbortRollback,
254
255 c.SQLITE_CONSTRAINT_CHECK => return error.SQLiteConstraintCheck,
256 c.SQLITE_CONSTRAINT_COMMITHOOK => return error.SQLiteConstraintCommitHook,
257 c.SQLITE_CONSTRAINT_FOREIGNKEY => return error.SQLiteConstraintForeignKey,
258 c.SQLITE_CONSTRAINT_FUNCTION => return error.SQLiteConstraintFunction,
259 c.SQLITE_CONSTRAINT_NOTNULL => return error.SQLiteConstraintNotNull,
260 c.SQLITE_CONSTRAINT_PRIMARYKEY => return error.SQLiteConstraintPrimaryKey,
261 c.SQLITE_CONSTRAINT_TRIGGER => return error.SQLiteConstraintTrigger,
262 c.SQLITE_CONSTRAINT_UNIQUE => return error.SQLiteConstraintUnique,
263 c.SQLITE_CONSTRAINT_VTAB => return error.SQLiteConstraintVTab,
264 c.SQLITE_CONSTRAINT_ROWID => return error.SQLiteConstraintRowID,
265
266 else => std.debug.panic("invalid result code {}", .{code}),
267 }
268}