1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- var Utils = require('./utils')
- , util = require('util')
- var Transaction = module.exports = function(sequelize, options) {
- this.sequelize = sequelize
- this.id = Utils.generateUUID()
- this.options = Utils._.extend({
- autocommit: true,
- isolationLevel: Transaction.ISOLATION_LEVELS.REPEATABLE_READ
- }, options || {})
- }
- util.inherits(Transaction, Utils.CustomEventEmitter)
- Transaction.ISOLATION_LEVELS = {
- READ_UNCOMMITTED: "READ UNCOMMITTED",
- READ_COMMITTED: "READ COMMITTED",
- REPEATABLE_READ: "REPEATABLE READ",
- SERIALIZABLE: "SERIALIZABLE"
- }
- Transaction.prototype.commit = function() {
- return this
- .sequelize
- .getQueryInterface()
- .commitTransaction(this, {})
- .proxy(this)
- .done(this.cleanup.bind(this))
- }
- Transaction.prototype.rollback = function() {
- return this
- .sequelize
- .getQueryInterface()
- .rollbackTransaction(this, {})
- .proxy(this)
- .done(this.cleanup.bind(this))
- }
- Transaction.prototype.prepareEnvironment = function(callback) {
- var self = this
- , connectorManager = self.sequelize.transactionManager.getConnectorManager(this.id)
- this.begin(function() {
- self.setIsolationLevel(function() {
- self.setAutocommit(function() {
- connectorManager.afterTransactionSetup(callback)
- })
- })
- })
- }
- Transaction.prototype.begin = function(callback) {
- this
- .sequelize
- .getQueryInterface()
- .startTransaction(this, {})
- .success(callback)
- .error(onError.bind(this))
- }
- Transaction.prototype.setAutocommit = function(callback) {
- this
- .sequelize
- .getQueryInterface()
- .setAutocommit(this, this.options.autocommit)
- .success(callback)
- .error(onError.bind(this))
- }
- Transaction.prototype.setIsolationLevel = function(callback) {
- this
- .sequelize
- .getQueryInterface()
- .setIsolationLevel(this, this.options.isolationLevel)
- .success(callback)
- .error(onError.bind(this))
- }
- Transaction.prototype.cleanup = function() {
- this.sequelize.transactionManager.releaseConnectionManager(this.id)
- }
- // private
- var onError = function(err) {
- this.emit('error', err)
- }
|