不要怂,就是干,撸起袖子干!

Commit 39a1f11f by Andy Edwards Committed by GitHub

refactor(dialects/mariadb): asyncify methods (#12131)

1 parent 1432cfd1
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
const AbstractConnectionManager = require('../abstract/connection-manager'); const AbstractConnectionManager = require('../abstract/connection-manager');
const SequelizeErrors = require('../../errors'); const SequelizeErrors = require('../../errors');
const Promise = require('../../promise');
const { logger } = require('../../utils/logger'); const { logger } = require('../../utils/logger');
const DataTypes = require('../../data-types').mariadb; const DataTypes = require('../../data-types').mariadb;
const momentTz = require('moment-timezone'); const momentTz = require('moment-timezone');
...@@ -53,7 +52,7 @@ class ConnectionManager extends AbstractConnectionManager { ...@@ -53,7 +52,7 @@ class ConnectionManager extends AbstractConnectionManager {
* @returns {Promise<Connection>} * @returns {Promise<Connection>}
* @private * @private
*/ */
connect(config) { async connect(config) {
// Named timezone is not supported in mariadb, convert to offset // Named timezone is not supported in mariadb, convert to offset
let tzOffset = this.sequelize.options.timezone; let tzOffset = this.sequelize.options.timezone;
tzOffset = /\//.test(tzOffset) ? momentTz.tz(tzOffset).format('Z') tzOffset = /\//.test(tzOffset) ? momentTz.tz(tzOffset).format('Z')
...@@ -89,8 +88,8 @@ class ConnectionManager extends AbstractConnectionManager { ...@@ -89,8 +88,8 @@ class ConnectionManager extends AbstractConnectionManager {
} }
} }
return this.lib.createConnection(connectionConfig) try {
.then(connection => { const connection = await this.lib.createConnection(connectionConfig);
this.sequelize.options.databaseVersion = connection.serverVersion(); this.sequelize.options.databaseVersion = connection.serverVersion();
debug('connection acquired'); debug('connection acquired');
connection.on('error', error => { connection.on('error', error => {
...@@ -103,8 +102,7 @@ class ConnectionManager extends AbstractConnectionManager { ...@@ -103,8 +102,7 @@ class ConnectionManager extends AbstractConnectionManager {
} }
}); });
return connection; return connection;
}) } catch (err) {
.catch(err => {
switch (err.code) { switch (err.code) {
case 'ECONNREFUSED': case 'ECONNREFUSED':
throw new SequelizeErrors.ConnectionRefusedError(err); throw new SequelizeErrors.ConnectionRefusedError(err);
...@@ -122,17 +120,16 @@ class ConnectionManager extends AbstractConnectionManager { ...@@ -122,17 +120,16 @@ class ConnectionManager extends AbstractConnectionManager {
default: default:
throw new SequelizeErrors.ConnectionError(err); throw new SequelizeErrors.ConnectionError(err);
} }
}); }
} }
disconnect(connection) { async disconnect(connection) {
// Don't disconnect connections with CLOSED state // Don't disconnect connections with CLOSED state
if (!connection.isValid()) { if (!connection.isValid()) {
debug('connection tried to disconnect but was already at CLOSED state'); debug('connection tried to disconnect but was already at CLOSED state');
return Promise.resolve(); return;
} }
//wrap native Promise into bluebird return await connection.end();
return Promise.resolve(connection.end());
} }
validate(connection) { validate(connection) {
......
...@@ -4,7 +4,6 @@ const AbstractQuery = require('../abstract/query'); ...@@ -4,7 +4,6 @@ const AbstractQuery = require('../abstract/query');
const sequelizeErrors = require('../../errors'); const sequelizeErrors = require('../../errors');
const _ = require('lodash'); const _ = require('lodash');
const DataTypes = require('../../data-types'); const DataTypes = require('../../data-types');
const Promise = require('../../promise');
const { logger } = require('../../utils/logger'); const { logger } = require('../../utils/logger');
const ER_DUP_ENTRY = 1062; const ER_DUP_ENTRY = 1062;
...@@ -32,7 +31,7 @@ class Query extends AbstractQuery { ...@@ -32,7 +31,7 @@ class Query extends AbstractQuery {
return [sql, bindParam.length > 0 ? bindParam : undefined]; return [sql, bindParam.length > 0 ? bindParam : undefined];
} }
run(sql, parameters) { async run(sql, parameters) {
this.sql = sql; this.sql = sql;
const { connection, options } = this; const { connection, options } = this;
...@@ -44,18 +43,17 @@ class Query extends AbstractQuery { ...@@ -44,18 +43,17 @@ class Query extends AbstractQuery {
if (parameters) { if (parameters) {
debug('parameters(%j)', parameters); debug('parameters(%j)', parameters);
} }
return Promise.resolve( let results;
connection.query(this.sql, parameters)
.then(results => { try {
results = await connection.query(this.sql, parameters);
complete(); complete();
// Log warnings if we've got them. // Log warnings if we've got them.
if (showWarnings && results && results.warningStatus > 0) { if (showWarnings && results && results.warningStatus > 0) {
return this.logWarnings(results); await this.logWarnings(results);
} }
return results; } catch (err) {
})
.catch(err => {
// MariaDB automatically rolls-back transactions in the event of a deadlock // MariaDB automatically rolls-back transactions in the event of a deadlock
if (options.transaction && err.errno === 1213) { if (options.transaction && err.errno === 1213) {
options.transaction.finished = 'rollback'; options.transaction.finished = 'rollback';
...@@ -66,17 +64,12 @@ class Query extends AbstractQuery { ...@@ -66,17 +64,12 @@ class Query extends AbstractQuery {
err.sql = sql; err.sql = sql;
err.parameters = parameters; err.parameters = parameters;
throw this.formatError(err); throw this.formatError(err);
}) }
)
// Log warnings if we've got them.
.then(results => {
if (showWarnings && results && results.warningStatus > 0) { if (showWarnings && results && results.warningStatus > 0) {
return this.logWarnings(results); await this.logWarnings(results);
} }
return results; return this.formatResults(results);
})
// Return formatted results...
.then(results => this.formatResults(results));
} }
/** /**
...@@ -196,8 +189,8 @@ class Query extends AbstractQuery { ...@@ -196,8 +189,8 @@ class Query extends AbstractQuery {
} }
} }
logWarnings(results) { async logWarnings(results) {
return this.run('SHOW WARNINGS').then(warningResults => { const warningResults = await this.run('SHOW WARNINGS');
const warningMessage = `MariaDB Warnings (${this.connection.uuid const warningMessage = `MariaDB Warnings (${this.connection.uuid
|| 'default'}): `; || 'default'}): `;
const messages = []; const messages = [];
...@@ -221,7 +214,6 @@ class Query extends AbstractQuery { ...@@ -221,7 +214,6 @@ class Query extends AbstractQuery {
this.sequelize.log(warningMessage + messages.join('; '), this.options); this.sequelize.log(warningMessage + messages.join('; '), this.options);
return results; return results;
});
} }
formatError(err) { formatError(err) {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!