loopbackio / loopbackio/loopback-connector-sqlite3
Transaction types
Personne n'a encore pris cette issue.
- Langage dominant
- JavaScript
- Étoiles
- 13
- Forks
- 21
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
Hi! 👋
Firstly, thanks for your work on this project! 🙂
Today I used [patch-package](https://github.com/ds300/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
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](https://github.com/ds300/patch-package/issues/296).
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par lib/transaction.js et comparez sa gestion des transactions avec la documentation de SQLite concernant BEGIN ... TRANSACTION. Vérifiez comment le connecteur gère DEFERRED, IMMEDIATE et EXCLUSIVE, ainsi que ce qui se passe pour les valeurs de niveau d’isolation de LoopBack. Le travail est terminé lorsque les options de transaction prises en charge par SQLite sont gérées correctement sans utiliser de noms de niveau d’isolation non pris en charge.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript
- Domaine
- database
- Type d'issue
- Bug
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 45/100