不要怂,就是干,撸起袖子干!

Commit 18cc7b01 by Sushant

docs: update transaction docs

1 parent 3fcb2d23
...@@ -8,8 +8,7 @@ ...@@ -8,8 +8,7 @@
[![Last commit](https://badgen.net/github/last-commit/sequelize/sequelize)](https://github.com/sequelize/sequelize) [![Last commit](https://badgen.net/github/last-commit/sequelize/sequelize)](https://github.com/sequelize/sequelize)
[![Merged PRs](https://badgen.net/github/merged-prs/sequelize/sequelize)](https://github.com/sequelize/sequelize) [![Merged PRs](https://badgen.net/github/merged-prs/sequelize/sequelize)](https://github.com/sequelize/sequelize)
[![GitHub stars](https://badgen.net/github/stars/sequelize/sequelize)](https://github.com/sequelize/sequelize) [![GitHub stars](https://badgen.net/github/stars/sequelize/sequelize)](https://github.com/sequelize/sequelize)
[![Bountysource](https://www.bountysource.com/badge/team?team_id=955&style=bounties_received)](https://www.bountysource.com/teams/sequelize/issues?utm_source=Sequelize&utm_medium=shield&utm_campaign=bounties_received) [![Slack Status](https://sequelize-slack.herokuapp.com/badge.svg)](http://sequelize-slack.herokuapp.com/)
[![Slack Status](http://sequelize-slack.herokuapp.com/badge.svg)](http://sequelize-slack.herokuapp.com/)
[![node](https://badgen.net/npm/node/sequelize)](https://www.npmjs.com/package/sequelize) [![node](https://badgen.net/npm/node/sequelize)](https://www.npmjs.com/package/sequelize)
[![License](https://badgen.net/github/license/sequelize/sequelize)](https://github.com/sequelize/sequelize/blob/master/LICENSE) [![License](https://badgen.net/github/license/sequelize/sequelize)](https://github.com/sequelize/sequelize/blob/master/LICENSE)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)
...@@ -20,10 +19,6 @@ Sequelize follows [SEMVER](http://semver.org). Supports Node v6 and above to use ...@@ -20,10 +19,6 @@ Sequelize follows [SEMVER](http://semver.org). Supports Node v6 and above to use
New to Sequelize? Take a look at the [Tutorials and Guides](https://sequelize.org/master). You might also be interested in the [API Reference](https://sequelize.org/master/identifiers). New to Sequelize? Take a look at the [Tutorials and Guides](https://sequelize.org/master). You might also be interested in the [API Reference](https://sequelize.org/master/identifiers).
## v5 Release
You can find the upgrade guide and changelog [here](https://sequelize.org/master/manual/upgrade-to-v5.html).
## Table of Contents ## Table of Contents
- [Installation](#installation) - [Installation](#installation)
- [Documentation](#documentation) - [Documentation](#documentation)
...@@ -53,17 +48,16 @@ $ npm install --save tedious # Microsoft SQL Server ...@@ -53,17 +48,16 @@ $ npm install --save tedious # Microsoft SQL Server
If you have security issues to report please refer to our [Responsible Disclosure Policy](./SECURITY.md) for more details. If you have security issues to report please refer to our [Responsible Disclosure Policy](./SECURITY.md) for more details.
## Resources ## Resources
- [Changelog](https://github.com/sequelize/sequelize/releases) - [Changelog](https://github.com/sequelize/sequelize/releases)
- [Slack](http://sequelize-slack.herokuapp.com/) - [Slack](http://sequelize-slack.herokuapp.com/)
- [Stack Overflow](https://stackoverflow.com/questions/tagged/sequelize.js) - [Stack Overflow](https://stackoverflow.com/questions/tagged/sequelize.js)
### Tools ### Tools
- [Sequelize CLI](https://github.com/sequelize/cli)
- [Sequelize & TypeScript](https://sequelize.org/master/manual/typescript.html) - [Sequelize & TypeScript](https://sequelize.org/master/manual/typescript.html)
- [Enhanced TypeScript with decorators](https://github.com/RobinBuschmann/sequelize-typescript) - [Enhanced TypeScript with decorators](https://github.com/RobinBuschmann/sequelize-typescript)
- [Sequelize & GraphQL](https://github.com/mickhansen/graphql-sequelize) - [Sequelize & GraphQL](https://github.com/mickhansen/graphql-sequelize)
- [Add-ons & Plugins](https://sequelize.org/master/manual/resources.html) - [Add-ons & Plugins](https://sequelize.org/master/manual/resources.html)
- [Sequelize CLI](https://github.com/sequelize/cli)
- [Sequelize & CockroachDB](https://github.com/cockroachdb/sequelize-cockroachdb) - [Sequelize & CockroachDB](https://github.com/cockroachdb/sequelize-cockroachdb)
### Learning ### Learning
...@@ -71,5 +65,5 @@ If you have security issues to report please refer to our [Responsible Disclosur ...@@ -71,5 +65,5 @@ If you have security issues to report please refer to our [Responsible Disclosur
- [Express Example](https://github.com/sequelize/express-example) - [Express Example](https://github.com/sequelize/express-example)
### Translations ### Translations
- [English v5](https://sequelize.org/master) (OFFICIAL) - [English v3/v4/v5](https://sequelize.org) (OFFICIAL)
- [中文文档 v4/v5](https://github.com/demopark/sequelize-docs-Zh-CN) (UNOFFICIAL) - [中文文档 v4/v5](https://github.com/demopark/sequelize-docs-Zh-CN) (UNOFFICIAL)
...@@ -2,14 +2,14 @@ ...@@ -2,14 +2,14 @@
Sequelize supports two ways of using transactions: Sequelize supports two ways of using transactions:
* One which will automatically commit or rollback the transaction based on the result of a promise chain and, (if enabled) pass the transaction to all calls within the callback 1. **Managed**, One which will automatically commit or rollback the transaction based on the result of a promise chain and, (if CLS enabled) pass the transaction to all calls within the callback
* And one which leaves committing, rolling back and passing the transaction to the user. 2. **Unmanaged**, One which leaves committing, rolling back and passing the transaction to the user
The key difference is that the managed transaction uses a callback that expects a promise to be returned to it while the unmanaged transaction returns a promise. The key difference is that the managed transaction uses a callback that expects a promise to be returned to it while the unmanaged transaction returns a promise.
## Managed transaction (auto-callback) ## Managed transaction (auto-callback)
Managed transactions handle committing or rolling back the transaction automagically. You start a managed transaction by passing a callback to `sequelize.transaction`. Managed transactions handle committing or rolling back the transaction automatically. You start a managed transaction by passing a callback to `sequelize.transaction`.
Notice how the callback passed to `transaction` returns a promise chain, and does not explicitly call `t.commit()` nor `t.rollback()`. If all promises in the returned chain are resolved successfully the transaction is committed. If one or several of the promises are rejected, the transaction is rolled back. Notice how the callback passed to `transaction` returns a promise chain, and does not explicitly call `t.commit()` nor `t.rollback()`. If all promises in the returned chain are resolved successfully the transaction is committed. If one or several of the promises are rejected, the transaction is rolled back.
...@@ -57,8 +57,8 @@ return sequelize.transaction(t => { ...@@ -57,8 +57,8 @@ return sequelize.transaction(t => {
In the examples above, the transaction is still manually passed, by passing `{ transaction: t }` as the second argument. To automatically pass the transaction to all queries you must install the [continuation local storage](https://github.com/othiym23/node-continuation-local-storage) (CLS) module and instantiate a namespace in your own code: In the examples above, the transaction is still manually passed, by passing `{ transaction: t }` as the second argument. To automatically pass the transaction to all queries you must install the [continuation local storage](https://github.com/othiym23/node-continuation-local-storage) (CLS) module and instantiate a namespace in your own code:
```js ```js
const cls = require('continuation-local-storage'), const cls = require('continuation-local-storage');
namespace = cls.createNamespace('my-very-own-namespace'); const namespace = cls.createNamespace('my-very-own-namespace');
``` ```
To enable CLS you must tell sequelize which namespace to use by using a static method of the sequelize constructor: To enable CLS you must tell sequelize which namespace to use by using a static method of the sequelize constructor:
...@@ -142,6 +142,21 @@ return sequelize.transaction({ ...@@ -142,6 +142,21 @@ return sequelize.transaction({
}); });
``` ```
The `isolationLevel` can either be set globally when initializing the Sequelize instance or
locally for every transaction:
```js
// globally
new Sequelize('db', 'user', 'pw', {
isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.SERIALIZABLE
});
// locally
sequelize.transaction({
isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.SERIALIZABLE
});
```
**Note:** _The SET ISOLATION LEVEL queries are not logged in case of MSSQL as the specified isolationLevel is passed directly to tedious_ **Note:** _The SET ISOLATION LEVEL queries are not logged in case of MSSQL as the specified isolationLevel is passed directly to tedious_
## Unmanaged transaction (then-callback) ## Unmanaged transaction (then-callback)
...@@ -166,56 +181,6 @@ return sequelize.transaction().then(t => { ...@@ -166,56 +181,6 @@ return sequelize.transaction().then(t => {
}); });
``` ```
## Options
The `transaction` method can be called with an options object as the first argument, that
allows the configuration of the transaction.
```js
return sequelize.transaction({ /* options */ });
```
The following options (with their default values) are available:
```js
{
isolationLevel: 'REPEATABLE_READ',
deferrable: 'NOT DEFERRABLE' // implicit default of postgres
}
```
The `isolationLevel` can either be set globally when initializing the Sequelize instance or
locally for every transaction:
```js
// globally
new Sequelize('db', 'user', 'pw', {
isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.SERIALIZABLE
});
// locally
sequelize.transaction({
isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.SERIALIZABLE
});
```
The `deferrable` option triggers an additional query after the transaction start
that optionally set the constraint checks to be deferred or immediate. Please note
that this is only supported in PostgreSQL.
```js
sequelize.transaction({
// to defer all constraints:
deferrable: Sequelize.Deferrable.SET_DEFERRED,
// to defer a specific constraint:
deferrable: Sequelize.Deferrable.SET_DEFERRED(['some_constraint']),
// to not defer constraints:
deferrable: Sequelize.Deferrable.SET_IMMEDIATE
})
```
## Usage with other sequelize methods ## Usage with other sequelize methods
The `transaction` option goes with most other options, which are usually the first argument of a method. The `transaction` option goes with most other options, which are usually the first argument of a method.
......
...@@ -1082,6 +1082,7 @@ class Sequelize { ...@@ -1082,6 +1082,7 @@ class Sequelize {
* @param {Object} [options] Transaction options * @param {Object} [options] Transaction options
* @param {string} [options.type='DEFERRED'] See `Sequelize.Transaction.TYPES` for possible options. Sqlite only. * @param {string} [options.type='DEFERRED'] See `Sequelize.Transaction.TYPES` for possible options. Sqlite only.
* @param {string} [options.isolationLevel] See `Sequelize.Transaction.ISOLATION_LEVELS` for possible options * @param {string} [options.isolationLevel] See `Sequelize.Transaction.ISOLATION_LEVELS` for possible options
* @param {string} [options.deferrable] Sets the constraints to be deferred or immediately checked. See `Sequelize.Deferrable`. PostgreSQL Only
* @param {Function} [options.logging=false] A function that gets executed while running the query to log the sql. * @param {Function} [options.logging=false] A function that gets executed while running the query to log the sql.
* @param {Function} [autoCallback] The callback is called with the transaction object, and should return a promise. If the promise is resolved, the transaction commits; if the promise rejects, the transaction rolls back * @param {Function} [autoCallback] The callback is called with the transaction object, and should return a promise. If the promise is resolved, the transaction commits; if the promise rejects, the transaction rolls back
* *
...@@ -1318,7 +1319,7 @@ Sequelize.prototype.Sequelize = Sequelize; ...@@ -1318,7 +1319,7 @@ Sequelize.prototype.Sequelize = Sequelize;
*/ */
Sequelize.prototype.QueryTypes = Sequelize.QueryTypes = QueryTypes; Sequelize.prototype.QueryTypes = Sequelize.QueryTypes = QueryTypes;
/**.Deferrable /**
* Exposes the validator.js object, so you can extend it with custom validation functions. The validator is exposed both on the instance, and on the constructor. * Exposes the validator.js object, so you can extend it with custom validation functions. The validator is exposed both on the instance, and on the constructor.
* @see https://github.com/chriso/validator.js * @see https://github.com/chriso/validator.js
*/ */
......
...@@ -16,9 +16,9 @@ class Transaction { ...@@ -16,9 +16,9 @@ class Transaction {
* *
* @param {Sequelize} sequelize A configured sequelize Instance * @param {Sequelize} sequelize A configured sequelize Instance
* @param {Object} options An object with options * @param {Object} options An object with options
* @param {string} options.type=true Sets the type of the transaction. * @param {string} [options.type] Sets the type of the transaction. Sqlite only
* @param {string} options.isolationLevel=true Sets the isolation level of the transaction. * @param {string} [options.isolationLevel] Sets the isolation level of the transaction.
* @param {string} options.deferrable Sets the constraints to be deferred or immediately checked. * @param {string} [options.deferrable] Sets the constraints to be deferred or immediately checked. PostgreSQL only
*/ */
constructor(sequelize, options) { constructor(sequelize, options) {
this.sequelize = sequelize; this.sequelize = sequelize;
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!