![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Многие функции в SQLite возвращают числовой результат, который кодирует
указание на любую успешность или неуспешность, и в случае неудачи
обеспечиваеи некоторую идею причины неудачи.
Этот документ стремится объяснить, что каждый из тех
числовых результатов кодирует. "Коды ошибок" это подмножество "кодов результата",
которые указывают, что что-то пошло не так,
как надо. Есть только несколько неошибочных кодов результата:
SQLITE_OK,
SQLITE_ROW и SQLITE_DONE.
Термин "код ошибки" означает любой код результата кроме этих трех.
Коды результата это signed 32-bit integer.
Младшие значащие 8 битов кода результата определяют широкую категорию и
названы "основным кодом результата". Старшие биты обеспечивают
более подробную информацию об ошибке и названы
"расширенным кодом результата". Обратите внимание на то, что основной код результата всегда
часть расширенного кода результата. Учитывая продленный код результата
в полных 32 бита, применение может всегда находить соответствующий основной
код результата, просто извлекая младшие значащие 8 битов
расширенного кода результата. Все расширенные коды результата это также коды ошибок.
Следовательно, термины "продленный код результата" и
"расширенный код ошибки" взаимозаменяемые. Для исторической совместимости интерфейсы языка C возвращают основные коды
результата по умолчанию. Расширенный код результата для новой ошибки может
быть восстановлен, используя
sqlite3_extended_errcode().
sqlite3_extended_result_codes() может использоваться, чтобы поместить
соединение с базой данных в режим, где
это сразу возвращает расширенные коды результата вместо
основных кодов результата. Все коды результата integer.
Символьные имена для всех кодов результата создаются, используя макрос
"#define" в файле заголовка sqlite3.h.
Есть отдельные участки в заголовочном файле sqlite3.h для
кодовых определений результата и
расширенных кодовых определений результата. Основные кодовые символьные имена результата имеют форму "SQLITE_XXXXXX",
где XXXXXX это последовательность заглавных буквенных символов.
Расширенные кодовые названия результата имеют форму "SQLITE_XXXXXX_YYYYYYY",
где часть XXXXXX это соответствующий основной код результата, и YYYYYYY это
расширение, которое далее классифицирует код результата. Имена и числовые значения для существующих кодов результата фиксируются и
неизменны. Однако, новые коды результата и особенно новые расширенные коды
результата, могли бы появиться в будущих выпусках SQLite. 31 код результата определяется в sqlite3.h
и перечисляется в алфавитном порядке ниже:
74 расширенных кода результата
определяются в sqlite3.h и
перечисляются в алфавитном порядке ниже:
Значения для всех 105 кодовых обозначений результата показывают
ниже в числовом порядке.
Код результата SQLITE_OK означает, что операция была успешна и что не было
никаких ошибок. Большинство других кодов результата указывают на ошибку.
Код результата SQLITE_ERROR это универсальный код ошибки, который
используется, когда никакой другой более определенный код ошибки недоступен.
Код результата SQLITE_INTERNAL указывает на внутренний сбой.
В рабочей версии SQLite приложение никогда не должно видеть этот код
результата. Если приложение действительно сталкивается с этим кодом
результата, он показывает, что есть ошибка в ядре базы данных.
SQLite в настоящее время не производит этот код результата. Однако,
определенные применением функции SQL,
виртуальные таблицы, VFS или
другие расширения могли бы заставить этот код результата быть возвращенным.
Код результата SQLITE_PERM указывает, что требуемый режим доступа для
недавно созданной базы данных не мог быть обеспечен.
Код результата SQLITE_ABORT указывает, что операция была прервана до
завершения, обычно запросом приложения. См. также:
SQLITE_INTERRUPT.
Если функция обратного вызова sqlite3_exec()
вернет отличное от нуля значение, то sqlite3_exec() вернет SQLITE_ABORT.
Если ROLLBACK происходит на том же
самом соединении с БД как ждущее чтение или
запись, то ожидание может потерпеть неудачу с SQLITE_ABORT или ошибкой
SQLITE_ABORT_ROLLBACK.
В дополнение к тому, чтобы быть кодом результата, значение
SQLITE_ABORT также используется в качестве
способа разрешения конфликтов, возвращенного
из sqlite3_vtab_on_conflict().
Код результата SQLITE_BUSY указывает, что файл базы данных не мог быть
написан (или в некоторых случаях прочитан)
из-за параллельной деятельности некоторым другим
соединением с базой данных,
обычно соединением с базой данных в отдельном процессе.
Например, если процесс A будет посреди большой транзакции записи, и в то
же время процесс B пытается начаться, то новая транзакция записи, чтобы
обработать B возвратит результат SQLITE_BUSY, потому что SQLite поддерживает
только одного писателя за один раз.
Процесс B должен будет ждать процесс A, чтобы тот закончил его транзакцию
прежде, чем начать новую.
sqlite3_busy_timeout(),
sqlite3_busy_handler() и
busy_timeout pragma
доступны процессу 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
указывает на конфликт в рамках того же самого
соединения с базой данных (или иногда
соединения с базой данных с общим кэшем).
Код результата SQLITE_LOCKED указывает, что операция записи не могла
продолжиться из-за конфликта в рамках того же самого
соединения с базой данных (или иногда
соединения с базой данных с общим кэшем.
Например, запросом DROP TABLE
нельзя управлять в то время, как другой поток читает от той таблицы
на том же самом
соединении с базой данных, потому что удаление таблицы
удалило бы таблицу у параллельного читателя.
Код результата SQLITE_LOCKED отличается от
SQLITE_BUSY в том, что
SQLITE_LOCKED указывает на конфликт на том же самом
соединения с базой данных (или иногда
соединения с базой данных с общим кэшем),
тогда как SQLITE_BUSY
указывает на конфликт с различным соединением с базой данных,
вероятно в другом процессе.
Код результата SQLITE_NOMEM указывает, что SQLite был неспособен
ассигновать всю память, чтобы закончить операцию.
Другими словами, внутренний вызов sqlite3_malloc()
или sqlite3_realloc() обломался
в случае, где ассигнуемая память требовалась, чтобы продолжить операцию.
Код результата SQLITE_READONLY возвращен, когда предпринята попытка,
чтобы изменить некоторые данные, для которых текущее соединение с базой
данных не имеет права записи.
Код результата SQLITE_INTERRUPT указывает, что операция была прервана
sqlite3_interrupt(). См. также:
SQLITE_ABORT
В коде результата SQLITE_IOERR говорится, что операция не могла
закончиться, потому что операционная система сообщила об ошибке I/O.
Полный дисковод будет обычно давать ошибку
SQLITE_FULL вместо SQLITE_IOERR.
Есть много различных расширенных кодов результата для ошибок I/O, которые
определяют определенную операцию I/O, которая потерпела неудачу.
Код результата SQLITE_CORRUPT указывает, что файл базы данных был
испорчен. Посмотрите здесь
для дальнейшего обсуждения того, как это может произойти.
Код результата SQLITE_NOTFOUND выставляется тремя способами:
SQLITE_NOTFOUND может быть возвращен
sqlite3_file_control(),
чтобы указать, что
файл управляет кодом операции, переданный как
третий аргумент, не был признан основным VFS.
SQLITE_NOTFOUND может также быть возвращен методом xSetSystemCall()
объекта sqlite3_vfs.
SQLITE_NOTFOUND может быть возвращен
sqlite3_vtab_rhs_value(),
чтобы указать, что правый операнд ограничения недоступен методу
xBestIndex, который сделал вызов. Код результата SQLITE_NOTFOUND также используется внутренне внедрением
SQLite, но те внутренние использования не выставляются приложению.
Код результата SQLITE_FULL указывает, что запись не могла закончиться,
потому что диск полон. Обратите внимание на то, что эта ошибка может
произойти, пытаясь написать информацию в главный файл базы данных, или это
может также произойти, записывая
временные дисковые файлы.
Иногда запросы сталкиваются с этой ошибкой даже при том, что есть изобилие
пространства первичного диска, потому что ошибка происходит, записывая во
временные дисковые файлы на системе, где
временные файлы хранятся на отдельном разделе
с намного меньшим количеством пространства.
Код результата SQLITE_CANTOPEN указывает, что SQLite был неспособен
открыть файл. Рассматриваемый файл мог бы быть основным файлом базы данных
или одним из нескольких
временных дисковых файлов.
Код результата SQLITE_PROTOCOL указывает на проблему с протоколом
блокировки файла, используемым SQLite. Ошибка SQLITE_PROTOCOL в настоящее
время возвращена только, используя режим WAL
и пытаясь начать новую транзакцию.
Есть состояние состязания, которое может произойти когда два отдельных
соединения оба делают попытки начать
транзакцию в режиме WAL в то же время.
Проигравший гонку отступает и пробует еще раз после краткой задержки.
Если та же самая связь проиграет гонку десятки раз
за много секунд, это в конечном счете сдастся и возвратит SQLITE_PROTOCOL.
Ошибка SQLITE_PROTOCOL должна появиться на практике очень, очень редко, и
только когда есть много отдельных процессов, пишущих
ту же самую базу данных.
Код результата SQLITE_EMPTY в настоящее время не используется.
Код результата SQLITE_SCHEMA указывает, что схема базы данных изменилась.
Этот код результата может быть возвращен из
sqlite3_step() для
подготовленного запроса,
который был произведен, используя
sqlite3_prepare() или
sqlite3_prepare16().
Если схема базы данных была изменена некоторым другим процессом в то время,
когда запрос подготовлен, но еще не выполнен, эта ошибка может быть выдана.
Если подготовленный запрос произведен
sqlite3_prepare_v2(), он
автоматически повторно подготовлен, если схема изменяется, максимум
SQLITE_MAX_SCHEMA_RETRY раз
(умолчание: 50). sqlite3_step()
возвратит SQLITE_SCHEMA назад к приложению только если неудача сохранится
это число повторений.
Код ошибки 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,...).
Код ошибки SQLITE_CONSTRAINT означает, что ограничительное нарушение SQL
произошло, пытаясь обработать SQL-оператор. Дополнительная информация о
неудавшемся ограничении может быть найдена, консультируясь с сопровождающим
сообщением об ошибке (возвращается через
sqlite3_errmsg() или
sqlite3_errmsg16()) или смотря на
расширенный код ошибки.
Код SQLITE_CONSTRAINT может также использоваться в качестве возвращаемого
значения метода xBestIndex()
виртуальной таблицы. Когда xBestIndex() вернет
SQLITE_CONSTRAINT, это указывает, что конкретная комбинация входов,
представленных xBestIndex(), не может привести к применимому плану запросов и
не должна быть рассмотрена в дальнейшем.
Код ошибки SQLITE_MISMATCH указывает на неверный тип данных.
SQLite обычно очень прощающий о несоответствиях между типом
и заявленным типом контейнера, в котором должно быть сохранено значение.
Например, SQLite позволяет запросу сохранить большой BLOB в колонке с
заявленным типом BOOLEAN. Но в нескольких случаях, SQLite строг в типах.
Ошибка SQLITE_MISMATCH возвращена в тех немногих случаях, когда
типы не соответствуют.
rowid таблицы должен быть
integer. Попытайтесь установить
rowid во что-либо кроме целого числа (или NULL, который будет
автоматически преобразован в следующее доступное целое число rowid),
результатом будет ошибка SQLITE_MISMATCH.
Код возврата SQLITE_MISUSE мог бы быть возвращен, если применение
использует какой-либо интерфейс SQLite способом, который не определен или не
поддерживается. Например, используя
подготовленный запрос после того, как он был
закрыт, можно получить
ошибку SQLITE_MISUSE.
SQLite пытается обнаружить неправильное употребление и сообщить о
неправильном употреблении, используя этот код результата. Однако, нет никакой
гарантии, что обнаружение неправильного употребления будет успешно.
Обнаружение неправильного употребления вероятностное.
Запросы никогда не должны зависеть от возвращаемого значения SQLITE_MISUSE.
Если SQLite когда-нибудь возвращает SQLITE_MISUSE из какого-либо
интерфейса, это означает, что приложение неправильно закодировано и должно
быть исправлено. Не отправляйте приложение, которое иногда возвращает
SQLITE_MISUSE из стандартного интерфейса SQLite, потому что это содержит
потенциально серьезные ошибки.
Ошибка SQLITE_NOLFS может быть возвращена на системах, которые не
поддерживают большие файлы, когда база данных растет, чтобы быть больше того,
с чем может обращаться файловая система. "NOLFS" обозначает
"NO Large File Support".
Ошибка SQLITE_AUTH возвращена, когда
отзыв авторизатора
указывает, что подготовленный SQL-оператор не разрешен.
Код ошибки SQLITE_FORMAT в настоящее время не используется SQLite.
Ошибка SQLITE_RANGE указывает, что аргумент номера параметра к одному из
sqlite3_bind или номера столбца в одном из
sqlite3_column вне диапазона.
Пытаясь открыть файл, ошибка SQLITE_NOTADB указывает, что открываемый
файл, кажется, не файл базы данных SQLite.
Код результата SQLITE_NOTICE не возвращен никаким интерфейсом C/C++.
Однако, SQLITE_NOTICE (или скорее один из его
расширенных кодов ошибок) иногда
используется в качестве первого аргумента в отзыве
sqlite3_log(), чтобы указать, что
происходит необычная операция.
Код результата SQLITE_WARNING не возвращен никаким интерфейсом C/C++.
Однако, SQLITE_WARNING (или скорее один из его
расширенных кодов ошибок) иногда
используется в качестве первого аргумента в отзыве
sqlite3_log(), чтобы указать, что
происходит необычная операция.
Код результата SQLITE_ROW, возвращенный
sqlite3_step(), указывает, что другая
строка вывода доступна.
Код результата SQLITE_DONE указывает, что операция закончилась.
Код результата SQLITE_DONE обычно рассматривается как возвращаемое
значение от sqlite3_step(),
указывая, что SQL-оператор дошел до завершения.
Но SQLITE_DONE может также быть возвращен другими многоступенчатыми
интерфейсами, такими как
sqlite3_backup_step().
sqlite3_load_extension()
загружает расширение в связь единой базы данных.
Поведение по умолчанию для того расширения, которое будет автоматически
выгружено, когда соединение с базой данных закрывается.
Однако, если дополнительная точка входа возвращает SQLITE_OK_LOAD_PERMANENTLY
вместо SQLITE_OK, то расширение остается загруженным
в адресное пространство процесса после того, как соединение с базой данных
закрывается. Другими словами, метод xDlClose объекта
sqlite3_vfs
не вызван для расширения, когда соединение с базой данных закрывается.
Код возврата SQLITE_OK_LOAD_PERMANENTLY полезен для
загружаемых расширений, которые регистрируют новую
VFS, например.
Код результата SQLITE_ERROR_MISSING_COLLSEQ означает, что SQL-оператор не
мог быть подготовлен, потому что последовательность сопоставления, названная
в том SQL-операторе, не могла быть найдена.
Иногда, когда с этим кодом ошибки сталкиваются,
sqlite3_prepare_v2()
преобразует ошибку в SQLITE_ERROR_RETRY
и попробует еще раз готовить SQL-оператор, используя различный план
запросов, который не требует использования
неизвестной последовательности сопоставления.
Код ошибки SQLITE_BUSY_RECOVERY это
расширенный код ошибки для
SQLITE_BUSY,
который указывает, что операция не могла продолжиться, потому что другой
процесс занят, восстанавливая файл базы данных в режиме
WAL после сбоя.
Код ошибки SQLITE_BUSY_RECOVERY происходит только на базах данных в режиме
WAL.
Код результата SQLITE_LOCKED_SHAREDCACHE указывает, что доступ к записи
данных SQLite блокирован другим соединением с базой данных, которое
использует тот же самый отчет в
режиме общего кэша.
Когда два или больше соединения с базой данных разделяют тот же самый кэш,
и одна из связей посреди изменения отчета в том кэше,
другие связи заблокированы на доступ к тем данным, в то время как модификации
продолжаются, чтобы препятствовать тому, чтобы читатели видели
частично завершенное изменение.
Код ошибки SQLITE_READONLY_RECOVERY это
расширенный код ошибки для
SQLITE_READONLY.
Код ошибки SQLITE_READONLY_RECOVERY указывает, что база данных в режиме
WAL не может быть открыта, потому что файл базы данных
должен быть восстановлен, и восстановление требует доступа для записи, но
доступен только доступ для чтения.
Код ошибки SQLITE_IOERR_READ это
расширенный код ошибки для
SQLITE_IOERR,
указывающий на ошибку I/O в слое VFS,
пытаясь читать из файла на диске. Эта ошибка могла бы следовать из сбоя
аппаратных средств или потому что файловая система отмонтирована
в то время, как файл был открыт.
Код ошибки SQLITE_CORRUPT_VTAB это
расширенный код ошибки для
SQLITE_CORRUPT используемого
виртуальными таблицами.
Таблица могла бы возвратить SQLITE_CORRUPT_VTAB,
чтобы указать, что содержание в виртуальной таблице повреждено.
Код ошибки SQLITE_CANTOPEN_NOTEMPDIR больше не используется.
Код ошибки SQLITE_CONSTRAINT_CHECK это
расширенный код ошибки для
SQLITE_CONSTRAINT, указывающего, что
ограничение CHECK
потерпело неудачу.
Код ошибки SQLITE_AUTH_USER это
расширенный код ошибки для
SQLITE_AUTH, указывающий,
что операция была предпринята на базе данных, на которой
пользователь не имеет достаточных прав.
Код результата SQLITE_NOTICE_RECOVER_WAL передан к отзыву
sqlite3_log(), когда файл базы данных в режиме
WAL восстановлен.
Код результата SQLITE_WARNING_AUTOINDEX передан к отзыву
sqlite3_log() каждый раз, когда используется
автоматическая индексация.
Это может служить предупреждением разработчикам приложений, что база данных
могла бы извлечь выгоду из дополнительных индексов.
SQLITE_ERROR_RETRY используется внутренне, чтобы побудить
sqlite3_prepare_v2()
попробовать еще раз подготовить запрос, который потерпел неудачу с
ошибкой на предыдущей попытке.
Код ошибки SQLITE_ABORT_ROLLBACK это
расширенный код ошибки для
SQLITE_ABORT, указывающий, что
SQL-оператор прервался, потому что транзакция, которая была активна,
когда SQL-оператор начат, была отменена.
Надвигающиеся операции записи всегда терпят неудачу с этой ошибкой,
когда обратная перемотка происходит.
ROLLBACK
заставит надвигающуюся операцию чтения терпеть неудачу, только если
схема была изменена в отменяемой транзакции.
Код ошибки SQLITE_BUSY_SNAPSHOT это
расширенный код ошибки для
SQLITE_BUSY,
который происходит на базах данных в режиме
WAL, когда соединение с базой данных пытается
улучшить транзакцию чтения до транзакции записи, но находит, что другое
соединение с БД
уже пишет базу данных и таким образом блокирует предыдущее чтение.
Следующий сценарий иллюстрирует, как могла бы возникнуть ошибка
SQLITE_BUSY_SNAPSHOT:
Код результата SQLITE_LOCKED_VTAB не используется ядром SQLite, но это
доступно для использования расширениями.
Виртуальные таблицы могут возвратить этот код результата, чтобы указать, что
они не могут закончить текущую операцию из-за блокировок,
проводимых другими потоками или процессами.
Расширение R-Tree
возвращает этот код результата, когда предпринята попытка обновить R-дерево
в то время, как другой подготовленный запрос активно читает R-дерево.
Обновление не может продолжиться, потому что любое изменение R-дерева могло
бы включить перестановку и изменение баланса узлов, которые разрушат
прочитанные курсоры, заставляя некоторые строки
быть повторенными и пропустить другие строки.
SQLITE_READONLY_CANTLOCK это
расширенный код ошибки
для SQLITE_READONLY.
Код ошибки SQLITE_READONLY_CANTLOCK указывает, что SQLite неспособен получить
блокировку чтения на БД в режиме WAL, потому что файл
общей памяти, связанный с той базой данных, только для чтения.
SQLITE_IOERR_SHORT_READ это
расширенный код ошибки
для SQLITE_IOERR,
указывающий, что попытка чтения в слое VFS
была неспособна получить столько байтов, сколько надо.
Это могло бы произойти из-за усеченного файла.
Код результата SQLITE_CORRUPT_SEQUENCE означает, что схема таблицы
sqlite_sequence накрылась. Таблица sqlite_sequence
используется, чтобы помочь реализовать опцию
AUTOINCREMENT.
Таблица sqlite_sequence должна быть в следующем формате:
Если SQLite обнаруживает, что у sqlite_sequence
есть любой другой формат, это возвращает ошибку SQLITE_CORRUPT_SEQUENCE.
SQLITE_CANTOPEN_ISDIR это
расширенный код ошибки
для SQLITE_CANTOPEN,
указывающий, что операция открытия файла потерпела неудачу, потому что файл
на самом деле каталог.
SQLITE_CONSTRAINT_COMMITHOOK это
расширенный код ошибки
для SQLITE_CONSTRAINT,
указывающий, что commit hook callback
вернул не 0, который таким образом заставил SQL-оператор отменится.
Код результата SQLITE_NOTICE_RECOVER_ROLLBACK передан к отзыву
sqlite3_log() при откате
горячего журнала.
Код результата SQLITE_ERROR_SNAPSHOT мог бы быть возвращен, пытаясь начать
транзакцию чтения на исторической версии базы данных при помощи
sqlite3_snapshot_open().
Если исторический снимок больше не будет доступен, то транзакция
потерпит неудачу с SQLITE_ERROR_SNAPSHOT. Этот код ошибки возможен только,
если SQLite собран с
-DSQLITE_ENABLE_SNAPSHOT.
Код ошибки SQLITE_BUSY_TIMEOUT указывает, что консультативная блокировка
Posix файла в слое VFS потерпела неудачу из-за тайм-аута.
Это доступно только как собственное расширение SQLite и даже тогда
поддерживается только, если SQLite собран с выбором времени компиляции
SQLITE_EANBLE_SETLK_TIMEOUT.
SQLITE_READONLY_ROLLBACK это
расширенный код ошибки
для SQLITE_READONLY.
SQLITE_READONLY_ROLLBACK указывает, что база данных не может быть открыта,
потому что у этого есть горячий журнал
, который должен быть отменен, но этого сделать нельзя, потому что база
данных только для чтения.
SQLITE_IOERR_WRITE это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в слое VFS, пытаясь написать
в файл на диске. Эта ошибка могла бы следовать из сбоя аппаратных средств или
потому что файловая система отмонтирована в то время, как файл был открыт.
Эта ошибка не должна происходить, если файловая система полна, поскольку есть
отдельный код ошибки (SQLITE_FULL) с этой целью.
SQLITE_CORRUPT_INDEX означает, что SQLite обнаружил вход, отсутствующий в
индексе. Это особый случай кода ошибки
SQLITE_CORRUPT,
который предполагает, что проблема могла бы быть решена, управляя командой
REINDEX, предполагая, что никакие другие
проблемы не существуют в другом месте в файле базы данных.
SQLITE_CANTOPEN_FULLPATH это
расширенный код ошибки
для SQLITE_CANTOPEN,
указывающий, что операция открытия файла потерпела неудачу, потому что
операционная система была неспособна преобразовать имя файла в полный путь.
SQLITE_CONSTRAINT_FOREIGNKEY это
расширенный код ошибки
для SQLITE_CONSTRAINT,
указывающий, что ограничение внешнего ключа
потерпело неудачу.
SQLITE_READONLY_DBMOVED это
расширенный код ошибки
для SQLITE_READONLY.
SQLITE_READONLY_DBMOVED Код ошибки SQLITE_READONLY_DBMOVED указывает, что
база данных не может быть изменена, потому что файл базы данных был
перемещен после того, как это было открыто,
и таким образом, любая попытка изменить базу данных могла бы привести к
повреждению базы данных, если процессы терпят крах, потому что
журнал отката правильно не назовут.
SQLITE_IOERR_FSYNC это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в слое VFS, пытаясь
сбросить на диск записанные данные.
Другими словами, этот код указывает на проблему с системным вызовом
fsync() в unix или с FlushFileBuffers() в windows.
SQLITE_CANTOPEN_CONVPATH это
расширенный код ошибки
для SQLITE_CANTOPEN,
используемый только Cygwin VFS
указывая, что системный вызов cygwin_conv_path()
не смог открыть файл. См. также:
SQLITE_IOERR_CONVPATH.
Код ошибки SQLITE_CONSTRAINT_FUNCTION в настоящее время не используется
ядром SQLite. Однако, этот код ошибки доступен для
использования дополнительными функциями.
Код результата SQLITE_READONLY_CANTINIT происходит в методе xShmMap
VFS, чтобы указать, что регион общей памяти,
используемый режимом WAL,
существует, но его содержание ненадежно и непригодно для использования
текущим процессом, так как текущий процесс не имеет разрешения записи
на регионе общей памяти. Регион общей памяти для режима WAL это обычно
файл с суффиксом "-wal", который отображен
в пространство процесса. Если текущий процесс не имеет разрешения записи
на том файле, то это не может написать в общую память.
Высокоуровневая логика в SQLite будет обычно перехватывать код ошибки и
создавать временный регион общей памяти в памяти так, чтобы текущий процес
с мог, по крайней мере, прочитать содержание базы данных. Этот код результата
не должен достигать слоя интерфейса приложения.
SQLITE_IOERR_DIR_FSYNC это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в слое VFS,
пытаясь вызвать fsync() в каталоге. unix VFS
делает попытку fsync() после создания или удаления определенных файлов, чтобы
гарантировать, что те файлы все же появятся в файловой системе после
системной катастрофы или потерь питания. Этот код ошибки указывает на
проблему, пытающуюся выполнить этот fsync().
Код результата SQLITE_CANTOPEN_DIRTYWAL не используется в это время.
Код ошибки SQLITE_CONSTRAINT_NOTNULL это
расширенный код ошибки
для SQLITE_CONSTRAINT,
указывающий, что
ограничение NOT NULL навернулось.
Код результата SQLITE_READONLY_DIRECTORY указывает, что база данных только
для чтения, потому что у процесса нет разрешения создать файл журнала в том
же самом каталоге, где база данных, и создание файла журнала это
предпосылка для написания.
SQLITE_IOERR_TRUNCATE это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в слое VFS,
пытаясь усечь файл к меньшему размеру.
Код результата SQLITE_CANTOPEN_SYMLINK возвращен
sqlite3_open(), когда флаг
SQLITE_OPEN_NOFOLLOW
используется, и файл базы данных это символьная ссылка.
SQLITE_CONSTRAINT_PRIMARYKEY это
расширенный код ошибки
для SQLITE_CONSTRAINT,
указывающий, что
ограничение PRIMARY KEY потерпело неудачу.
SQLITE_IOERR_FSTAT это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в слое VFS,
пытаясь вызвать fstat() (или эквивалент) на файле, чтобы определить
такую информацию, как размер файла или права доступа.
SQLITE_CONSTRAINT_TRIGGER это
расширенный код ошибки
для SQLITE_CONSTRAINT,
указывающий, что функция RAISE
в запущенном триггере
заставила SQL-оператор прерваться.
SQLITE_IOERR_UNLOCK это
расширенный код ошибки для SQLITE_IOERR,
указывающий на ошибку I/O в рамках метода xUnlock на объекте
sqlite3_io_methods.
SQLITE_CONSTRAINT_UNIQUE это
расширенный код ошибки
для SQLITE_CONSTRAINT,
указывающий, что
ограничение UNIQUE потерпело неудачу.
SQLITE_IOERR_RDLOCK это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в рамках метода xLock на объекте
sqlite3_io_methods, пытаясь
получить блокировку чтения.
Код ошибки SQLITE_CONSTRAINT_VTAB в настоящее время не используется ядром
SQLite. Однако, этот код ошибки доступен для использования определенными
приложением виртуальными таблицами.
SQLITE_IOERR_DELETE это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в рамках метода xDelete на объекте
sqlite3_vfs.
SQLITE_CONSTRAINT_ROWID это
расширенный код ошибки
для SQLITE_CONSTRAINT,
указывающий, что rowid не уникален.
Код ошибки SQLITE_IOERR_BLOCKED больше не используется.
SQLITE_CONSTRAINT_PINNED это
расширенный код ошибки
для SQLITE_CONSTRAINT,
указывающий, что триггер UPDATE
действительно удаляет строку, которая обновлялась посреди обновления.
Код ошибки SQLITE_IOERR_NOMEM иногда возвращается слоем
VFS, чтобы указать, что операция не могла быть
закончена из-за неспособности ассигновать достаточную память.
Этот код ошибки обычно преобразовывается в
SQLITE_NOMEM
более высокими слоями SQLite прежде, чем быть возвращенным к применению.
SQLITE_CONSTRAINT_DATATYPE это
расширенный код ошибки
для SQLITE_CONSTRAINT,
указывающий, что вставка или обновление попытались сохранить значение,
несовместимое с заявленным типом колонки в таблице, определенной как STRICT.
SQLITE_IOERR_ACCESS это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в рамках метода xAccess на объекте
sqlite3_vfs.
SQLITE_IOERR_CHECKRESERVEDLOCK это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в рамках метода xCheckReservedLock на объекте
sqlite3_io_methods.
SQLITE_IOERR_LOCK это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в консультативной логике блокировки файла.
Обычно ошибка SQLITE_IOERR_LOCK указывает на проблему, получая
блокировку PENDING.
Однако, это может также указать на разные ошибки блокировки
на некоторых специализированных
VFS на Mac.
SQLITE_IOERR_CLOSE это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в рамках метода xClose на объекте
sqlite3_io_methods.
Код ошибки SQLITE_IOERR_DIR_CLOSE больше не используется.
SQLITE_IOERR_SHMOPEN это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в рамках метода xShmMap на объекте
sqlite3_io_methods, пытаясь открыть новый
сегмент общей памяти.
SQLITE_IOERR_SHMSIZE это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в рамках метода xShmMap на объекте
sqlite3_io_methods,
пытаясь увеличить файл "shm"
как часть обработки транзакций режима WAL.
Эта ошибка может указать, что основной том файловой системы переполнен.
Код ошибки SQLITE_IOERR_SHMLOCK больше не используется.
SQLITE_IOERR_SHMMAP это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в рамках метода xShmMap на объекте
sqlite3_io_methods, пытаясь отобразить
сегмент общей памяти в адресное пространство процесса.
SQLITE_IOERR_SEEK это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в методах xRead или xWrite на объекте
sqlite3_io_methods,
пытаясь установить дескриптор файла на начальную точку файла, где чтение
или запись должны произойти.
SQLITE_IOERR_DELETE_NOENT это
расширенный код ошибки
для SQLITE_IOERR,
указывающий, что метод xDelete на объекте
sqlite3_vfs
потерпел неудачу, потому что удаляемый файл не существует.
SQLITE_IOERR_MMAP это
расширенный код ошибки
для SQLITE_IOERR,
указывающий на ошибку I/O в методах xFetch или xUnfetch на объекте
sqlite3_io_methods,
пытаясь отобразить часть файла базы данных в адресное пространство процесса.
SQLITE_IOERR_GETTEMPPATH это
расширенный код ошибки
для SQLITE_IOERR,
указывающий, что VFS неспособен определить подходящий
каталог, в который можно поместить временные файлы.
SQLITE_IOERR_CONVPATH это
расширенный код ошибки
для SQLITE_IOERR,
используемый только Cygwin VFS
и указывающий, что системный вызов cygwin_conv_path() сбойнул.
См. также:
SQLITE_CANTOPEN_CONVPATH.
Код ошибки SQLITE_IOERR_VNODE это код, зарезервированный для использования
расширениями. Это не используется ядром SQLite.
Код ошибки SQLITE_IOERR_AUTH это код, зарезервированный для использования
расширениями. Это не используется ядром SQLite.
Код ошибки SQLITE_IOERR_BEGIN_ATOMIC указывает, что основная операционная
система имеет проблему, о которой сообщают, и есть ошибка
SQLITE_FCNTL_BEGIN_ATOMIC_WRITE относительно контроля файла.
Это происходит только, когда
SQLITE_ENABLE_ATOMIC_WRITE позволен, и база данных размещена
в файловой системе, которая поддерживает атомную запись.
Код ошибки SQLITE_IOERR_COMMIT_ATOMIC указывает, что основная операционная
система имеет проблему, о которой сообщают, и есть ошибка
SQLITE_FCNTL_COMMIT_ATOMIC_WRITE относительно контроля файла.
Это происходит только, когда
SQLITE_ENABLE_ATOMIC_WRITE позволен, и база данных размещена
в файловой системе, которая поддерживает атомную запись.
Код ошибки SQLITE_IOERR_ROLLBACK_ATOMIC указывает, что основная операционная
система имеет проблему, о которой сообщают, и есть ошибка
SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE относительно контроля файла.
Это происходит только, когда
SQLITE_ENABLE_ATOMIC_WRITE позволен, и база данных размещена
в файловой системе, которая поддерживает атомную запись.
SQLITE_IOERR_DATA это
расширенный код ошибки
для SQLITE_IOERR,
используемый только checksum VFS shim,
чтобы указать, что контрольная сумма на странице файла
базы данных неправильная.
SQLITE_IOERR_CORRUPTFS это
расширенный код ошибки
для SQLITE_IOERR,
используемый только VFS, чтобы указать, что поиск или чтение
сбойнули из-за запроса, не находящегося в пределах границы файла, а не
обычного отказа устройства. Это часто указывает на
поврежденную файловую систему.
Choose any three.
Обзор
1. Результат и коды ошибок
2. Основные коды результата против расширенных кодов результата
3. Определения
4.
Основной кодовый список результата
5.
Расширенный кодовый список результата
6.
Кодовые значения результата
(0) SQLITE_OK
(1) SQLITE_ERROR
(2) SQLITE_INTERNAL
(3) SQLITE_PERM
(4) SQLITE_ABORT
(5) SQLITE_BUSY
(6) SQLITE_LOCKED
(7) SQLITE_NOMEM
(8) SQLITE_READONLY
(9) SQLITE_INTERRUPT
(10) SQLITE_IOERR
(11) SQLITE_CORRUPT
(12) SQLITE_NOTFOUND
(13) SQLITE_FULL
(14) SQLITE_CANTOPEN
(15) SQLITE_PROTOCOL
(16) SQLITE_EMPTY
(17) SQLITE_SCHEMA
(18) SQLITE_TOOBIG
(19) SQLITE_CONSTRAINT
(20) SQLITE_MISMATCH
(21) SQLITE_MISUSE
(22) SQLITE_NOLFS
(23) SQLITE_AUTH
(24) SQLITE_FORMAT
(25) SQLITE_RANGE
(26) SQLITE_NOTADB
(27) SQLITE_NOTICE
(28) SQLITE_WARNING
(100) SQLITE_ROW
(101) SQLITE_DONE
(256) SQLITE_OK_LOAD_PERMANENTLY
(257) SQLITE_ERROR_MISSING_COLLSEQ
(261) SQLITE_BUSY_RECOVERY
(262) SQLITE_LOCKED_SHAREDCACHE
(264) SQLITE_READONLY_RECOVERY
(266) SQLITE_IOERR_READ
(267) SQLITE_CORRUPT_VTAB
(270) SQLITE_CANTOPEN_NOTEMPDIR
(275) SQLITE_CONSTRAINT_CHECK
(279) SQLITE_AUTH_USER
(283) SQLITE_NOTICE_RECOVER_WAL
(284) SQLITE_WARNING_AUTOINDEX
(513) SQLITE_ERROR_RETRY
(516) SQLITE_ABORT_ROLLBACK
(517) SQLITE_BUSY_SNAPSHOT
(518) SQLITE_LOCKED_VTAB
(520) SQLITE_READONLY_CANTLOCK
(522) SQLITE_IOERR_SHORT_READ
(523) SQLITE_CORRUPT_SEQUENCE
CREATE TABLE sqlite_sequence(name,seq);
(526) SQLITE_CANTOPEN_ISDIR
(531) SQLITE_CONSTRAINT_COMMITHOOK
(539) SQLITE_NOTICE_RECOVER_ROLLBACK
(769) SQLITE_ERROR_SNAPSHOT
(773) SQLITE_BUSY_TIMEOUT
(776) SQLITE_READONLY_ROLLBACK
(778) SQLITE_IOERR_WRITE
(779) SQLITE_CORRUPT_INDEX
(782) SQLITE_CANTOPEN_FULLPATH
(787) SQLITE_CONSTRAINT_FOREIGNKEY
(1032) SQLITE_READONLY_DBMOVED
(1034) SQLITE_IOERR_FSYNC
(1038) SQLITE_CANTOPEN_CONVPATH
(1043) SQLITE_CONSTRAINT_FUNCTION
(1288) SQLITE_READONLY_CANTINIT
(1290) SQLITE_IOERR_DIR_FSYNC
(1294) SQLITE_CANTOPEN_DIRTYWAL
(1299) SQLITE_CONSTRAINT_NOTNULL
(1544) SQLITE_READONLY_DIRECTORY
(1546) SQLITE_IOERR_TRUNCATE
(1550) SQLITE_CANTOPEN_SYMLINK
(1555) SQLITE_CONSTRAINT_PRIMARYKEY
(1802) SQLITE_IOERR_FSTAT
(1811) SQLITE_CONSTRAINT_TRIGGER
(2058) SQLITE_IOERR_UNLOCK
(2067) SQLITE_CONSTRAINT_UNIQUE
(2314) SQLITE_IOERR_RDLOCK
(2323) SQLITE_CONSTRAINT_VTAB
(2570) SQLITE_IOERR_DELETE
(2579) SQLITE_CONSTRAINT_ROWID
(2826) SQLITE_IOERR_BLOCKED
(2835) SQLITE_CONSTRAINT_PINNED
(3082) SQLITE_IOERR_NOMEM
(3091) SQLITE_CONSTRAINT_DATATYPE
(3338) SQLITE_IOERR_ACCESS
(3594) SQLITE_IOERR_CHECKRESERVEDLOCK
(3850) SQLITE_IOERR_LOCK
(4106) SQLITE_IOERR_CLOSE
(4362) SQLITE_IOERR_DIR_CLOSE
(4618) SQLITE_IOERR_SHMOPEN
(4874) SQLITE_IOERR_SHMSIZE
(5130) SQLITE_IOERR_SHMLOCK
(5386) SQLITE_IOERR_SHMMAP
(5642) SQLITE_IOERR_SEEK
(5898) SQLITE_IOERR_DELETE_NOENT
(6154) SQLITE_IOERR_MMAP
(6410) SQLITE_IOERR_GETTEMPPATH
(6666) SQLITE_IOERR_CONVPATH
(6922) SQLITE_IOERR_VNODE
(7178) SQLITE_IOERR_AUTH
(7434) SQLITE_IOERR_BEGIN_ATOMIC
(7690) SQLITE_IOERR_COMMIT_ATOMIC
(7946) SQLITE_IOERR_ROLLBACK_ATOMIC
(8202) SQLITE_IOERR_DATA
(8458) SQLITE_IOERR_CORRUPTFS