loopbackio / loopbackio/loopback-connector-sqlite3

Transaction types

オープン
#50 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

feature
主要言語
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.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. 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

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。