Spec-Zone.ru › SQLite

Коды результатов и ошибок

Содержание
1. Коды результатов и коды ошибок
2. Основные коды результатов и расширенные коды результатов
3. Определения
4. Список основных кодов результатов
5. Список расширенных кодов результатов
6. Значения кодов результатов

Обзор

Многие процедуры в интерфейсе SQLite на языке C возвращают числовые коды результатов, указывающие на успех или неудачу, а в случае неудачи — дают представление о причине неудачи. Этот документ стремится объяснить значение каждого из этих числовых кодов результатов.

1. Коды результатов и коды ошибок

«Коды ошибок» — это подмножество «кодов результатов», которые указывают на то, что что-то пошло не так. Существует лишь несколько кодов результатов, не являющихся кодами ошибок: SQLITE_OK, SQLITE_ROW и SQLITE_DONE. Термин «код ошибки» означает любой код результата, отличный от этих трех.

2. Основные коды результатов и расширенные коды результатов

Коды результатов — целые числа со знаком размером 32 бита. Восемь наименее значимых битов кода результата определяют широкую категорию и называются «основным кодом результата». Более значимые биты предоставляют более подробную информацию об ошибке и называются «расширенным кодом результата».

Обратите внимание, что основной код результата всегда является частью расширенного кода результата. Исходя из полного 32-битного расширенного кода результата, приложение всегда может найти соответствующий основной код результата, просто извлекая восемь наименее значимых битов расширенного кода результата.

Все расширенные коды результатов также являются кодами ошибок. Следовательно, термины «расширенный код результата» и «расширенный код ошибки» взаимозаменяемы.

Для обеспечения обратной совместимости интерфейсы языка C по умолчанию возвращают основные коды результатов. Расширенный код результата последней ошибки можно получить с помощью интерфейса sqlite3_extended_errcode(). Интерфейс sqlite3_extended_result_codes() может быть использован для перевода базы данных в режим, в котором возвращаются расширенные коды результатов вместо основных.

3. Определения

Все коды результатов являются целыми числами. Символьные имена для всех кодов результатов создаются с помощью макросов "#define" в файле заголовков sqlite3.h. В файле заголовков sqlite3.h существуют отдельные разделы для определений кода результата и определений расширенного кода результата.

Символьные имена основных кодов результатов имеют вид "SQLITE_XXXXXX", где XXXXXX — последовательность заглавных букв латинского алфавита. Имена расширенных кодов результатов имеют вид "SQLITE_XXXXXX_YYYYYYY", где часть XXXXXX — это соответствующий основной код результата, а YYYYYYY — расширение, которое дополнительно классифицирует код результата.

Имена и числовые значения существующих кодов результатов фиксированы и неизменны. Однако новые коды результатов, и особенно новые расширенные коды результатов, могут появиться в будущих выпусках SQLite.

4. Список основных кодов результатов

31 код результата определены в sqlite3.h и приведены ниже в алфавитном порядке:

  • SQLITE_ABORT (4)
  • SQLITE_AUTH (23)
  • SQLITE_BUSY (5)
  • SQLITE_CANTOPEN (14)
  • SQLITE_CONSTRAINT (19)
  • SQLITE_CORRUPT (11)
  • SQLITE_DONE (101)
  • SQLITE_EMPTY (16)
  • SQLITE_ERROR (1)
  • SQLITE_FORMAT (24)
  • SQLITE_FULL (13)
  • SQLITE_INTERNAL (2)
  • SQLITE_INTERRUPT (9)
  • SQLITE_IOERR (10)
  • SQLITE_LOCKED (6)
  • SQLITE_MISMATCH (20)
  • SQLITE_MISUSE (21)
  • SQLITE_NOLFS (22)
  • SQLITE_NOMEM (7)
  • SQLITE_NOTADB (26)
  • SQLITE_NOTFOUND (12)
  • SQLITE_NOTICE (27)
  • SQLITE_OK (0)
  • SQLITE_PERM (3)
  • SQLITE_PROTOCOL (15)
  • SQLITE_RANGE (25)
  • SQLITE_READONLY (8)
  • SQLITE_ROW (100)
  • SQLITE_SCHEMA (17)
  • SQLITE_TOOBIG (18)
  • SQLITE_WARNING (28)

5. Список расширенных кодов результатов

74 расширенных кода результата определены в sqlite3.h и приведены ниже в алфавитном порядке:

  • SQLITE_ABORT_ROLLBACK (516)
  • SQLITE_AUTH_USER (279)
  • SQLITE_BUSY_RECOVERY (261)
  • SQLITE_BUSY_SNAPSHOT (517)
  • SQLITE_BUSY_TIMEOUT (773)
  • SQLITE_CANTOPEN_CONVPATH (1038)
  • SQLITE_CANTOPEN_DIRTYWAL (1294)
  • SQLITE_CANTOPEN_FULLPATH (782)
  • SQLITE_CANTOPEN_ISDIR (526)
  • SQLITE_CANTOPEN_NOTEMPDIR (270)
  • SQLITE_CANTOPEN_SYMLINK (1550)
  • SQLITE_CONSTRAINT_CHECK (275)
  • SQLITE_CONSTRAINT_COMMITHOOK (531)
  • SQLITE_CONSTRAINT_DATATYPE (3091)
  • SQLITE_CONSTRAINT_FOREIGNKEY (787)
  • SQLITE_CONSTRAINT_FUNCTION (1043)
  • SQLITE_CONSTRAINT_NOTNULL (1299)
  • SQLITE_CONSTRAINT_PINNED (2835)
  • SQLITE_CONSTRAINT_PRIMARYKEY (1555)
  • SQLITE_CONSTRAINT_ROWID (2579)
  • SQLITE_CONSTRAINT_TRIGGER (1811)
  • SQLITE_CONSTRAINT_UNIQUE (2067)
  • SQLITE_CONSTRAINT_VTAB (2323)
  • SQLITE_CORRUPT_INDEX (779)
  • SQLITE_CORRUPT_SEQUENCE (523)
  • SQLITE_CORRUPT_VTAB (267)
  • SQLITE_ERROR_MISSING_COLLSEQ (257)
  • SQLITE_ERROR_RETRY (513)
  • SQLITE_ERROR_SNAPSHOT (769)
  • SQLITE_IOERR_ACCESS (3338)
  • SQLITE_IOERR_AUTH (7178)
  • SQLITE_IOERR_BEGIN_ATOMIC (7434)
  • SQLITE_IOERR_BLOCKED (2826)
  • SQLITE_IOERR_CHECKRESERVEDLOCK (3594)
  • SQLITE_IOERR_CLOSE (4106)
  • SQLITE_IOERR_COMMIT_ATOMIC (7690)
  • SQLITE_IOERR_CONVPATH (6666)
  • SQLITE_IOERR_CORRUPTFS (8458)
  • SQLITE_IOERR_DATA (8202)
  • SQLITE_IOERR_DELETE (2570)
  • SQLITE_IOERR_DELETE_NOENT (5898)
  • SQLITE_IOERR_DIR_CLOSE (4362)
  • SQLITE_IOERR_DIR_FSYNC (1290)
  • SQLITE_IOERR_FSTAT (1802)
  • SQLITE_IOERR_FSYNC (1034)
  • SQLITE_IOERR_GETTEMPPATH (6410)
  • SQLITE_IOERR_LOCK (3850)
  • SQLITE_IOERR_MMAP (6154)
  • SQLITE_IOERR_NOMEM (3082)
  • SQLITE_IOERR_RDLOCK (2314)
  • SQLITE_IOERR_READ (266)
  • SQLITE_IOERR_ROLLBACK_ATOMIC (7946)
  • SQLITE_IOERR_SEEK (5642)
  • SQLITE_IOERR_SHMLOCK (5130)
  • SQLITE_IOERR_SHMMAP (5386)
  • SQLITE_IOERR_SHMOPEN (4618)
  • SQLITE_IOERR_SHMSIZE (4874)
  • SQLITE_IOERR_SHORT_READ (522)
  • SQLITE_IOERR_TRUNCATE (1546)
  • SQLITE_IOERR_UNLOCK (2058)
  • SQLITE_IOERR_VNODE (6922)
  • SQLITE_IOERR_WRITE (778)
  • SQLITE_LOCKED_SHAREDCACHE (262)
  • SQLITE_LOCKED_VTAB (518)
  • SQLITE_NOTICE_RECOVER_ROLLBACK (539)
  • SQLITE_NOTICE_RECOVER_WAL (283)
  • SQLITE_OK_LOAD_PERMANENTLY (256)
  • SQLITE_READONLY_CANTINIT (1288)
  • SQLITE_READONLY_CANTLOCK (520)
  • SQLITE_READONLY_DBMOVED (1032)
  • SQLITE_READONLY_DIRECTORY (1544)
  • SQLITE_READONLY_RECOVERY (264)
  • SQLITE_READONLY_ROLLBACK (776)
  • SQLITE_WARNING_AUTOINDEX (284)

6. Значения кодов результатов

Значения всех 105 значений кодов результатов показаны ниже в числовом порядке.

(0) SQLITE_OK

Код результата SQLITE_OK означает, что операция выполнена успешно и ошибок не было. Большинство других кодов результатов указывают на ошибку.

(1) SQLITE_ERROR

Код результата SQLITE_ERROR — это общий код ошибки, используемый, когда нет другого более конкретного кода ошибки.

(2) SQLITE_INTERNAL

Код результата SQLITE_INTERNAL указывает на внутренний сбой. В рабочей версии SQLite приложение никогда не должно видеть этот код результата. Если приложение столкнется с этим кодом результата, это указывает на ошибку в движке базы данных.

Этот код результата может быть вызван ошибкой в SQLite. Однако, определённые приложением SQL-функции или виртуальные таблицы, или VFS, или другие расширения также могут вызвать возврат этого кода результата, поэтому проблема может не лежать в основе ядра SQLite.

(3) SQLITE_PERM

Код результата SQLITE_PERM указывает, что требуемый режим доступа для новой базы данных не может быть предоставлен.

(4) SQLITE_ABORT

Код результата SQLITE_ABORT указывает, что операция была прервана до завершения, обычно по запросу приложения. См. также: SQLITE_INTERRUPT.

Если функция обратного вызова для sqlite3_exec() возвращает ненулевое значение, то sqlite3_exec() вернёт SQLITE_ABORT.

Если операция ROLLBACK выполняется на том же соединении с базой данных, что и ожидающее чтение или запись, то ожидающее чтение или запись может завершиться ошибкой SQLITE_ABORT или SQLITE_ABORT_ROLLBACK.

Помимо того, что он является кодом результата, значение SQLITE_ABORT также используется как режим разрешения конфликта, возвращаемый интерфейсом sqlite3_vtab_on_conflict().

(5) SQLITE_BUSY

Код результата SQLITE_BUSY указывает, что файл базы данных не может быть записан (или в некоторых случаях прочитан) из-за одновременной активности другого соединения с базой данных, обычно соединения с базой данных в другом процессе.

Например, если процесс A находится в середине большой транзакции записи, и одновременно процесс B пытается начать новую транзакцию записи, процесс B получит результат SQLITE_BUSY, потому что SQLite поддерживает только одного записывающего пользователя за раз. Процессу B потребуется подождать завершения транзакции процесса A перед началом новой транзакции. Интерфейсы sqlite3_busy_timeout() и sqlite3_busy_handler(), а также pragma busy_timeout доступны для процесса B, чтобы помочь ему справиться с ошибками SQLITE_BUSY.

Ошибка SQLITE_BUSY может произойти в любой момент транзакции: при первом запуске транзакции, во время любых операций записи или обновления или при фиксации транзакции. Чтобы избежать ошибок SQLITE_BUSY в середине транзакции, приложение может использовать BEGIN IMMEDIATE вместо просто BEGIN для начала транзакции. Команда BEGIN IMMEDIATE может сама вернуть SQLITE_BUSY, но если она выполняется успешно, то SQLite гарантирует, что последующие операции с той же базой данных до следующего COMMIT не вернут SQLITE_BUSY.

См. также: SQLITE_BUSY_RECOVERY и SQLITE_BUSY_SNAPSHOT.

Код результата SQLITE_BUSY отличается от SQLITE_LOCKED тем, что SQLITE_BUSY указывает на конфликт с другим соединением с базой данных, вероятно, в другом процессе, тогда как SQLITE_LOCKED указывает на конфликт в рамках того же соединения с базой данных (или иногда соединения с базой данных с общим кэшем).

(6) SQLITE_LOCKED

Код результата SQLITE_LOCKED указывает, что операция записи не может быть продолжена из-за конфликта в рамках того же соединения с базой данных или конфликта с другим соединением, использующим общий кэш.

Например, оператор DROP TABLE не может быть выполнен, пока другой поток читает из этой таблицы в том же соединении с базой данных, потому что удаление таблицы удалит таблицу у одновременно работающего читателя.

Код результата SQLITE_LOCKED отличается от SQLITE_BUSY тем, что SQLITE_LOCKED указывает на конфликт в том же соединении с базой данных (или в соединении с общим кэшем), тогда как SQLITE_BUSY указывает на конфликт с другим соединением, вероятно, в другом процессе.

(7) SQLITE_NOMEM

Код результата SQLITE_NOMEM указывает, что SQLite не смог выделить весь необходимый объём памяти для завершения операции. Другими словами, внутренний вызов sqlite3_malloc() или sqlite3_realloc() завершился неудачей в случае, когда выделенная память была необходима для продолжения операции.

(8) SQLITE_READONLY

Код результата SQLITE_READONLY возвращается при попытке изменить данные, для которых текущее соединение с базой данных не имеет прав на запись.

(9) SQLITE_INTERRUPT

Код результата SQLITE_INTERRUPT указывает, что операция была прервана интерфейсом sqlite3_interrupt(). См. также: SQLITE_ABORT

(10) SQLITE_IOERR

Код результата SQLITE_IOERR указывает, что операция не может быть завершена, так как операционная система сообщила об ошибке ввода-вывода.

Полный жёсткий диск обычно даёт ошибку SQLITE_FULL, а не ошибку SQLITE_IOERR.

Существует множество расширенных кодов результатов для ошибок ввода-вывода, которые определяют конкретную операцию ввода-вывода, которая завершилась неудачей.

(11) SQLITE_CORRUPT

Код результата SQLITE_CORRUPT указывает, что файл базы данных повреждён. См. Как повредить файлы базы данных для получения дополнительной информации о том, как может произойти повреждение.

(12) SQLITE_NOTFOUND

Код результата SQLITE_NOTFOUND предоставляется в трёх способах:

  1. SQLITE_NOTFOUND может быть возвращён интерфейсом sqlite3_file_control(), чтобы указать, что код управления файлом, переданный в качестве третьего аргумента, не был распознан базовым VFS.

  2. SQLITE_NOTFOUND также может быть возвращён методом xSetSystemCall() объекта sqlite3_vfs.

  3. SQLITE_NOTFOUND может быть возвращён sqlite3_vtab_rhs_value(), чтобы указать, что правое операнд ограничения недоступен методу xBestIndex, который выполнил вызов.

Код результата SQLITE_NOTFOUND также используется внутри реализации SQLite, но эти внутренние использования не доступны приложению.

(13) SQLITE_FULL

Код результата SQLITE_FULL указывает, что запись не может быть завершена, так как диск заполнен. Обратите внимание, что эта ошибка может возникнуть при попытке записи информации в основной файл базы данных, или она также может возникнуть при записи в временные файлы на диске.

Иногда приложения сталкиваются с этой ошибкой, даже если на основном диске есть много места, потому что ошибка возникает при записи во временные файлы на диске на системе, где временные файлы хранятся на отдельном разделе с гораздо меньшим объёмом места, чем основной диск.

(14) SQLITE_CANTOPEN

Код результата SQLITE_CANTOPEN указывает, что SQLite не смог открыть файл. Запрашиваемый файл может быть основным файлом базы данных или одним из нескольких временных файлов на диске.

(15) SQLITE_PROTOCOL

Код результата SQLITE_PROTOCOL указывает на проблему с протоколом блокировки файлов, используемым SQLite. Ошибка SQLITE_PROTOCOL в настоящее время возвращается только при использовании режима WAL и попытке начать новую транзакцию. Возникает проблема гонки, когда два отдельных соединения с базой данных одновременно пытаются начать транзакцию в режиме WAL. Проигравший в гонке отступает и пытается снова после небольшой задержки. Если одно и то же соединение проигрывает гонку блокировки десятки раз в течение нескольких секунд, то оно в конечном итоге сдастся и вернёт SQLITE_PROTOCOL. Ошибка SQLITE_PROTOCOL должна встречаться на практике очень редко, и только тогда, когда много отдельных процессов интенсивно конкурируют за запись в одну и ту же базу данных.

(16) SQLITE_EMPTY

Код результата SQLITE_EMPTY в настоящее время не используется.

(17) SQLITE_SCHEMA

Код результата SQLITE_SCHEMA указывает, что схема базы данных изменилась. Этот код результата может быть возвращён из sqlite3_step() для подготовленного оператора, который был сгенерирован с использованием sqlite3_prepare() или sqlite3_prepare16(). Если схема базы данных была изменена другим процессом между временем подготовки оператора и временем его выполнения, может возникнуть эта ошибка.

Если подготовленный оператор сгенерирован из sqlite3_prepare_v2(), то оператор автоматически переподготавливается, если схема изменяется, до SQLITE_MAX_SCHEMA_RETRY раз (по умолчанию: 50). Интерфейс sqlite3_step() вернёт SQLITE_SCHEMA приложению только в случае, если ошибка сохраняется после этих многократных попыток.

(18) SQLITE_TOOBIG

Код ошибки SQLITE_TOOBIG указывает, что строка или BLOB были слишком длинными. Максимальная длина строки или BLOB в SQLite по умолчанию составляет 1 000 000 000 байт. Эта максимальная длина может быть изменена во время компиляции с помощью опции компиляции SQLITE_MAX_LENGTH или во время выполнения с помощью интерфейса sqlite3_limit(db,SQLITE_LIMIT_LENGTH,...). Ошибка SQLITE_TOOBIG возникает, когда SQLite встречает строку или BLOB, превышающую предел времени компиляции или времени выполнения.

Код ошибки SQLITE_TOOBIG также может возникнуть, когда переданное SQL-предложение слишком длинное для одного из интерфейсов sqlite3_prepare_v2(). Максимальная длина SQL-предложения по умолчанию значительно меньше и составляет 1 000 000 000 байт. Максимальная длина SQL-предложения может быть установлена во время компиляции с помощью SQLITE_MAX_SQL_LENGTH или во время выполнения с помощью sqlite3_limit(db,SQLITE_LIMIT_SQL_LENGTH,...).

(19) SQLITE_CONSTRAINT

Код ошибки SQLITE_CONSTRAINT означает, что при обработке SQL-предложения произошла ошибка нарушения ограничения. Дополнительную информацию о невыполненном ограничении можно получить, проконсультировавшись с сопроводительным сообщением об ошибке (возвращённым через sqlite3_errmsg() или sqlite3_errmsg16()) или посмотрев на расширенный код ошибки.

Код SQLITE_CONSTRAINT также может использоваться в качестве возвращаемого значения из метода xBestIndex() реализации виртуальной таблицы. Когда xBestIndex() возвращает SQLITE_CONSTRAINT, это означает, что конкретная комбинация входных данных, переданных в xBestIndex(), не может привести к пригодному плану запроса и не должна рассматриваться дальше.

(20) SQLITE_MISMATCH

Код ошибки SQLITE_MISMATCH указывает на несоответствие типов данных.

SQLite обычно очень снисходителен к несоответствиям между типом значения и объявленным типом контейнера, в котором это значение должно храниться. Например, SQLite позволяет приложению хранить большой BLOB в столбце с объявленным типом BOOLEAN. Однако в некоторых случаях SQLite строго соблюдает типы. Ошибка SQLITE_MISMATCH возвращается в этих немногих случаях, когда типы не совпадают.

rowid таблицы должен быть целым числом. Попытка установить rowid на что-либо кроме целого числа (или NULL, который будет автоматически преобразован в следующее доступное целое число rowid) приводит к ошибке SQLITE_MISMATCH.

(21) SQLITE_MISUSE

Код возврата SQLITE_MISUSE может быть возвращён, если приложение использует любой интерфейс SQLite не определённым или не поддерживаемым способом. Например, использование предварительно подготовленного оператора после того, как этот предварительно подготовленный оператор был завершён, может привести к ошибке SQLITE_MISUSE.

SQLite пытается обнаружить неправильное использование и сообщить об этом с помощью этого кода результата. Однако нет гарантии, что обнаружение неправильного использования будет успешным. Обнаружение неправильного использования является вероятностным. Приложения никогда не должны полагаться на возвращаемое значение SQLITE_MISUSE.

Если SQLite когда-либо вернёт SQLITE_MISUSE от любого интерфейса, это означает, что приложение закодировано неправильно и его нужно исправить. Не следует выпускать приложение, которое иногда возвращает SQLITE_MISUSE из стандартного интерфейса SQLite, потому что это приложение содержит потенциально серьёзные ошибки.

(22) SQLITE_NOLFS

Ошибка SQLITE_NOLFS может быть возвращена на системах, не поддерживающих большие файлы, когда база данных становится больше, чем может обработать файловая система. «NOLFS» означает «Нет поддержки больших файлов».

(23) SQLITE_AUTH

Ошибка SQLITE_AUTH возвращается, когда обработчик авторизации указывает, что SQL-предложение, которое готовится, не авторизовано.

(24) SQLITE_FORMAT

Код ошибки SQLITE_FORMAT в настоящее время не используется SQLite.

(25) SQLITE_RANGE

Ошибка SQLITE_RANGE указывает на то, что номер параметра в одной из процедур sqlite3_bind или номер столбца в одной из процедур sqlite3_column выходит за пределы допустимого диапазона.

(26) SQLITE_NOTADB

При попытке открыть файл ошибка SQLITE_NOTADB указывает на то, что открываемый файл не является файлом базы данных SQLite.

(27) SQLITE_NOTICE

Код результата SQLITE_NOTICE не возвращается ни одним интерфейсом C/C++. Однако SQLITE_NOTICE (или, скорее, один из его расширенных кодов ошибок) иногда используется в качестве первого аргумента в обратном вызове sqlite3_log() для обозначения того, что выполняется необычная операция.

(28) SQLITE_WARNING

Код результата SQLITE_WARNING не возвращается ни одним интерфейсом C/C++. Однако SQLITE_WARNING (или, скорее, один из его расширенных кодов ошибок) иногда используется в качестве первого аргумента в обратном вызове sqlite3_log() для обозначения того, что выполняется необычная и, возможно, нежелательная операция.

(100) SQLITE_ROW

Код результата SQLITE_ROW, возвращаемый sqlite3_step(), указывает, что доступен ещё один ряд выходных данных.

(101) SQLITE_DONE

Код результата SQLITE_DONE указывает, что операция завершена. Код результата SQLITE_DONE чаще всего встречается как возвращаемое значение sqlite3_step(), указывающее, что выполнение SQL-предложения завершено. Но SQLITE_DONE также может быть возвращён другими многоступенчатыми интерфейсами, такими как sqlite3_backup_step().

(256) SQLITE_OK_LOAD_PERMANENTLY

Интерфейс sqlite3_load_extension() загружает расширение в одно соединение с базой данных. По умолчанию это расширение автоматически выгружается при закрытии соединения с базой данных. Однако, если точка входа расширения возвращает SQLITE_OK_LOAD_PERMANENTLY вместо SQLITE_OK, то расширение остаётся загруженным в адресном пространстве процесса после закрытия соединения с базой данных. Другими словами, методы xDlClose объекта sqlite3_vfs не вызываются для расширения при закрытии соединения с базой данных.

Код возврата SQLITE_OK_LOAD_PERMANENTLY полезен для загружаемых расширений, которые регистрируют новые VFS, например.

(257) SQLITE_ERROR_MISSING_COLLSEQ

Код результата SQLITE_ERROR_MISSING_COLLSEQ означает, что SQL-предложение не могло быть подготовлено, потому что не удалось найти последовательность сортировки, указанную в этом SQL-предложении.

Иногда при встрече этого кода ошибки процедура sqlite3_prepare_v2() преобразует ошибку в SQLITE_ERROR_RETRY и пытается повторно подготовить SQL-предложение с использованием другого плана запроса, который не требует использования неизвестной последовательности сортировки.

(261) SQLITE_BUSY_RECOVERY

Код ошибки SQLITE_BUSY_RECOVERY — это расширенный код ошибки для SQLITE_BUSY, который указывает, что операция не могла быть продолжена, потому что другой процесс занят восстановлением файла базы данных режима WAL после сбоя. Код ошибки SQLITE_BUSY_RECOVERY возникает только в базах данных режима WAL.

(262) SQLITE_LOCKED_SHAREDCACHE

Код результата SQLITE_LOCKED_SHAREDCACHE указывает на блокировку доступа к записи данных SQLite другим соединением с базой данных, которое использует эту запись в режиме обменного кэша. Когда два или более соединений с базой данных используют общий кеш, и одно из соединений находится в процессе изменения записи в этом кеше, другие соединения блокируются от доступа к этим данным во время выполнения изменений, чтобы предотвратить получение читателями неполных или повреждённых данных.

(264) SQLITE_READONLY_RECOVERY

Код ошибки SQLITE_READONLY_RECOVERY — это расширенный код ошибки для SQLITE_READONLY. Код ошибки SQLITE_READONLY_RECOVERY указывает, что база данных режима WAL не может быть открыта, потому что файл базы данных необходимо восстановить, а восстановление требует записи, но доступен только чтение.

(266) SQLITE_IOERR_READ

Код ошибки SQLITE_IOERR_READ — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в слое VFS при попытке чтения из файла на диске. Эта ошибка может возникнуть из-за аппаратного сбоя или из-за размонтирования файловой системы во время открытия файла.

(267) SQLITE_CORRUPT_VTAB

Код ошибки SQLITE_CORRUPT_VTAB — это расширенный код ошибки для SQLITE_CORRUPT, используемый виртуальными таблицами. Виртуальная таблица может вернуть SQLITE_CORRUPT_VTAB, чтобы указать на повреждение содержимого в виртуальной таблице.

(270) SQLITE_CANTOPEN_NOTEMPDIR

Код ошибки SQLITE_CANTOPEN_NOTEMPDIR больше не используется.

(275) SQLITE_CONSTRAINT_CHECK

Код ошибки SQLITE_CONSTRAINT_CHECK — это расширенный код ошибки для SQLITE_CONSTRAINT, указывающий на то, что ограничение CHECK не выполнено.

(279) SQLITE_AUTH_USER

Код ошибки SQLITE_AUTH_USER — это расширенный код ошибки для SQLITE_AUTH, указывающий, что операция была предпринята для базы данных, для которой у вошедшего пользователя недостаточно полномочий.

(283) SQLITE_NOTICE_RECOVER_WAL

Код результата SQLITE_NOTICE_RECOVER_WAL передаётся в обратный вызов sqlite3_log() при восстановлении файла базы данных режима WAL.

(284) SQLITE_WARNING_AUTOINDEX

Код результата SQLITE_WARNING_AUTOINDEX передаётся в обратный вызов sqlite3_log() всякий раз, когда используется автоматическое индексирование. Это может служить предупреждением для разработчиков приложений о том, что база данных может получить выгоду от дополнительных индексов.

(513) SQLITE_ERROR_RETRY

SQLITE_ERROR_RETRY используется в качестве внутренней команды для того, чтобы вызвать sqlite3_prepare_v2() (или одну из его родственных процедур для создания подготовленных операторов) повторить попытку подготовки оператора, который не смог подготовиться в предыдущую попытку из-за ошибки.

(516) SQLITE_ABORT_ROLLBACK

Код ошибки SQLITE_ABORT_ROLLBACK — это расширенный код ошибки для SQLITE_ABORT, указывающий, что оператор SQL был прерван, потому что транзакция, активная во время запуска оператора SQL, была отменена. Все ожидающие операции записи всегда завершаются с этой ошибкой при отмене транзакции. Операция чтения, ожидающая завершения, завершится ошибкой только в том случае, если схема была изменена в рамках отменяемой транзакции.

(517) SQLITE_BUSY_SNAPSHOT

Код ошибки SQLITE_BUSY_SNAPSHOT — это расширенный код ошибки для SQLITE_BUSY, который возникает в базах данных режима WAL, когда подключение к базе данных пытается преобразовать транзакцию чтения в транзакцию записи, но обнаруживает, что другое подключение к базе данных уже записало в базу данных, тем самым аннулировав предыдущие чтения.

Следующий сценарий иллюстрирует, как может возникнуть ошибка SQLITE_BUSY_SNAPSHOT:

  1. Процесс A начинает транзакцию чтения в базе данных и выполняет одну или несколько инструкций SELECT. Процесс A держит транзакцию открытой.
  2. Процесс B обновляет базу данных, изменяя значения, ранее прочитанные процессом A.
  3. Теперь процесс A пытается записать в базу данных. Но представление процесса A о содержимом базы данных теперь устарело, потому что процесс B модифицировал файл базы данных после того, как процесс A прочитал его. Таким образом, процесс A получает ошибку SQLITE_BUSY_SNAPSHOT.

(518) SQLITE_LOCKED_VTAB

Код результата SQLITE_LOCKED_VTAB не используется ядром SQLite, но доступен для использования расширениями. Реализации виртуальных таблиц могут возвращать этот код результата, чтобы указать, что они не могут завершить текущую операцию из-за блокировок, удерживаемых другими потоками или процессами.

Расширение R-Tree возвращает этот код результата, когда происходит попытка обновить R-Tree, в то время как другой подготовленный оператор активно читает R-Tree. Обновление не может быть продолжено, потому что любое изменение R-Tree может потребовать переупорядочивания и перебалансировки узлов, что нарушит курсоры чтения, вызывая дублирование некоторых строк и пропускание других.

(520) SQLITE_READONLY_CANTLOCK

Код ошибки SQLITE_READONLY_CANTLOCK — это расширенный код ошибки для SQLITE_READONLY. Код ошибки SQLITE_READONLY_CANTLOCK указывает, что SQLite не может получить блокировку чтения в базе данных режима WAL, потому что файл общей памяти, связанный с этой базой данных, является только для чтения.

(522) SQLITE_IOERR_SHORT_READ

Код ошибки SQLITE_IOERR_SHORT_READ — это расширенный код ошибки для SQLITE_IOERR, указывающий, что попытка чтения в слое VFS не смогла получить такое количество байтов, которое было запрошено. Это может быть связано с усечённым файлом.

(523) SQLITE_CORRUPT_SEQUENCE

Код результата SQLITE_CORRUPT_SEQUENCE означает, что схема таблицы sqlite_sequence повреждена. Таблица sqlite_sequence используется для реализации функции AUTOINCREMENT. Таблица sqlite_sequence должна иметь следующий формат:

  CREATE TABLE sqlite_sequence(name,seq);
  

Если SQLite обнаружит, что таблица sqlite_sequence имеет любой другой формат, она возвращает ошибку SQLITE_CORRUPT_SEQUENCE.

(526) SQLITE_CANTOPEN_ISDIR

Код ошибки SQLITE_CANTOPEN_ISDIR — это расширенный код ошибки для SQLITE_CANTOPEN, указывающий, что операция открытия файла завершилась ошибкой, потому что файл на самом деле является каталогом.

(531) SQLITE_CONSTRAINT_COMMITHOOK

Код ошибки SQLITE_CONSTRAINT_COMMITHOOK — это расширенный код ошибки для SQLITE_CONSTRAINT, указывающий, что обратный вызов обработчика подтверждения возвратил ненулевое значение, что привело к отмене оператора SQL.

(539) SQLITE_NOTICE_RECOVER_ROLLBACK

Код результата SQLITE_NOTICE_RECOVER_ROLLBACK передается в обратный вызов sqlite3_log() при отмене горячего журнала.

(769) SQLITE_ERROR_SNAPSHOT

Код результата SQLITE_ERROR_SNAPSHOT может быть возвращён при попытке начать транзакцию чтения на исторической версии базы данных с помощью интерфейса sqlite3_snapshot_open(). Если исторический снимок больше недоступен, транзакция чтения завершится ошибкой SQLITE_ERROR_SNAPSHOT. Этот код ошибки возможен только при компиляции SQLite с -DSQLITE_ENABLE_SNAPSHOT.

(773) SQLITE_BUSY_TIMEOUT

Код ошибки SQLITE_BUSY_TIMEOUT указывает, что запрос блокировки Posix по совету файла в слое VFS завершился ошибкой из-за тайм-аута. Блокирующие консультативные блокировки Posix доступны только в качестве расширения SQLite с закрытым кодом, и даже тогда поддерживаются только в том случае, если SQLite скомпилирован с опцией времени компиляции SQLITE_EANBLE_SETLK_TIMEOUT.

(776) SQLITE_READONLY_ROLLBACK

Код ошибки SQLITE_READONLY_ROLLBACK — это расширенный код ошибки для SQLITE_READONLY. Код ошибки SQLITE_READONLY_ROLLBACK указывает, что база данных не может быть открыта, потому что она содержит горячий журнал, который необходимо отменить, но это невозможно, потому что база данных только для чтения.

(778) SQLITE_IOERR_WRITE

Код ошибки SQLITE_IOERR_WRITE — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в слое VFS при попытке записи в файл на диске. Эта ошибка может возникнуть из-за аппаратного сбоя или из-за того, что файловая система была отсоединена во время открытия файла. Эта ошибка не должна возникать, если файловая система переполнена, так как для этого есть отдельный код ошибки (SQLITE_FULL).

(779) SQLITE_CORRUPT_INDEX

Код результата SQLITE_CORRUPT_INDEX означает, что SQLite обнаружил, что запись отсутствует или отсутствовала в индексе. Это частный случай ошибки SQLITE_CORRUPT, который предполагает, что проблема может быть решена путём выполнения команды REINDEX, если нет других проблем в файле базы данных.

(782) SQLITE_CANTOPEN_FULLPATH

Код ошибки SQLITE_CANTOPEN_FULLPATH — это расширенный код ошибки для SQLITE_CANTOPEN, указывающий, что операция открытия файла завершилась ошибкой, потому что операционная система не смогла преобразовать имя файла в полное имя пути.

(787) SQLITE_CONSTRAINT_FOREIGNKEY

Код ошибки SQLITE_CONSTRAINT_FOREIGNKEY — это расширенный код ошибки для SQLITE_CONSTRAINT, указывающий на сбой ограничения внешнего ключа.

(1032) SQLITE_READONLY_DBMOVED

Код ошибки SQLITE_READONLY_DBMOVED — это расширенный код ошибки для SQLITE_READONLY. Код ошибки SQLITE_READONLY_DBMOVED указывает, что база данных не может быть изменена, так как файл базы данных был перемещен после открытия, поэтому любая попытка изменить базу данных может привести к её повреждению, если процесс аварийно завершится, потому что журнал отката журнала отката не будет иметь правильного имени.

(1034) SQLITE_IOERR_FSYNC

Код ошибки SQLITE_IOERR_FSYNC — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в слое VFS при попытке выбросить ранее записанное содержимое из буферов ОС и/или диска в постоянное хранилище. Другими словами, этот код указывает на проблему с системным вызовом fsync() в Unix или системным вызовом FlushFileBuffers() в Windows.

(1038) SQLITE_CANTOPEN_CONVPATH

Код ошибки SQLITE_CANTOPEN_CONVPATH используется только в Cygwin VFS и указывает, что системный вызов cygwin_conv_path() завершился ошибкой при попытке открыть файл. См. также: SQLITE_IOERR_CONVPATH

(1043) SQLITE_CONSTRAINT_FUNCTION

Код ошибки SQLITE_CONSTRAINT_FUNCTION в настоящее время не используется ядром SQLite. Однако этот код ошибки доступен для использования функциями расширения.

(1288) SQLITE_READONLY_CANTINIT

Код результата SQLITE_READONLY_CANTINIT исходит от метода xShmMap VFS, чтобы указать, что область общей памяти, используемая режимом WAL, существует, но её содержимое ненадежно и непригодно для использования текущим процессом, так как у текущего процесса нет прав на запись в области общей памяти. (Область общей памяти для режима WAL обычно является файлом с суффиксом «-wal», который отображается в адресном пространстве процесса. Если у текущего процесса нет прав на запись в этот файл, то он не может записывать в общую память.)

Более высокий уровень логики в SQLite обычно перехватывает код ошибки и создаёт временную область общей памяти в памяти, чтобы текущий процесс мог хотя бы прочитать содержимое базы данных. Этот код результата не должен достигать уровня интерфейса приложения.

(1290) SQLITE_IOERR_DIR_FSYNC

Код ошибки SQLITE_IOERR_DIR_FSYNC — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в слое VFS при попытке вызвать fsync() для каталога. Unix VFS пытается выполнить fsync() для каталогов после создания или удаления определённых файлов, чтобы убедиться, что эти файлы по-прежнему будут отображаться в файловой системе после сбоя питания или сбоя системы. Этот код ошибки указывает на проблему при попытке выполнить эту операцию fsync().

(1294) SQLITE_CANTOPEN_DIRTYWAL

Код результата SQLITE_CANTOPEN_DIRTYWAL в настоящее время не используется.

(1299) SQLITE_CONSTRAINT_NOTNULL

Код ошибки SQLITE_CONSTRAINT_NOTNULL — это расширенный код ошибки для SQLITE_CONSTRAINT, указывающий на сбой ограничения NOT NULL.

(1544) SQLITE_READONLY_DIRECTORY

Код результата SQLITE_READONLY_DIRECTORY указывает, что база данных является только для чтения, потому что процесс не имеет разрешения на создание файла журнала в той же директории, что и база данных, а создание файла журнала является предварительным условием для записи.

(1546) SQLITE_IOERR_TRUNCATE

Код ошибки SQLITE_IOERR_TRUNCATE — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в слое VFS при попытке обрезки файла до меньшего размера.

(1550) SQLITE_CANTOPEN_SYMLINK

Код результата SQLITE_CANTOPEN_SYMLINK возвращается интерфейсом sqlite3_open() и его аналогами, когда используется флаг SQLITE_OPEN_NOFOLLOW, а файл базы данных является символической ссылкой.

(1555) SQLITE_CONSTRAINT_PRIMARYKEY

Код ошибки SQLITE_CONSTRAINT_PRIMARYKEY — это расширенный код ошибки для SQLITE_CONSTRAINT, указывающий на сбой ограничения PRIMARY KEY.

(1802) SQLITE_IOERR_FSTAT

Код ошибки SQLITE_IOERR_FSTAT — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в слое VFS при попытке вызвать fstat() (или эквивалент) для файла, чтобы определить информацию, такую как размер файла или разрешения доступа.

(1811) SQLITE_CONSTRAINT_TRIGGER

Код ошибки SQLITE_CONSTRAINT_TRIGGER — это расширенный код ошибки для SQLITE_CONSTRAINT, указывающий на то, что функция RAISE в триггере сработала, вызвав прерывание SQL-запроса.

(2058) SQLITE_IOERR_UNLOCK

Код ошибки SQLITE_IOERR_UNLOCK — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в методе xUnlock объекта sqlite3_io_methods.

(2067) SQLITE_CONSTRAINT_UNIQUE

Код ошибки SQLITE_CONSTRAINT_UNIQUE — это расширенный код ошибки для SQLITE_CONSTRAINT, указывающий на сбой ограничения UNIQUE.

(2314) SQLITE_IOERR_RDLOCK

Код ошибки SQLITE_IOERR_RDLOCK — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в методе xLock объекта sqlite3_io_methods при попытке получить чтение блокировки.

(2323) SQLITE_CONSTRAINT_VTAB

Код SQLITE_CONSTRAINT_VTAB в настоящее время не используется ядром SQLite. Однако этот код ошибки доступен для использования определяемыми приложением виртуальными таблицами.

(2570) SQLITE_IOERR_DELETE

Код ошибки SQLITE_IOERR_DELETE — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в методе xDelete объекта sqlite3_vfs.

(2579) SQLITE_CONSTRAINT_ROWID

Код ошибки SQLITE_CONSTRAINT_ROWID — это расширенный код ошибки для SQLITE_CONSTRAINT, указывающий на то, что идентификатор строки rowid не является уникальным.

(2826) SQLITE_IOERR_BLOCKED

Код SQLITE_IOERR_BLOCKED больше не используется.

(2835) SQLITE_CONSTRAINT_PINNED

Код ошибки SQLITE_CONSTRAINT_PINNED — это расширенный код ошибки для SQLITE_CONSTRAINT, указывающий на то, что триггер UPDATE попытался удалить строку, которая обновлялась во время обновления.

(3082) SQLITE_IOERR_NOMEM

Код SQLITE_IOERR_NOMEM иногда возвращается слоем VFS для указания того, что операцию невозможно выполнить из-за невозможности выделить достаточное количество памяти. Этот код ошибки обычно преобразуется в SQLITE_NOMEM верхними уровнями SQLite перед возвращением приложению.

(3091) SQLITE_CONSTRAINT_DATATYPE

Код ошибки SQLITE_CONSTRAINT_DATATYPE — это расширенный код ошибки для SQLITE_CONSTRAINT, указывающий на то, что вставка или обновление попытались сохранить значение, несовместимое с объявленным типом столбца в таблице, определенной как STRICT.

(3338) SQLITE_IOERR_ACCESS

Код ошибки SQLITE_IOERR_ACCESS — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в методе xAccess объекта sqlite3_vfs.

(3594) SQLITE_IOERR_CHECKRESERVEDLOCK

Код ошибки SQLITE_IOERR_CHECKRESERVEDLOCK — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в методе xCheckReservedLock объекта sqlite3_io_methods.

(3850) SQLITE_IOERR_LOCK

Код ошибки SQLITE_IOERR_LOCK — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в логике консультирования блокировки файлов. Обычно ошибка SQLITE_IOERR_LOCK указывает на проблему получения блокировки PENDING. Однако она также может указывать на различные ошибки блокировки в некоторых специализированных VFS на Mac.

(4106) SQLITE_IOERR_CLOSE

Код ошибки SQLITE_IOERR_CLOSE — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в методе xClose объекта sqlite3_io_methods.

(4362) SQLITE_IOERR_DIR_CLOSE

Код SQLITE_IOERR_DIR_CLOSE больше не используется.

(4618) SQLITE_IOERR_SHMOPEN

Код ошибки SQLITE_IOERR_SHMOPEN — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в методе xShmMap объекта sqlite3_io_methods при попытке открыть новый сегмент общей памяти.

(4874) SQLITE_IOERR_SHMSIZE

Код ошибки SQLITE_IOERR_SHMSIZE — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в методе xShmMap объекта sqlite3_io_methods при попытке увеличить файл "shm" в рамках обработки транзакции режима WAL. Эта ошибка может указывать на то, что объем базовой файловой системы переполнен.

(5130) SQLITE_IOERR_SHMLOCK

Код SQLITE_IOERR_SHMLOCK больше не используется.

(5386) SQLITE_IOERR_SHMMAP

Код ошибки SQLITE_IOERR_SHMMAP — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в методе xShmMap объекта sqlite3_io_methods при попытке отобразить сегмент общей памяти в адресное пространство процесса.

(5642) SQLITE_IOERR_SEEK

Код ошибки SQLITE_IOERR_SEEK — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в методах xRead или xWrite объекта sqlite3_io_methods при попытке переместить указатель файла в начало, где будет производиться чтение или запись.

(5898) SQLITE_IOERR_DELETE_NOENT

Код ошибки SQLITE_IOERR_DELETE_NOENT — это расширенный код ошибки для SQLITE_IOERR, указывающий на то, что метод xDelete объекта sqlite3_vfs завершился неудачей, потому что удаляемый файл не существует.

(6154) SQLITE_IOERR_MMAP

Код ошибки SQLITE_IOERR_MMAP — это расширенный код ошибки для SQLITE_IOERR, указывающий на ошибку ввода-вывода в методах xFetch или xUnfetch объекта sqlite3_io_methods при попытке отобразить или отобразить часть файла базы данных в адресное пространство процесса.

(6410) SQLITE_IOERR_GETTEMPPATH

Код ошибки SQLITE_IOERR_GETTEMPPATH — это расширенный код ошибки для SQLITE_IOERR, указывающий на то, что VFS не может определить подходящую директорию для размещения временных файлов.

(6666) SQLITE_IOERR_CONVPATH

Код SQLITE_IOERR_CONVPATH — это расширенный код ошибки для SQLITE_IOERR, используемый только VFS Cygwin и указывающий на неудачу вызова системы cygwin_conv_path(). См. также: SQLITE_CANTOPEN_CONVPATH

(6922) SQLITE_IOERR_VNODE

Код SQLITE_IOERR_VNODE зарезервирован для использования расширениями. Он не используется ядром SQLite.

(7178) SQLITE_IOERR_AUTH

Код SQLITE_IOERR_AUTH зарезервирован для использования расширениями. Он не используется ядром SQLite.

(7434) SQLITE_IOERR_BEGIN_ATOMIC

Код SQLITE_IOERR_BEGIN_ATOMIC указывает, что базовая операционная система сообщила об ошибке при файловом контроле SQLITE_FCNTL_BEGIN_ATOMIC_WRITE. Это возникает только при включенном SQLITE_ENABLE_ATOMIC_WRITE и базе данных, размещенной на файловой системе, поддерживающей атомарные записи.

(7690) SQLITE_IOERR_COMMIT_ATOMIC

Код ошибки SQLITE_IOERR_COMMIT_ATOMIC указывает, что основная операционная система сообщила об ошибке для файлового управления SQLITE_FCNTL_COMMIT_ATOMIC_WRITE. Это возникает только при включенном SQLITE_ENABLE_ATOMIC_WRITE и размещении базы данных на файловой системе, поддерживающей атомарные записи.

(7946) SQLITE_IOERR_ROLLBACK_ATOMIC

Код ошибки SQLITE_IOERR_ROLLBACK_ATOMIC указывает, что основная операционная система сообщила об ошибке для файлового управления SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE. Это возникает только при включенном SQLITE_ENABLE_ATOMIC_WRITE и размещении базы данных на файловой системе, поддерживающей атомарные записи.

(8202) SQLITE_IOERR_DATA

Код ошибки SQLITE_IOERR_DATA является расширенным кодом ошибки для SQLITE_IOERR, используемым только модулем checksum VFS shim для указания того, что контрольная сумма страницы файла базы данных неверна.

(8458) SQLITE_IOERR_CORRUPTFS

Код ошибки SQLITE_IOERR_CORRUPTFS является расширенным кодом ошибки для SQLITE_IOERR, используемым только VFS для указания того, что ошибка поиска или чтения была вызвана тем, что запрос не попал в границы файла, а не обычным сбоем устройства. Это часто указывает на повреждение файловой системы.

Эта страница была изменена в последний раз 14 августа 2024 г. в 17:04:32 UTC

SQLite is in the Public Domain.
https://sqlite.org/rescode.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API