diff options
author | Erlend Egeberg Aasland <erlend.aasland@innova.no> | 2021-11-03 00:49:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-02 23:49:38 +0000 |
commit | 456e27ac0ac6bc1cfd6da0191bd7802d8667457b (patch) | |
tree | 6b9603cc52f568370a5131af8f129299ef21a499 /Modules/_sqlite/module.c | |
parent | a459a81530de700b3d3faeb827b22ed1c9985812 (diff) | |
download | cpython-456e27ac0ac6bc1cfd6da0191bd7802d8667457b.tar.gz cpython-456e27ac0ac6bc1cfd6da0191bd7802d8667457b.zip |
bpo-24139: Add support for SQLite extended result codes (GH-28076)
Diffstat (limited to 'Modules/_sqlite/module.c')
-rw-r--r-- | Modules/_sqlite/module.c | 127 |
1 files changed, 126 insertions, 1 deletions
diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index 65229623b84..3bca33b8e8c 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -280,7 +280,22 @@ static PyMethodDef module_methods[] = { {NULL, NULL} }; -/* SQLite API error codes */ +/* SQLite C API result codes. See also: + * - https://www.sqlite.org/c3ref/c_abort_rollback.html + * - https://sqlite.org/changes.html#version_3_3_8 + * - https://sqlite.org/changes.html#version_3_7_16 + * - https://sqlite.org/changes.html#version_3_7_17 + * - https://sqlite.org/changes.html#version_3_8_0 + * - https://sqlite.org/changes.html#version_3_8_3 + * - https://sqlite.org/changes.html#version_3_14 + * + * Note: the SQLite changelogs rarely mention new result codes, so in order to + * keep the 'error_codes' table in sync with SQLite, we must manually inspect + * sqlite3.h for every release. + * + * We keep the SQLITE_VERSION_NUMBER checks in order to easily declutter the + * code when we adjust the SQLite version requirement. + */ static const struct { const char *name; long value; @@ -311,6 +326,7 @@ static const struct { DECLARE_ERROR_CODE(SQLITE_OK), DECLARE_ERROR_CODE(SQLITE_PERM), DECLARE_ERROR_CODE(SQLITE_PROTOCOL), + DECLARE_ERROR_CODE(SQLITE_RANGE), DECLARE_ERROR_CODE(SQLITE_READONLY), DECLARE_ERROR_CODE(SQLITE_ROW), DECLARE_ERROR_CODE(SQLITE_SCHEMA), @@ -319,6 +335,115 @@ static const struct { DECLARE_ERROR_CODE(SQLITE_NOTICE), DECLARE_ERROR_CODE(SQLITE_WARNING), #endif + // Extended result code list + DECLARE_ERROR_CODE(SQLITE_ABORT_ROLLBACK), + DECLARE_ERROR_CODE(SQLITE_BUSY_RECOVERY), + DECLARE_ERROR_CODE(SQLITE_CANTOPEN_FULLPATH), + DECLARE_ERROR_CODE(SQLITE_CANTOPEN_ISDIR), + DECLARE_ERROR_CODE(SQLITE_CANTOPEN_NOTEMPDIR), + DECLARE_ERROR_CODE(SQLITE_CORRUPT_VTAB), + DECLARE_ERROR_CODE(SQLITE_IOERR_ACCESS), + DECLARE_ERROR_CODE(SQLITE_IOERR_BLOCKED), + DECLARE_ERROR_CODE(SQLITE_IOERR_CHECKRESERVEDLOCK), + DECLARE_ERROR_CODE(SQLITE_IOERR_CLOSE), + DECLARE_ERROR_CODE(SQLITE_IOERR_DELETE), + DECLARE_ERROR_CODE(SQLITE_IOERR_DELETE_NOENT), + DECLARE_ERROR_CODE(SQLITE_IOERR_DIR_CLOSE), + DECLARE_ERROR_CODE(SQLITE_IOERR_DIR_FSYNC), + DECLARE_ERROR_CODE(SQLITE_IOERR_FSTAT), + DECLARE_ERROR_CODE(SQLITE_IOERR_FSYNC), + DECLARE_ERROR_CODE(SQLITE_IOERR_LOCK), + DECLARE_ERROR_CODE(SQLITE_IOERR_NOMEM), + DECLARE_ERROR_CODE(SQLITE_IOERR_RDLOCK), + DECLARE_ERROR_CODE(SQLITE_IOERR_READ), + DECLARE_ERROR_CODE(SQLITE_IOERR_SEEK), + DECLARE_ERROR_CODE(SQLITE_IOERR_SHMLOCK), + DECLARE_ERROR_CODE(SQLITE_IOERR_SHMMAP), + DECLARE_ERROR_CODE(SQLITE_IOERR_SHMOPEN), + DECLARE_ERROR_CODE(SQLITE_IOERR_SHMSIZE), + DECLARE_ERROR_CODE(SQLITE_IOERR_SHORT_READ), + DECLARE_ERROR_CODE(SQLITE_IOERR_TRUNCATE), + DECLARE_ERROR_CODE(SQLITE_IOERR_UNLOCK), + DECLARE_ERROR_CODE(SQLITE_IOERR_WRITE), + DECLARE_ERROR_CODE(SQLITE_LOCKED_SHAREDCACHE), + DECLARE_ERROR_CODE(SQLITE_READONLY_CANTLOCK), + DECLARE_ERROR_CODE(SQLITE_READONLY_RECOVERY), +#if SQLITE_VERSION_NUMBER >= 3007016 + DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_CHECK), + DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_COMMITHOOK), + DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_FOREIGNKEY), + DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_FUNCTION), + DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_NOTNULL), + DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_PRIMARYKEY), + DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_TRIGGER), + DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_UNIQUE), + DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_VTAB), + DECLARE_ERROR_CODE(SQLITE_READONLY_ROLLBACK), +#endif +#if SQLITE_VERSION_NUMBER >= 3007017 + DECLARE_ERROR_CODE(SQLITE_IOERR_MMAP), + DECLARE_ERROR_CODE(SQLITE_NOTICE_RECOVER_ROLLBACK), + DECLARE_ERROR_CODE(SQLITE_NOTICE_RECOVER_WAL), +#endif +#if SQLITE_VERSION_NUMBER >= 3008000 + DECLARE_ERROR_CODE(SQLITE_BUSY_SNAPSHOT), + DECLARE_ERROR_CODE(SQLITE_IOERR_GETTEMPPATH), + DECLARE_ERROR_CODE(SQLITE_WARNING_AUTOINDEX), +#endif +#if SQLITE_VERSION_NUMBER >= 3008001 + DECLARE_ERROR_CODE(SQLITE_CANTOPEN_CONVPATH), + DECLARE_ERROR_CODE(SQLITE_IOERR_CONVPATH), +#endif +#if SQLITE_VERSION_NUMBER >= 3008002 + DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_ROWID), +#endif +#if SQLITE_VERSION_NUMBER >= 3008003 + DECLARE_ERROR_CODE(SQLITE_READONLY_DBMOVED), +#endif +#if SQLITE_VERSION_NUMBER >= 3008007 + DECLARE_ERROR_CODE(SQLITE_AUTH_USER), +#endif +#if SQLITE_VERSION_NUMBER >= 3009000 + DECLARE_ERROR_CODE(SQLITE_IOERR_VNODE), +#endif +#if SQLITE_VERSION_NUMBER >= 3010000 + DECLARE_ERROR_CODE(SQLITE_IOERR_AUTH), +#endif +#if SQLITE_VERSION_NUMBER >= 3014001 + DECLARE_ERROR_CODE(SQLITE_OK_LOAD_PERMANENTLY), +#endif +#if SQLITE_VERSION_NUMBER >= 3021000 + DECLARE_ERROR_CODE(SQLITE_IOERR_BEGIN_ATOMIC), + DECLARE_ERROR_CODE(SQLITE_IOERR_COMMIT_ATOMIC), + DECLARE_ERROR_CODE(SQLITE_IOERR_ROLLBACK_ATOMIC), +#endif +#if SQLITE_VERSION_NUMBER >= 3022000 + DECLARE_ERROR_CODE(SQLITE_ERROR_MISSING_COLLSEQ), + DECLARE_ERROR_CODE(SQLITE_ERROR_RETRY), + DECLARE_ERROR_CODE(SQLITE_READONLY_CANTINIT), + DECLARE_ERROR_CODE(SQLITE_READONLY_DIRECTORY), +#endif +#if SQLITE_VERSION_NUMBER >= 3024000 + DECLARE_ERROR_CODE(SQLITE_CORRUPT_SEQUENCE), + DECLARE_ERROR_CODE(SQLITE_LOCKED_VTAB), +#endif +#if SQLITE_VERSION_NUMBER >= 3025000 + DECLARE_ERROR_CODE(SQLITE_CANTOPEN_DIRTYWAL), + DECLARE_ERROR_CODE(SQLITE_ERROR_SNAPSHOT), +#endif +#if SQLITE_VERSION_NUMBER >= 3031000 + DECLARE_ERROR_CODE(SQLITE_CANTOPEN_SYMLINK), + DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_PINNED), + DECLARE_ERROR_CODE(SQLITE_OK_SYMLINK), +#endif +#if SQLITE_VERSION_NUMBER >= 3032000 + DECLARE_ERROR_CODE(SQLITE_BUSY_TIMEOUT), + DECLARE_ERROR_CODE(SQLITE_CORRUPT_INDEX), + DECLARE_ERROR_CODE(SQLITE_IOERR_DATA), +#endif +#if SQLITE_VERSION_NUMBER >= 3034000 + DECLARE_ERROR_CODE(SQLITE_IOERR_CORRUPTFS), +#endif #undef DECLARE_ERROR_CODE {NULL, 0}, }; |