@itrocks/mysql-maintainer
Version:
Reactively maintains database structure by updating schema and retrying on MySQL errors
30 lines • 1.04 kB
JavaScript
import { SqlError } from 'mariadb';
import { MysqlMaintainer } from './mysql-maintainer';
export class Contextual {
context = [];
superQuery = () => new Promise(() => { });
async applyTo(connection) {
connection.context = [];
connection.superQuery = connection.query;
connection.query = Contextual.prototype.query;
return connection;
}
async query(sql, values) {
try {
return await this.superQuery(sql, values);
}
catch (error) {
if (!(error instanceof SqlError)
|| !error.code
|| !['ER_BAD_FIELD_ERROR'].includes(error.code)) {
throw error;
}
// @ts-ignore query applies to a Connection
if (await new MysqlMaintainer(this).manageError(error, this.context[this.context.length - 1], sql, values)) {
return this.query(sql, values);
}
throw error;
}
}
}
//# sourceMappingURL=contextual-connection.js.map