SQLite has different levels of locks: UNLOCKED
, SHARED
, RESERVED
, PENDING
, EXCLUSIVE
.
I can't find information which calls to SQLite API acquire and release that locks.
As I understand lock acquired when sqlite3_step
called. Type of lock depends on expression of prepared statement. Also this command can escalate lock in write operations inside a custom transaction.
As I understand write lock released also by sqlite3_step - this func returns SQLITE_DONE
or the error code. I didn't find any docs but seems reasonable that this function should release RESERVED
/PENDING
/EXCLUSIVE
at the end of execution.
But I do not understand what happens with read operations. To get all queried rows we need to call sqlite3_step
several times - each call gives us one row.
I found SQLite docs about OS cache and citation from Unlock-notify API: it is not possible for one call to sqlite3_step() to return SQLITE_ROW and then the next SQLITE_LOCKED
I assume that in read operations first call to sqlite3_step
acquires SHARED
lock and loads data from the file to OS cache. Lock released if sqlite3_step
returned anything except SQLITE_ROW
(i.e. SQLITE_DONE
or error code).
Is it right?
How we can manually release acquired lock for read operation? sqlite3_reset
?
Aucun commentaire:
Enregistrer un commentaire