@@ -280,7 +280,22 @@ static PyMethodDef module_methods[] = {
280280 {NULL , NULL }
281281};
282282
283- /* SQLite API error codes */
283+ /* SQLite C API result codes. See also:
284+ * - https://www.sqlite.org/c3ref/c_abort_rollback.html
285+ * - https://sqlite.org/changes.html#version_3_3_8
286+ * - https://sqlite.org/changes.html#version_3_7_16
287+ * - https://sqlite.org/changes.html#version_3_7_17
288+ * - https://sqlite.org/changes.html#version_3_8_0
289+ * - https://sqlite.org/changes.html#version_3_8_3
290+ * - https://sqlite.org/changes.html#version_3_14
291+ *
292+ * Note: the SQLite changelogs rarely mention new result codes, so in order to
293+ * keep the 'error_codes' table in sync with SQLite, we must manually inspect
294+ * sqlite3.h for every release.
295+ *
296+ * We keep the SQLITE_VERSION_NUMBER checks in order to easily declutter the
297+ * code when we adjust the SQLite version requirement.
298+ */
284299static const struct {
285300 const char * name ;
286301 long value ;
@@ -311,13 +326,123 @@ static const struct {
311326 DECLARE_ERROR_CODE (SQLITE_OK ),
312327 DECLARE_ERROR_CODE (SQLITE_PERM ),
313328 DECLARE_ERROR_CODE (SQLITE_PROTOCOL ),
329+ DECLARE_ERROR_CODE (SQLITE_RANGE ),
314330 DECLARE_ERROR_CODE (SQLITE_READONLY ),
315331 DECLARE_ERROR_CODE (SQLITE_ROW ),
316332 DECLARE_ERROR_CODE (SQLITE_SCHEMA ),
317333 DECLARE_ERROR_CODE (SQLITE_TOOBIG ),
318334#if SQLITE_VERSION_NUMBER >= 3007017
319335 DECLARE_ERROR_CODE (SQLITE_NOTICE ),
320336 DECLARE_ERROR_CODE (SQLITE_WARNING ),
337+ #endif
338+ // Extended result code list
339+ DECLARE_ERROR_CODE (SQLITE_ABORT_ROLLBACK ),
340+ DECLARE_ERROR_CODE (SQLITE_BUSY_RECOVERY ),
341+ DECLARE_ERROR_CODE (SQLITE_CANTOPEN_FULLPATH ),
342+ DECLARE_ERROR_CODE (SQLITE_CANTOPEN_ISDIR ),
343+ DECLARE_ERROR_CODE (SQLITE_CANTOPEN_NOTEMPDIR ),
344+ DECLARE_ERROR_CODE (SQLITE_CORRUPT_VTAB ),
345+ DECLARE_ERROR_CODE (SQLITE_IOERR_ACCESS ),
346+ DECLARE_ERROR_CODE (SQLITE_IOERR_BLOCKED ),
347+ DECLARE_ERROR_CODE (SQLITE_IOERR_CHECKRESERVEDLOCK ),
348+ DECLARE_ERROR_CODE (SQLITE_IOERR_CLOSE ),
349+ DECLARE_ERROR_CODE (SQLITE_IOERR_DELETE ),
350+ DECLARE_ERROR_CODE (SQLITE_IOERR_DELETE_NOENT ),
351+ DECLARE_ERROR_CODE (SQLITE_IOERR_DIR_CLOSE ),
352+ DECLARE_ERROR_CODE (SQLITE_IOERR_DIR_FSYNC ),
353+ DECLARE_ERROR_CODE (SQLITE_IOERR_FSTAT ),
354+ DECLARE_ERROR_CODE (SQLITE_IOERR_FSYNC ),
355+ DECLARE_ERROR_CODE (SQLITE_IOERR_LOCK ),
356+ DECLARE_ERROR_CODE (SQLITE_IOERR_NOMEM ),
357+ DECLARE_ERROR_CODE (SQLITE_IOERR_RDLOCK ),
358+ DECLARE_ERROR_CODE (SQLITE_IOERR_READ ),
359+ DECLARE_ERROR_CODE (SQLITE_IOERR_SEEK ),
360+ DECLARE_ERROR_CODE (SQLITE_IOERR_SHMLOCK ),
361+ DECLARE_ERROR_CODE (SQLITE_IOERR_SHMMAP ),
362+ DECLARE_ERROR_CODE (SQLITE_IOERR_SHMOPEN ),
363+ DECLARE_ERROR_CODE (SQLITE_IOERR_SHMSIZE ),
364+ DECLARE_ERROR_CODE (SQLITE_IOERR_SHORT_READ ),
365+ DECLARE_ERROR_CODE (SQLITE_IOERR_TRUNCATE ),
366+ DECLARE_ERROR_CODE (SQLITE_IOERR_UNLOCK ),
367+ DECLARE_ERROR_CODE (SQLITE_IOERR_WRITE ),
368+ DECLARE_ERROR_CODE (SQLITE_LOCKED_SHAREDCACHE ),
369+ DECLARE_ERROR_CODE (SQLITE_READONLY_CANTLOCK ),
370+ DECLARE_ERROR_CODE (SQLITE_READONLY_RECOVERY ),
371+ #if SQLITE_VERSION_NUMBER >= 3007016
372+ DECLARE_ERROR_CODE (SQLITE_CONSTRAINT_CHECK ),
373+ DECLARE_ERROR_CODE (SQLITE_CONSTRAINT_COMMITHOOK ),
374+ DECLARE_ERROR_CODE (SQLITE_CONSTRAINT_FOREIGNKEY ),
375+ DECLARE_ERROR_CODE (SQLITE_CONSTRAINT_FUNCTION ),
376+ DECLARE_ERROR_CODE (SQLITE_CONSTRAINT_NOTNULL ),
377+ DECLARE_ERROR_CODE (SQLITE_CONSTRAINT_PRIMARYKEY ),
378+ DECLARE_ERROR_CODE (SQLITE_CONSTRAINT_TRIGGER ),
379+ DECLARE_ERROR_CODE (SQLITE_CONSTRAINT_UNIQUE ),
380+ DECLARE_ERROR_CODE (SQLITE_CONSTRAINT_VTAB ),
381+ DECLARE_ERROR_CODE (SQLITE_READONLY_ROLLBACK ),
382+ #endif
383+ #if SQLITE_VERSION_NUMBER >= 3007017
384+ DECLARE_ERROR_CODE (SQLITE_IOERR_MMAP ),
385+ DECLARE_ERROR_CODE (SQLITE_NOTICE_RECOVER_ROLLBACK ),
386+ DECLARE_ERROR_CODE (SQLITE_NOTICE_RECOVER_WAL ),
387+ #endif
388+ #if SQLITE_VERSION_NUMBER >= 3008000
389+ DECLARE_ERROR_CODE (SQLITE_BUSY_SNAPSHOT ),
390+ DECLARE_ERROR_CODE (SQLITE_IOERR_GETTEMPPATH ),
391+ DECLARE_ERROR_CODE (SQLITE_WARNING_AUTOINDEX ),
392+ #endif
393+ #if SQLITE_VERSION_NUMBER >= 3008001
394+ DECLARE_ERROR_CODE (SQLITE_CANTOPEN_CONVPATH ),
395+ DECLARE_ERROR_CODE (SQLITE_IOERR_CONVPATH ),
396+ #endif
397+ #if SQLITE_VERSION_NUMBER >= 3008002
398+ DECLARE_ERROR_CODE (SQLITE_CONSTRAINT_ROWID ),
399+ #endif
400+ #if SQLITE_VERSION_NUMBER >= 3008003
401+ DECLARE_ERROR_CODE (SQLITE_READONLY_DBMOVED ),
402+ #endif
403+ #if SQLITE_VERSION_NUMBER >= 3008007
404+ DECLARE_ERROR_CODE (SQLITE_AUTH_USER ),
405+ #endif
406+ #if SQLITE_VERSION_NUMBER >= 3009000
407+ DECLARE_ERROR_CODE (SQLITE_IOERR_VNODE ),
408+ #endif
409+ #if SQLITE_VERSION_NUMBER >= 3010000
410+ DECLARE_ERROR_CODE (SQLITE_IOERR_AUTH ),
411+ #endif
412+ #if SQLITE_VERSION_NUMBER >= 3014001
413+ DECLARE_ERROR_CODE (SQLITE_OK_LOAD_PERMANENTLY ),
414+ #endif
415+ #if SQLITE_VERSION_NUMBER >= 3021000
416+ DECLARE_ERROR_CODE (SQLITE_IOERR_BEGIN_ATOMIC ),
417+ DECLARE_ERROR_CODE (SQLITE_IOERR_COMMIT_ATOMIC ),
418+ DECLARE_ERROR_CODE (SQLITE_IOERR_ROLLBACK_ATOMIC ),
419+ #endif
420+ #if SQLITE_VERSION_NUMBER >= 3022000
421+ DECLARE_ERROR_CODE (SQLITE_ERROR_MISSING_COLLSEQ ),
422+ DECLARE_ERROR_CODE (SQLITE_ERROR_RETRY ),
423+ DECLARE_ERROR_CODE (SQLITE_READONLY_CANTINIT ),
424+ DECLARE_ERROR_CODE (SQLITE_READONLY_DIRECTORY ),
425+ #endif
426+ #if SQLITE_VERSION_NUMBER >= 3024000
427+ DECLARE_ERROR_CODE (SQLITE_CORRUPT_SEQUENCE ),
428+ DECLARE_ERROR_CODE (SQLITE_LOCKED_VTAB ),
429+ #endif
430+ #if SQLITE_VERSION_NUMBER >= 3025000
431+ DECLARE_ERROR_CODE (SQLITE_CANTOPEN_DIRTYWAL ),
432+ DECLARE_ERROR_CODE (SQLITE_ERROR_SNAPSHOT ),
433+ #endif
434+ #if SQLITE_VERSION_NUMBER >= 3031000
435+ DECLARE_ERROR_CODE (SQLITE_CANTOPEN_SYMLINK ),
436+ DECLARE_ERROR_CODE (SQLITE_CONSTRAINT_PINNED ),
437+ DECLARE_ERROR_CODE (SQLITE_OK_SYMLINK ),
438+ #endif
439+ #if SQLITE_VERSION_NUMBER >= 3032000
440+ DECLARE_ERROR_CODE (SQLITE_BUSY_TIMEOUT ),
441+ DECLARE_ERROR_CODE (SQLITE_CORRUPT_INDEX ),
442+ DECLARE_ERROR_CODE (SQLITE_IOERR_DATA ),
443+ #endif
444+ #if SQLITE_VERSION_NUMBER >= 3034000
445+ DECLARE_ERROR_CODE (SQLITE_IOERR_CORRUPTFS ),
321446#endif
322447#undef DECLARE_ERROR_CODE
323448 {NULL, 0 },
0 commit comments