Update Fix

This commit is contained in:
2026-03-15 12:30:40 +01:00
parent 311ba5e7f3
commit 50be8e25f3
176 changed files with 4075 additions and 3013 deletions

55
node_modules/mysql2/lib/base/pool.js generated vendored
View File

@@ -1,11 +1,27 @@
'use strict';
const process = require('process');
const SqlString = require('sqlstring');
const SqlString = require('sql-escaper');
const EventEmitter = require('events').EventEmitter;
const PoolConnection = require('../pool_connection.js');
const Queue = require('denque');
const BaseConnection = require('./connection.js');
const Errors = require('../constants/errors.js');
// Source: https://github.com/go-sql-driver/mysql/blob/76c00e35a8d48f8f70f0e7dffe584692bd3fa612/packets.go#L598-L613
function isReadOnlyError(err) {
if (!err || !err.errno) {
return false;
}
// 1792: ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION
// 1290: ER_OPTION_PREVENTS_STATEMENT (returned by Aurora during failover)
// 1836: ER_READ_ONLY_MODE
return (
err.errno === Errors.ER_OPTION_PREVENTS_STATEMENT ||
err.errno === Errors.ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION ||
err.errno === Errors.ER_READ_ONLY_MODE
);
}
function spliceConnection(queue, connection) {
const len = queue.length;
@@ -92,6 +108,12 @@ class BasePool extends EventEmitter {
}
}
[Symbol.dispose]() {
if (!this._closed) {
this.end();
}
}
end(cb) {
this._closed = true;
clearTimeout(this._removeIdleTimeoutConnectionsTimer);
@@ -146,8 +168,24 @@ class BasePool extends EventEmitter {
return;
}
try {
let queryError = null;
const origOnResult = cmdQuery.onResult;
if (origOnResult) {
cmdQuery.onResult = function (err, rows, fields) {
queryError = err || null;
origOnResult(err, rows, fields);
};
} else {
cmdQuery.once('error', (err) => {
queryError = err;
});
}
conn.query(cmdQuery).once('end', () => {
conn.release();
if (isReadOnlyError(queryError)) {
conn.destroy();
} else {
conn.release();
}
});
} catch (e) {
conn.release();
@@ -169,9 +207,16 @@ class BasePool extends EventEmitter {
return cb(err);
}
try {
conn.execute(sql, values, cb).once('end', () => {
conn.release();
});
conn
.execute(sql, values, (err, rows, fields) => {
if (isReadOnlyError(err)) {
conn.destroy();
}
cb(err, rows, fields);
})
.once('end', () => {
conn.release();
});
} catch (e) {
conn.release();
return cb(e);