sqlite.h


Determinar su una sentencia SQL escribe en la base de datos

int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);

La función sqlite3_stmt_readonly(X) devuelve true (no cero) si y sólo si la sentencia preparada X no hace cambios directos en el contenido del fichero de base de datos.

Hay que tener en cuenta que las funciones SQL definidas por la aplicación o las tablas virtuales podrían modificar la base de datos de forma indirecta, como efecto secundario. Por ejemplo, si una aplicación define una función "eval()" que llame a sqlite3_exec(), entonces la siguiente sentencias SQL podría modificar la base de datos a través de efectos secundarios:

    SELECT eval('DELETE FROM t1') FROM t2;

Pero como la sentencia SELECT no modifica el fichero de base de datos directamente, sqlite3_stmt_readonly() continuaría retornando true.

Sentencias de control de transacciones como BEGIN, COMMIT, ROLLBACK, SAVEPOINT y RELEASE hacen que sqlite3_stmt_readonly() retornen true, ya que las sentencias por si mismas no modifican la base de datos. Las sentencias ATTACH y DETACH también hacen que sqlite3_stmt_readonly() retorne true, ya que, aunque estas sentencias modifican la configuración de una conexión de base de datos, no hacen cambios en el contenido del fichero de base de datos de disco.