Spec-Zone.ru › SQLite

Прерывание длительной запроса

void sqlite3_interrupt(sqlite3*);
int sqlite3_is_interrupted(sqlite3*);

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

Безопасно вызывать эту процедуру из потока, отличного от потока, в котором в данный момент выполняется операция базы данных. Но не безопасно вызывать эту процедуру с соединением с базой данных, которое закрыто или может быть закрыто до того, как sqlite3_interrupt() вернёт результат.

Если операция SQL почти завершена в момент вызова sqlite3_interrupt(), то она может не получить возможность прерваться и может быть завершена до конца.

Операция SQL, которая прервана, вернёт SQLITE_INTERRUPT. Если прерванная операция SQL — INSERT, UPDATE или DELETE, которая находится внутри явного транзакции, то вся транзакция будет автоматически откатана.

Вызов sqlite3_interrupt(D) активен до тех пор, пока все выполняемые в данный момент операторы SQL по соединению с базой данных D не завершат свою работу. Любые новые операторы SQL, которые запущены после вызова sqlite3_interrupt() и до тех пор, пока счётчик выполняемых операторов не достигнет нуля, прерываются так, как если бы они выполнялись до вызова sqlite3_interrupt(). Новые операторы SQL, которые запущены после того, как счётчик выполняемых операторов достигнет нуля, не затрагиваются этим прерыванием. Вызов sqlite3_interrupt(D), который происходит, когда нет выполняемых операторов SQL, является бесполезной операцией (no-op) и не оказывает никакого влияния на операторы SQL, которые запускаются после возврата вызова sqlite3_interrupt().

Интерфейс sqlite3_is_interrupted(D) может использоваться для определения того, активен ли в данный момент прерывание для соединения с базой данных D. Он возвращает 1, если прерывание активно, или 0 в противном случае.

См. также списки объектов, констант и функций.

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

Spec-Zone.ru

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