diff options
| author | 2020-12-31 22:41:19 +0100 | |
|---|---|---|
| committer | 2020-12-31 23:25:38 +0100 | |
| commit | 46f961bf850829dc0358ea8d1c4ea81b9f2508a7 (patch) | |
| tree | 5e0b6477d55e5d44f28c7f116b7ae8f31fe06fc4 /error.zig | |
| parent | fix tests with the new errors (diff) | |
| download | zig-sqlite-46f961bf850829dc0358ea8d1c4ea81b9f2508a7.tar.gz zig-sqlite-46f961bf850829dc0358ea8d1c4ea81b9f2508a7.tar.xz zig-sqlite-46f961bf850829dc0358ea8d1c4ea81b9f2508a7.zip | |
fix error checks based on the sqlite version
Diffstat (limited to '')
| -rw-r--r-- | error.zig | 48 |
1 files changed, 38 insertions, 10 deletions
| @@ -129,6 +129,44 @@ pub const Error = SQLiteError || | |||
| 129 | SQLiteExtendedConstraintError; | 129 | SQLiteExtendedConstraintError; |
| 130 | 130 | ||
| 131 | pub fn errorFromResultCode(code: c_int) Error { | 131 | pub 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 | }; |