sqlite.h


Interrumpir una consulta de larga ejecución

void sqlite3_interrupt(sqlite3*);

Esta función hace que cualquier operación de base de datos pendiente se aborte y regrese en la primera oportunidad. Esta función es llamada típicamente en respuesta a una acción del usuario del tipo de presionar "Cancel" o Ctrl-C cuando el usuario quiere que una operación de consulta larga se detenga inmediatamente.

Es seguro invocar a esta función desde un hilo diferente desde el que se está ejecutando la operación de base de datos. Pero no es seguro llamar a esta función con una conexión de base de datos que está cerrada o podría cerrarse antes de que sqlite3_interrupt() regrese.

Si una operación SQL está muy próxima a finalizar en el momento en que sqlite3_interrupt() es invocada, entonces no tendrá una oportunidad de ser interrumpida y continuará hasta completarse.

Una operación SQL que es interrumpida retornará SQLITE_INTERRUPT. Si la operación SQL interrumpida es un INSERT, UPDATE o DELETE que está dentro de una transacción explícita, la transacción completa será anulada automáticamente.

La llamada sqlite3_interrupt(D) está en efecto hasta que todas las sentencias SQL actualmente en ejecución de la conexión de base de datos D se completen. Cualquier nueva sentencia SQL que haya empezado después de la llamada a sqlite3_interrupt() y antes de que las sentencias en ejecución se anulen, serán todas interrumpidas como si hubieran estado en ejecución antes de la llamada a sqlite3_interrupt(). Las nuevas sentencias SQL que hayan empezado después de que la cuenta de las sentencias en ejecución llege a cero no son afectadas por sqlite3_interrupt(). Una llamada a sqlite3_interrupt(D) que se produzca cuando no hay sentencias SQL en ejecución no hará nada, no afectan a sentencias SQL que hayan comenzado después de que la llamada a sqlite3_interrupt() regrese.

Si la conexión de base de datos se cierra mientras sqlite3_interrupt() se está ejecutando entonces es probable que ocurran cosas malas.