init source
This commit is contained in:
+103
@@ -0,0 +1,103 @@
|
||||
'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 Defer constraints checks to the end of transactions.
|
||||
* @property INITIALLY_IMMEDIATE Trigger the constraint checks immediately
|
||||
* @property NOT Set the constraints to not deferred. This is the default in PostgreSQL and it make it impossible to dynamically defer the constraints within a transaction.
|
||||
* @property SET_DEFERRED
|
||||
* @property SET_IMMEDIATE
|
||||
*/
|
||||
|
||||
const Deferrable = module.exports = { // eslint-disable-line
|
||||
INITIALLY_DEFERRED: classToInvokable(INITIALLY_DEFERRED),
|
||||
INITIALLY_IMMEDIATE: classToInvokable(INITIALLY_IMMEDIATE),
|
||||
NOT: classToInvokable(NOT),
|
||||
SET_DEFERRED: classToInvokable(SET_DEFERRED),
|
||||
SET_IMMEDIATE: classToInvokable(SET_IMMEDIATE)
|
||||
};
|
||||
Reference in New Issue
Block a user