Что означает этот код?
Код SQLITE_BUSY · Проблема, о которой сообщает SQLite.
Перевод описания
Код результата SQLITE_BUSY указывает, что файл базы данных не может быть написан (или в некоторых случаях читается) из-за параллельной деятельности, связанной с каким-либо другим подключением базы данных, обычно подсоединением к базе данных в рамках отдельного процесса. Например, если процесс A находится в середине крупной операции в письменной форме и в то же время процесс B пытается начать новую операцию в письменной форме, процесс B получит результат SQLITE_BUSY, потому что SQLite поддерживает только одного автора за один раз. Процесс B должен будет подождать, пока процесс A закончит свою операцию до начала новой операции. Urlite3_busy_taimout() и firlite3_busy_handler() интерфейсы и занятое_taimeout pragma доступны для обработки B, чтобы помочь ему справиться с ошибками SQLITE_BUSY. Ошибка SQLITE_BUSY может быть допущена в любой момент сделки: когда операция начинается впервые, во время любой операции по письму или обновлению, или когда операция совершается. Для того чтобы избежать ошибок SQLITE_BUSY в середине операции, приложение может использовать BEGIN IMMEDATE вместо BEGIN для начала операции. Команда BEGIN IMMEDITAT может сама вернуть SQLITE_BUSY, но в случае ее успеха SQLITE_BUSY гарантирует, что никакие последующие операции в одной и той же базе данных через следующий Objection не вернут SQLITE_BUSY. См. также: SQLITE_BUSY_RECOVERY и SQLITE_BUSSHOT. SQLITE_LOCKED в том, что SQLITE_BUSY указывает на конфликт с отдельным подключением к базе данных, вероятно, в отдельном процессе, в то время как SQLITE_LOCKED указывает на конфликт в рамках одного и того же подключения к базе данных (или иногда на связь с общей кэшой).
OPUS-MT · Helsinki-NLP / CTranslate2 · Это автоматический перевод. Технические термины и условия применения сверяйте с английским оригиналом.
Официальное описание · Оригинал
The SQLITE_BUSY result code indicates that the database file could not be written (or in some cases read) because of concurrent activity by some other database connection, usually a database connection in a separate process.
For example, if process A is in the middle of a large write transaction and at the same time process B attempts to start a new write transaction, process B will get back an SQLITE_BUSY result because SQLite only supports one writer at a time. Process B will need to wait for process A to finish its transaction before starting a new transaction. The sqlite3_busy_timeout() and sqlite3_busy_handler() interfaces and the busy_timeout pragma are available to process B to help it deal with SQLITE_BUSY errors.
An SQLITE_BUSY error can occur at any point in a transaction: when the transaction is first started, during any write or update operations, or when the transaction commits. To avoid encountering SQLITE_BUSY errors in the middle of a transaction, the application can use BEGIN IMMEDIATE instead of just BEGIN to start a transaction. The BEGIN IMMEDIATE command might itself return SQLITE_BUSY, but if it succeeds, then SQLite guarantees that no subsequent operations on the same database through the next COMMIT will return SQLITE_BUSY.
See also: SQLITE_BUSY_RECOVERY and SQLITE_BUSY_SNAPSHOT.
The SQLITE_BUSY result code differs from SQLITE_LOCKED in that SQLITE_BUSY indicates a conflict with a separate database connection, probably in a separate process, whereas SQLITE_LOCKED indicates a conflict within the same database connection (or sometimes a database connection with a shared cache).