knex/src/dialects/oracle/transaction.js

52 lines
1.2 KiB
JavaScript
Raw Normal View History

2016-03-02 17:07:05 +01:00
import Promise from 'bluebird';
import Transaction from '../../transaction';
const debugTx = require('debug')('knex:tx')
2016-03-02 17:07:05 +01:00
2016-09-12 18:45:35 -04:00
export default class Oracle_Transaction extends Transaction {
2016-03-02 17:07:05 +01:00
// disable autocommit to allow correct behavior (default is true)
begin() {
2016-03-02 17:07:05 +01:00
return Promise.resolve()
2016-09-12 18:45:35 -04:00
}
2016-03-02 17:07:05 +01:00
commit(conn, value) {
2016-03-02 17:07:05 +01:00
this._completed = true
return conn.commitAsync()
.return(value)
.then(this._resolver, this._rejecter)
2016-09-12 18:45:35 -04:00
}
2016-03-02 17:07:05 +01:00
release(conn, value) {
2016-03-02 17:07:05 +01:00
return this._resolver(value)
2016-09-12 18:45:35 -04:00
}
2016-03-02 17:07:05 +01:00
rollback(conn, err) {
2016-03-02 17:07:05 +01:00
this._completed = true
debugTx('%s: rolling back', this.txid)
return conn.rollbackAsync()
.throw(err)
.catch(this._rejecter)
2016-09-12 18:45:35 -04:00
}
2016-03-02 17:07:05 +01:00
acquireConnection(config) {
const t = this
return Promise.try(() =>
config.connection || t.client.acquireConnection().completed
).tap(connection => {
2016-03-02 17:07:05 +01:00
if (!t.outerTx) {
connection.setAutoCommit(false)
}
}).disposer(connection => {
2016-03-02 17:07:05 +01:00
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)
}
})
}
2016-09-12 18:45:35 -04:00
}