SQLiteのロックのレベルは、UNLOCKED
,SHARED
,RESERVED
,,EXCLUSIVE
です。SQLite3とロックの解放
SQLite APIを呼び出してそのロックを取得して解放する情報が見つかりません。
私はsqlite3_step
が呼び出されたときに取得ロックを理解したよう。ロックのタイプは、準備されたステートメントの式に依存します。また、このコマンドは、カスタムトランザクション内の書き込み操作のロックをエスカレートすることができます。私はsqlite3_stepでもロック解除の書き込みを理解したよう
- このfuncがSQLITE_DONE
またはエラーコードを返します。私はドキュメントを見つけられませんでしたが、この機能は実行の最後にRESERVED
/PENDING
/EXCLUSIVE
をリリースする必要があります。
しかし、私は読み取り操作で何が起こるか分かりません。 照会された行をすべて取得するには、sqlite3_step
を何回か呼び出す必要があります。
私はロックを解除-通知APIからOSのキャッシュと引用についてSQLiteのドキュメントを見つけました:it is not possible for one call to sqlite3_step() to return SQLITE_ROW and then the next SQLITE_LOCKED
私は読み取り操作にsqlite3_step
の最初の呼び出しは、OSのキャッシュにファイルからSHARED
ロックと負荷データを取得することを前提としています。 sqlite3_step
がSQLITE_ROW
(つまりSQLITE_DONE
またはエラーコード)以外の何かを返すと、ロックが解除されました。
それは正しいですか?
読み取り操作のために取得したロックを手動で解放する方法はありますか? sqlite3_reset
?
[ロッキング](http://www.sqlite.org/lockingv3.html)および[トランザクション](http://www.sqlite.org/lang_transaction.html)に関するドキュメントを読みます。 –