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

Commit f290fb5c by Sushant Committed by GitHub

fix(connection-manager): mssql datatype parsing (#9470)

1 parent b5c76a0c
......@@ -6,7 +6,6 @@ language: node_js
branches:
only:
- master
- v5
- /^greenkeeper/.*$/
except:
- /^v\d+\.\d+\.\d+$/
......
......@@ -8,12 +8,9 @@ services:
shallow_clone: true
cache:
- node_modules
environment:
matrix:
- {NODE_VERSION: 6, DIALECT: mssql, COVERAGE: true}
- { NODE_VERSION: 6, DIALECT: mssql, COVERAGE: true }
install:
- ps: Install-Product node $env:NODE_VERSION x64
......@@ -43,4 +40,4 @@ after_test:
branches:
only:
- master
- v5
- /^greenkeeper/.*$/
......@@ -7,8 +7,8 @@ const Utils = require('../../utils');
const debug = Utils.getLogger().debugContext('connection:mssql');
const debugTedious = Utils.getLogger().debugContext('connection:mssql:tedious');
const sequelizeErrors = require('../../errors');
const DataTypes = require('../../data-types').mssql;
const parserStore = require('../parserStore')('mssql');
const _ = require('lodash');
class ConnectionManager extends AbstractConnectionManager {
constructor(dialect, sequelize) {
......@@ -28,9 +28,10 @@ class ConnectionManager extends AbstractConnectionManager {
}
throw err;
}
this.refreshTypeParser(DataTypes);
}
// Expose this as a method so that the parsing may be updated when the user has added additional, custom types
_refreshTypeParser(dataType) {
parserStore.refresh(dataType);
}
......@@ -88,15 +89,15 @@ class ConnectionManager extends AbstractConnectionManager {
switch (err.code) {
case 'ESOCKET':
if (_.includes(err.message, 'connect EHOSTUNREACH')) {
if (err.message.includes('connect EHOSTUNREACH')) {
reject(new sequelizeErrors.HostNotReachableError(err));
} else if (_.includes(err.message, 'connect ENETUNREACH')) {
} else if (err.message.includes('connect ENETUNREACH')) {
reject(new sequelizeErrors.HostNotReachableError(err));
} else if (_.includes(err.message, 'connect EADDRNOTAVAIL')) {
} else if (err.message.includes('connect EADDRNOTAVAIL')) {
reject(new sequelizeErrors.HostNotReachableError(err));
} else if (_.includes(err.message, 'getaddrinfo ENOTFOUND')) {
} else if (err.message.includes('getaddrinfo ENOTFOUND')) {
reject(new sequelizeErrors.HostNotFoundError(err));
} else if (_.includes(err.message, 'connect ECONNREFUSED')) {
} else if (err.message.includes('connect ECONNREFUSED')) {
reject(new sequelizeErrors.ConnectionRefusedError(err));
} else {
reject(new sequelizeErrors.ConnectionError(err));
......
'use strict';
const _ = require('lodash');
const AbstractConnectionManager = require('../abstract/connection-manager');
const SequelizeErrors = require('../../errors');
const Utils = require('../../utils');
const DataTypes = require('../../data-types').mysql;
const momentTz = require('moment-timezone');
const debug = Utils.getLogger().debugContext('connection:mysql');
const parserMap = new Map();
const parserStore = require('../parserStore')('mysql');
/**
* MySQL Connection Managger
* MySQL Connection Manager
*
* Get connections, validate and disconnect them.
* AbstractConnectionManager pooling use it to handle MySQL specific connections
......@@ -43,20 +42,17 @@ class ConnectionManager extends AbstractConnectionManager {
this.refreshTypeParser(DataTypes);
}
// Update parsing when the user has added additional, custom types
_refreshTypeParser(dataType) {
for (const type of dataType.types.mysql) {
parserMap.set(type, dataType.parse);
}
parserStore.refresh(dataType);
}
_clearTypeParser() {
parserMap.clear();
parserStore.clear();
}
static _typecast(field, next) {
if (parserMap.has(field.type)) {
return parserMap.get(field.type)(field, this.sequelize.options, next);
if (parserStore.get(field.type)) {
return parserStore.get(field.type)(field, this.sequelize.options, next);
}
return next();
}
......@@ -180,8 +176,6 @@ class ConnectionManager extends AbstractConnectionManager {
}
}
_.extend(ConnectionManager.prototype, AbstractConnectionManager.prototype);
module.exports = ConnectionManager;
module.exports.ConnectionManager = ConnectionManager;
module.exports.default = ConnectionManager;
......@@ -252,8 +252,6 @@ class ConnectionManager extends AbstractConnectionManager {
}
}
_.extend(ConnectionManager.prototype, AbstractConnectionManager.prototype);
module.exports = ConnectionManager;
module.exports.ConnectionManager = ConnectionManager;
module.exports.default = ConnectionManager;
......@@ -94,7 +94,6 @@ class ConnectionManager extends AbstractConnectionManager {
}
}
module.exports = ConnectionManager;
module.exports.ConnectionManager = ConnectionManager;
module.exports.default = ConnectionManager;
......@@ -5,7 +5,6 @@ const expectsql = Support.expectsql;
const current = Support.sequelize;
const TableHints = require('../../../../lib/table-hints');
const QueryGenerator = require('../../../../lib/dialects/mssql/query-generator');
const _ = require('lodash');
if (current.dialect.name === 'mssql') {
describe('[MSSQL Specific] QueryGenerator', () => {
......@@ -50,7 +49,10 @@ if (current.dialect.name === 'mssql') {
});
it('selectFromTableFragment', function() {
const modifiedGen = _.cloneDeep(this.queryGenerator);
const modifiedGen = new QueryGenerator({
sequelize: this.sequelize,
_dialect: this.sequelize.dialect
});
// Test newer versions first
// Should be all the same since handling is done in addLimitAndOffset
// for SQL Server 2012 and higher (>= v11.0.0)
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!