summaryrefslogtreecommitdiff
path: root/error.zig
diff options
context:
space:
mode:
authorGravatar Vincent Rischmann2020-12-31 22:41:19 +0100
committerGravatar Vincent Rischmann2020-12-31 23:25:38 +0100
commit46f961bf850829dc0358ea8d1c4ea81b9f2508a7 (patch)
tree5e0b6477d55e5d44f28c7f116b7ae8f31fe06fc4 /error.zig
parentfix tests with the new errors (diff)
downloadzig-sqlite-46f961bf850829dc0358ea8d1c4ea81b9f2508a7.tar.gz
zig-sqlite-46f961bf850829dc0358ea8d1c4ea81b9f2508a7.tar.xz
zig-sqlite-46f961bf850829dc0358ea8d1c4ea81b9f2508a7.zip
fix error checks based on the sqlite version
Diffstat (limited to 'error.zig')
-rw-r--r--error.zig48
1 files changed, 38 insertions, 10 deletions
diff --git a/error.zig b/error.zig
index bcccdaf..eb2f00c 100644
--- a/error.zig
+++ b/error.zig
@@ -129,6 +129,44 @@ pub const Error = SQLiteError ||
129 SQLiteExtendedConstraintError; 129 SQLiteExtendedConstraintError;
130 130
131pub fn errorFromResultCode(code: c_int) Error { 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
132 return switch (code) { 170 return switch (code) {
133 c.SQLITE_ERROR => error.SQLiteError, 171 c.SQLITE_ERROR => error.SQLiteError,
134 c.SQLITE_INTERNAL => error.SQLiteInternal, 172 c.SQLITE_INTERNAL => error.SQLiteInternal,
@@ -160,7 +198,6 @@ pub fn errorFromResultCode(code: c_int) Error {
160 198
161 c.SQLITE_ERROR_MISSING_COLLSEQ => error.SQLiteErrorMissingCollSeq, 199 c.SQLITE_ERROR_MISSING_COLLSEQ => error.SQLiteErrorMissingCollSeq,
162 c.SQLITE_ERROR_RETRY => error.SQLiteErrorRetry, 200 c.SQLITE_ERROR_RETRY => error.SQLiteErrorRetry,
163 c.SQLITE_ERROR_SNAPSHOT => error.SQLiteErrorSnapshot,
164 201
165 c.SQLITE_IOERR_READ => error.SQLiteIOErrRead, 202 c.SQLITE_IOERR_READ => error.SQLiteIOErrRead,
166 c.SQLITE_IOERR_SHORT_READ => error.SQLiteIOErrShortRead, 203 c.SQLITE_IOERR_SHORT_READ => error.SQLiteIOErrShortRead,
@@ -193,26 +230,18 @@ pub fn errorFromResultCode(code: c_int) Error {
193 c.SQLITE_IOERR_BEGIN_ATOMIC => error.SQLiteIOErrBeginAtomic, 230 c.SQLITE_IOERR_BEGIN_ATOMIC => error.SQLiteIOErrBeginAtomic,
194 c.SQLITE_IOERR_COMMIT_ATOMIC => error.SQLiteIOErrCommitAtomic, 231 c.SQLITE_IOERR_COMMIT_ATOMIC => error.SQLiteIOErrCommitAtomic,
195 c.SQLITE_IOERR_ROLLBACK_ATOMIC => error.SQLiteIOErrRollbackAtomic, 232 c.SQLITE_IOERR_ROLLBACK_ATOMIC => error.SQLiteIOErrRollbackAtomic,
196 c.SQLITE_IOERR_DATA => error.SQLiteIOErrData,
197 c.SQLITE_IOERR_CORRUPTFS => error.SQLiteIOErrCorruptFS,
198 233
199 c.SQLITE_LOCKED_SHAREDCACHE => error.SQLiteLockedSharedCache, 234 c.SQLITE_LOCKED_SHAREDCACHE => error.SQLiteLockedSharedCache,
200 c.SQLITE_LOCKED_VTAB => error.SQLiteLockedVTab,
201 235
202 c.SQLITE_BUSY_RECOVERY => error.SQLiteBusyRecovery, 236 c.SQLITE_BUSY_RECOVERY => error.SQLiteBusyRecovery,
203 c.SQLITE_BUSY_SNAPSHOT => error.SQLiteBusySnapshot, 237 c.SQLITE_BUSY_SNAPSHOT => error.SQLiteBusySnapshot,
204 c.SQLITE_BUSY_TIMEOUT => error.SQLiteBusyTimeout,
205 238
206 c.SQLITE_CANTOPEN_NOTEMPDIR => error.SQLiteCantOpenNoTempDir, 239 c.SQLITE_CANTOPEN_NOTEMPDIR => error.SQLiteCantOpenNoTempDir,
207 c.SQLITE_CANTOPEN_ISDIR => error.SQLiteCantOpenIsDir, 240 c.SQLITE_CANTOPEN_ISDIR => error.SQLiteCantOpenIsDir,
208 c.SQLITE_CANTOPEN_FULLPATH => error.SQLiteCantOpenFullPath, 241 c.SQLITE_CANTOPEN_FULLPATH => error.SQLiteCantOpenFullPath,
209 c.SQLITE_CANTOPEN_CONVPATH => error.SQLiteCantOpenConvPath, 242 c.SQLITE_CANTOPEN_CONVPATH => error.SQLiteCantOpenConvPath,
210 c.SQLITE_CANTOPEN_DIRTYWAL => error.SQLiteCantOpenDirtyWAL,
211 c.SQLITE_CANTOPEN_SYMLINK => error.SQLiteCantOpenSymlink,
212 243
213 c.SQLITE_CORRUPT_VTAB => error.SQLiteCorruptVTab, 244 c.SQLITE_CORRUPT_VTAB => error.SQLiteCorruptVTab,
214 c.SQLITE_CORRUPT_SEQUENCE => error.SQLiteCorruptSequence,
215 c.SQLITE_CORRUPT_INDEX => error.SQLiteCorruptIndex,
216 245
217 c.SQLITE_READONLY_RECOVERY => error.SQLiteReadOnlyRecovery, 246 c.SQLITE_READONLY_RECOVERY => error.SQLiteReadOnlyRecovery,
218 c.SQLITE_READONLY_CANTLOCK => error.SQLiteReadOnlyCantLock, 247 c.SQLITE_READONLY_CANTLOCK => error.SQLiteReadOnlyCantLock,
@@ -233,7 +262,6 @@ pub fn errorFromResultCode(code: c_int) Error {
233 c.SQLITE_CONSTRAINT_UNIQUE => error.SQLiteConstraintUnique, 262 c.SQLITE_CONSTRAINT_UNIQUE => error.SQLiteConstraintUnique,
234 c.SQLITE_CONSTRAINT_VTAB => error.SQLiteConstraintVTab, 263 c.SQLITE_CONSTRAINT_VTAB => error.SQLiteConstraintVTab,
235 c.SQLITE_CONSTRAINT_ROWID => error.SQLiteConstraintRowID, 264 c.SQLITE_CONSTRAINT_ROWID => error.SQLiteConstraintRowID,
236 c.SQLITE_CONSTRAINT_PINNED => error.SQLiteConstraintPinned,
237 265
238 else => std.debug.panic("invalid result code {}", .{code}), 266 else => std.debug.panic("invalid result code {}", .{code}),
239 }; 267 };