knex/src/dialects/mysql/transaction.js

49 lines
1.2 KiB
JavaScript
Raw Normal View History

2016-03-02 17:07:05 +01:00
import Transaction from '../../transaction';
import inherits from 'inherits';
import Debug from 'debug';
import { assign, isUndefined } from 'lodash'
2016-03-02 17:07:05 +01:00
const debug = Debug('knex:tx');
2016-03-02 17:07:05 +01:00
function Transaction_MySQL() {
Transaction.apply(this, arguments)
}
inherits(Transaction_MySQL, Transaction)
assign(Transaction_MySQL.prototype, {
query(conn, sql, status, value) {
const t = this
const q = this.trxClient.query(conn, sql)
.catch(err => err.errno === 1305, () => {
this.trxClient.logger.warn(
'Transaction was implicitly committed, do not mix transactions and ' +
'DDL with MySQL (#805)'
)
2016-03-02 17:07:05 +01:00
})
.catch(function(err) {
status = 2
value = err
2016-03-02 17:07:05 +01:00
t._completed = true
debug('%s error running transaction query', t.txid)
})
.tap(function() {
if (status === 1) t._resolver(value)
if (status === 2) {
if(isUndefined(value)) {
value = new Error(`Transaction rejected with non-error: ${value}`)
}
t._rejecter(value)
}
2016-03-02 17:07:05 +01:00
})
if (status === 1 || status === 2) {
t._completed = true
}
return q;
}
})
export default Transaction_MySQL