123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- 'use strict';
- const { classToInvokable } = require('./utils');
- class ABSTRACT {
- static toString(...args) {
- return new this().toString(...args);
- }
- toString(...args) {
- return this.toSql(...args);
- }
- toSql() {
- throw new Error('toSql implementation missing');
- }
- }
- class INITIALLY_DEFERRED extends ABSTRACT {
- toSql() {
- return 'DEFERRABLE INITIALLY DEFERRED';
- }
- }
- class INITIALLY_IMMEDIATE extends ABSTRACT {
- toSql() {
- return 'DEFERRABLE INITIALLY IMMEDIATE';
- }
- }
- class NOT extends ABSTRACT {
- toSql() {
- return 'NOT DEFERRABLE';
- }
- }
- class SET_DEFERRED extends ABSTRACT {
- constructor(constraints) {
- super();
- this.constraints = constraints;
- }
- toSql(queryGenerator) {
- return queryGenerator.setDeferredQuery(this.constraints);
- }
- }
- class SET_IMMEDIATE extends ABSTRACT {
- constructor(constraints) {
- super();
- this.constraints = constraints;
- }
- toSql(queryGenerator) {
- return queryGenerator.setImmediateQuery(this.constraints);
- }
- }
- /**
- * A collection of properties related to deferrable constraints. It can be used to
- * make foreign key constraints deferrable and to set the constraints within a
- * transaction. This is only supported in PostgreSQL.
- *
- * The foreign keys can be configured like this. It will create a foreign key
- * that will check the constraints immediately when the data was inserted.
- *
- * ```js
- * sequelize.define('Model', {
- * foreign_id: {
- * type: Sequelize.INTEGER,
- * references: {
- * model: OtherModel,
- * key: 'id',
- * deferrable: Sequelize.Deferrable.INITIALLY_IMMEDIATE
- * }
- * }
- * });
- * ```
- *
- * The constraints can be configured in a transaction like this. It will
- * trigger a query once the transaction has been started and set the constraints
- * to be checked at the very end of the transaction.
- *
- * ```js
- * sequelize.transaction({
- * deferrable: Sequelize.Deferrable.SET_DEFERRED
- * });
- * ```
- *
- * @property INITIALLY_DEFERRED Use when declaring a constraint. Allow and enable by default this constraint's checks to be deferred at the end of transactions.
- * @property INITIALLY_IMMEDIATE Use when declaring a constraint. Allow the constraint's checks to be deferred at the end of transactions.
- * @property NOT Use when declaring a constraint. Set the constraint to not deferred. This is the default in PostgreSQL and makes it impossible to dynamically defer the constraints within a transaction.
- * @property SET_DEFERRED Use when declaring a transaction. Defer the deferrable checks involved in this transaction at commit.
- * @property SET_IMMEDIATE Use when declaring a transaction. Execute the deferrable checks involved in this transaction immediately.
- */
- const Deferrable = {
- INITIALLY_DEFERRED: classToInvokable(INITIALLY_DEFERRED),
- INITIALLY_IMMEDIATE: classToInvokable(INITIALLY_IMMEDIATE),
- NOT: classToInvokable(NOT),
- SET_DEFERRED: classToInvokable(SET_DEFERRED),
- SET_IMMEDIATE: classToInvokable(SET_IMMEDIATE)
- };
- module.exports = Deferrable;
|