@@ -280,7 +280,22 @@ static PyMethodDef module_methods[] = {
280
280
{NULL , NULL }
281
281
};
282
282
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
+ */
284
299
static const struct {
285
300
const char * name ;
286
301
long value ;
@@ -311,13 +326,123 @@ static const struct {
311
326
DECLARE_ERROR_CODE (SQLITE_OK ),
312
327
DECLARE_ERROR_CODE (SQLITE_PERM ),
313
328
DECLARE_ERROR_CODE (SQLITE_PROTOCOL ),
329
+ DECLARE_ERROR_CODE (SQLITE_RANGE ),
314
330
DECLARE_ERROR_CODE (SQLITE_READONLY ),
315
331
DECLARE_ERROR_CODE (SQLITE_ROW ),
316
332
DECLARE_ERROR_CODE (SQLITE_SCHEMA ),
317
333
DECLARE_ERROR_CODE (SQLITE_TOOBIG ),
318
334
#if SQLITE_VERSION_NUMBER >= 3007017
319
335
DECLARE_ERROR_CODE (SQLITE_NOTICE ),
320
336
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 ),
321
446
#endif
322
447
#undef DECLARE_ERROR_CODE
323
448
{NULL, 0 },
0 commit comments