knex/lib/dialects/mysql/transaction.js

47 lines
1.2 KiB
JavaScript
Raw Permalink Normal View History

const Transaction = require('../../execution/transaction');
const Debug = require('debug');
2016-03-02 17:07:05 +01:00
const debug = Debug('knex:tx');
2021-01-31 13:40:13 +03:00
class Transaction_MySQL extends Transaction {
query(conn, sql, status, value) {
const t = this;
const q = this.trxClient
.query(conn, sql)
.catch((err) => {
if (err.errno === 1305) {
this.trxClient.logger.warn(
'Transaction was implicitly committed, do not mix transactions and ' +
'DDL with MySQL (#805)'
);
return;
}
status = 2;
value = err;
t._completed = true;
debug('%s error running transaction query', t.txid);
2016-03-02 17:07:05 +01:00
})
2020-04-19 00:40:23 +02:00
.then(function (res) {
if (status === 1) t._resolver(value);
if (status === 2) {
if (value === undefined) {
if (t.doNotRejectOnRollback && /^ROLLBACK\b/i.test(sql)) {
t._resolver();
return;
}
value = new Error(`Transaction rejected with non-error: ${value}`);
}
t._rejecter(value);
}
return res;
});
2016-03-02 17:07:05 +01:00
if (status === 1 || status === 2) {
t._completed = true;
2016-03-02 17:07:05 +01:00
}
return q;
2021-01-31 13:40:13 +03:00
}
}
2016-03-02 17:07:05 +01:00
module.exports = Transaction_MySQL;