loopbackio / loopbackio/loopback-connector-sqlite3
Transaction types
まだ誰も着手していません。
- 主要言語
- JavaScript
- スター
- 13
- フォーク
- 21
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
Hi! 👋
Firstly, thanks for your work on this project! 🙂
Today I used patch-package to patch loopback-connector-sqlite3@3.0.0 for the project I'm working on.
The issue i'm facing is that loopback uses enum of isolation levels (below), which doesn't correspond to the sqlite3-supported list of transaction options.
The Loopback enum:
export declare enum IsolationLevel {
READ_COMMITTED = "READ COMMITTED",
READ_UNCOMMITTED = "READ UNCOMMITTED",
SERIALIZABLE = "SERIALIZABLE",
REPEATABLE_READ = "REPEATABLE READ"
}
Supported SQLITE3 BEGIN ... TRANSACTION is DEFERRED, IMMEDIATE and EXCLUSIVE (see https://www.sqlite.org/lang_transaction.html)
Here is the diff that solved my problem:
diff --git a/node_modules/loopback-connector-sqlite3/lib/transaction.js b/node_modules/loopback-connector-sqlite3/lib/transaction.js
index 580cc28..c348094 100644
--- a/node_modules/loopback-connector-sqlite3/lib/transaction.js
+++ b/node_modules/loopback-connector-sqlite3/lib/transaction.js
@@ -22,6 +24,9 @@ function mixinTransaction(SQLite3) {
cb = isolationLevel;
isolationLevel = 'DEFERRED';
}
+ if (!['DEFERRED', 'IMMEDIATE', 'EXCLUSIVE'].includes(isolationLevel)) {
+ isolationLevel = 'DEFERRED';
+ }
debug('Begin a transaction with isolation level: %s', isolationLevel);
this._getConnection(function(err, connection) {
This issue body was partially generated by patch-package.
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
lib/transaction.js から始め、トランザクション処理を SQLite の BEGIN ... TRANSACTION に関するドキュメントと比較します。Connector が DEFERRED、IMMEDIATE、EXCLUSIVE をどのように処理するか、また LoopBack の isolation-level の値に対して何が起こるかを確認します。SQLite がサポートするトランザクションオプションが、サポートされていない isolation-level 名を使用せずに正しく処理されれば、作業は完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- javascript
- 領域
- database
- issue の種類
- バグ
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 活発さ
- 停滞
- 明瞭さ
- 明確に書かれている
- 初心者へのやさしさ
- 45/100