UNPKG

waterline-postgresql

Version:
61 lines (50 loc) 1.6 kB
var inherits = require('inherits') var Promise = require('../../promise') var Transaction = require('../../transaction') var assign = require('lodash/object/assign'); var debugTx = require('debug')('knex:tx') function Oracle_Transaction(client, container, config, outerTx) { Transaction.call(this, client, container, config, outerTx) } inherits(Oracle_Transaction, Transaction) assign(Oracle_Transaction.prototype, { // disable autocommit to allow correct behavior (default is true) begin: function() { return Promise.resolve() }, commit: function(conn, value) { this._completed = true return conn.commitAsync() .return(value) .then(this._resolver, this._rejecter) }, release: function(conn, value) { return this._resolver(value) }, rollback: function(conn, err) { this._completed = true debugTx('%s: rolling back', this.txid) return conn.rollbackAsync() .throw(err) .catch(this._rejecter) }, acquireConnection: function(config) { var t = this return Promise.try(function() { return config.connection || t.client.acquireConnection() }).tap(function(connection) { if (!t.outerTx) { connection.setAutoCommit(false) } }).disposer(function(connection) { debugTx('%s: releasing connection', t.txid) connection.setAutoCommit(true) if (!config.connection) { t.client.releaseConnection(connection) } else { debugTx('%s: not releasing external connection', t.txid) } }) } }) module.exports = Oracle_Transaction