From 51c12adb390a195068c5b4d08038f744f638ecbc Mon Sep 17 00:00:00 2001 From: koyopro Date: Mon, 10 Jun 2024 00:40:50 +0900 Subject: [PATCH] update README for Transactions --- packages/accel-record/README-ja.md | 24 +++++++++++++++++++++++- packages/accel-record/README.md | 24 +++++++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/packages/accel-record/README-ja.md b/packages/accel-record/README-ja.md index 081add09..b00be9ab 100644 --- a/packages/accel-record/README-ja.md +++ b/packages/accel-record/README-ja.md @@ -974,6 +974,29 @@ User.import(users, { }); ``` +## トランザクション + +`Model.transaction()` メソッドでトランザクションを利用できます。`Rollback` を例外として投げることでトランザクションをロールバックすることができ、トランザクションはネストすることができます。 + +```ts +import { User } from "./models/index.js"; + +User.transaction(() => { + User.create({}); + console.log(User.count()); // => 1 + + User.transaction(() => { + User.create({}); + console.log(User.count()); // => 2 + + // Rollback の throw により内側のトランザクションはロールバックされます + throw new Rollback(); + }); + // 外側のトランザクションはコミットされます +}); +console.log(User.count()); // => 1 +``` + ## Nullableな値の扱いについて Nullableな値について、TypeScriptではJavaScriptと同様にundefinedとnullの2つが存在します。 \ @@ -1001,7 +1024,6 @@ user.update({ age: undefined }); ## 今後予定されている機能追加 - [accel-record-core] スコープ -- [accel-record-core] トランザクションのネスト - [accel-record-core] PostgreSQLのサポート - [accel-record-core] 複合IDの対応 - [accel-record-core] クエリインターフェースの拡充 diff --git a/packages/accel-record/README.md b/packages/accel-record/README.md index d2cb6f33..c4a71eeb 100644 --- a/packages/accel-record/README.md +++ b/packages/accel-record/README.md @@ -973,6 +973,29 @@ User.import(users, { }); ``` +## Transactions + +You can use the `Model.transaction()` method to utilize transactions. By throwing a `Rollback` exception, you can rollback the transaction, and transactions can be nested. + +```ts +import { User } from "./models/index.js"; + +User.transaction(() => { + User.create({}); + console.log(User.count()); // => 1 + + User.transaction(() => { + User.create({}); + console.log(User.count()); // => 2 + + // The inner transaction is rolled back by throwing a Rollback + throw new Rollback(); + }); + // The outer transaction is committed +}); +console.log(User.count()); // => 1 +``` + ## Nullable Values Handling Regarding nullable values, TypeScript, like JavaScript, has two options: undefined and null. \ @@ -1000,7 +1023,6 @@ user.update({ age: undefined }); ## Future Planned Features - [accel-record-core] Scopes -- [accel-record-core] Nested Transactions - [accel-record-core] PostgreSQL Support - [accel-record-core] Support for Composite IDs - [accel-record-core] Expansion of Query Interface