Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
public
/
sequelize
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
不要怂,就是干,撸起袖子干!
Commit f290fb5c
authored
May 23, 2018
by
Sushant
Committed by
GitHub
May 23, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix(connection-manager): mssql datatype parsing (#9470)
1 parent
b5c76a0c
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
20 additions
and
30 deletions
.travis.yml
appveyor.yml
lib/dialects/mssql/connection-manager.js
lib/dialects/mysql/connection-manager.js
lib/dialects/postgres/connection-manager.js
lib/dialects/sqlite/connection-manager.js
test/unit/dialects/mssql/query-generator.test.js
.travis.yml
View file @
f290fb5
...
@@ -6,7 +6,6 @@ language: node_js
...
@@ -6,7 +6,6 @@ language: node_js
branches
:
branches
:
only
:
only
:
-
master
-
master
-
v5
-
/^greenkeeper/.*$/
-
/^greenkeeper/.*$/
except
:
except
:
-
/^v\d+\.\d+\.\d+$/
-
/^v\d+\.\d+\.\d+$/
...
...
appveyor.yml
View file @
f290fb5
...
@@ -8,12 +8,9 @@ services:
...
@@ -8,12 +8,9 @@ services:
shallow_clone
:
true
shallow_clone
:
true
cache
:
-
node_modules
environment
:
environment
:
matrix
:
matrix
:
-
{
NODE_VERSION
:
6
,
DIALECT
:
mssql
,
COVERAGE
:
true
}
-
{
NODE_VERSION
:
6
,
DIALECT
:
mssql
,
COVERAGE
:
true
}
install
:
install
:
-
ps
:
Install-Product node $env:NODE_VERSION x64
-
ps
:
Install-Product node $env:NODE_VERSION x64
...
@@ -43,4 +40,4 @@ after_test:
...
@@ -43,4 +40,4 @@ after_test:
branches
:
branches
:
only
:
only
:
-
master
-
master
-
v5
-
/^greenkeeper/.*$/
lib/dialects/mssql/connection-manager.js
View file @
f290fb5
...
@@ -7,8 +7,8 @@ const Utils = require('../../utils');
...
@@ -7,8 +7,8 @@ const Utils = require('../../utils');
const
debug
=
Utils
.
getLogger
().
debugContext
(
'connection:mssql'
);
const
debug
=
Utils
.
getLogger
().
debugContext
(
'connection:mssql'
);
const
debugTedious
=
Utils
.
getLogger
().
debugContext
(
'connection:mssql:tedious'
);
const
debugTedious
=
Utils
.
getLogger
().
debugContext
(
'connection:mssql:tedious'
);
const
sequelizeErrors
=
require
(
'../../errors'
);
const
sequelizeErrors
=
require
(
'../../errors'
);
const
DataTypes
=
require
(
'../../data-types'
).
mssql
;
const
parserStore
=
require
(
'../parserStore'
)(
'mssql'
);
const
parserStore
=
require
(
'../parserStore'
)(
'mssql'
);
const
_
=
require
(
'lodash'
);
class
ConnectionManager
extends
AbstractConnectionManager
{
class
ConnectionManager
extends
AbstractConnectionManager
{
constructor
(
dialect
,
sequelize
)
{
constructor
(
dialect
,
sequelize
)
{
...
@@ -28,9 +28,10 @@ class ConnectionManager extends AbstractConnectionManager {
...
@@ -28,9 +28,10 @@ class ConnectionManager extends AbstractConnectionManager {
}
}
throw
err
;
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
)
{
_refreshTypeParser
(
dataType
)
{
parserStore
.
refresh
(
dataType
);
parserStore
.
refresh
(
dataType
);
}
}
...
@@ -88,15 +89,15 @@ class ConnectionManager extends AbstractConnectionManager {
...
@@ -88,15 +89,15 @@ class ConnectionManager extends AbstractConnectionManager {
switch
(
err
.
code
)
{
switch
(
err
.
code
)
{
case
'ESOCKET'
:
case
'ESOCKET'
:
if
(
_
.
includes
(
err
.
message
,
'connect EHOSTUNREACH'
))
{
if
(
err
.
message
.
includes
(
'connect EHOSTUNREACH'
))
{
reject
(
new
sequelizeErrors
.
HostNotReachableError
(
err
));
reject
(
new
sequelizeErrors
.
HostNotReachableError
(
err
));
}
else
if
(
_
.
includes
(
err
.
message
,
'connect ENETUNREACH'
))
{
}
else
if
(
err
.
message
.
includes
(
'connect ENETUNREACH'
))
{
reject
(
new
sequelizeErrors
.
HostNotReachableError
(
err
));
reject
(
new
sequelizeErrors
.
HostNotReachableError
(
err
));
}
else
if
(
_
.
includes
(
err
.
message
,
'connect EADDRNOTAVAIL'
))
{
}
else
if
(
err
.
message
.
includes
(
'connect EADDRNOTAVAIL'
))
{
reject
(
new
sequelizeErrors
.
HostNotReachableError
(
err
));
reject
(
new
sequelizeErrors
.
HostNotReachableError
(
err
));
}
else
if
(
_
.
includes
(
err
.
message
,
'getaddrinfo ENOTFOUND'
))
{
}
else
if
(
err
.
message
.
includes
(
'getaddrinfo ENOTFOUND'
))
{
reject
(
new
sequelizeErrors
.
HostNotFoundError
(
err
));
reject
(
new
sequelizeErrors
.
HostNotFoundError
(
err
));
}
else
if
(
_
.
includes
(
err
.
message
,
'connect ECONNREFUSED'
))
{
}
else
if
(
err
.
message
.
includes
(
'connect ECONNREFUSED'
))
{
reject
(
new
sequelizeErrors
.
ConnectionRefusedError
(
err
));
reject
(
new
sequelizeErrors
.
ConnectionRefusedError
(
err
));
}
else
{
}
else
{
reject
(
new
sequelizeErrors
.
ConnectionError
(
err
));
reject
(
new
sequelizeErrors
.
ConnectionError
(
err
));
...
...
lib/dialects/mysql/connection-manager.js
View file @
f290fb5
'use strict'
;
'use strict'
;
const
_
=
require
(
'lodash'
);
const
AbstractConnectionManager
=
require
(
'../abstract/connection-manager'
);
const
AbstractConnectionManager
=
require
(
'../abstract/connection-manager'
);
const
SequelizeErrors
=
require
(
'../../errors'
);
const
SequelizeErrors
=
require
(
'../../errors'
);
const
Utils
=
require
(
'../../utils'
);
const
Utils
=
require
(
'../../utils'
);
const
DataTypes
=
require
(
'../../data-types'
).
mysql
;
const
DataTypes
=
require
(
'../../data-types'
).
mysql
;
const
momentTz
=
require
(
'moment-timezone'
);
const
momentTz
=
require
(
'moment-timezone'
);
const
debug
=
Utils
.
getLogger
().
debugContext
(
'connection:mysql'
);
const
debug
=
Utils
.
getLogger
().
debugContext
(
'connection:mysql'
);
const
parser
Map
=
new
Map
(
);
const
parser
Store
=
require
(
'../parserStore'
)(
'mysql'
);
/**
/**
* MySQL Connection Manag
g
er
* MySQL Connection Manager
*
*
* Get connections, validate and disconnect them.
* Get connections, validate and disconnect them.
* AbstractConnectionManager pooling use it to handle MySQL specific connections
* AbstractConnectionManager pooling use it to handle MySQL specific connections
...
@@ -43,20 +42,17 @@ class ConnectionManager extends AbstractConnectionManager {
...
@@ -43,20 +42,17 @@ class ConnectionManager extends AbstractConnectionManager {
this
.
refreshTypeParser
(
DataTypes
);
this
.
refreshTypeParser
(
DataTypes
);
}
}
// Update parsing when the user has added additional, custom types
_refreshTypeParser
(
dataType
)
{
_refreshTypeParser
(
dataType
)
{
for
(
const
type
of
dataType
.
types
.
mysql
)
{
parserStore
.
refresh
(
dataType
);
parserMap
.
set
(
type
,
dataType
.
parse
);
}
}
}
_clearTypeParser
()
{
_clearTypeParser
()
{
parser
Map
.
clear
();
parser
Store
.
clear
();
}
}
static
_typecast
(
field
,
next
)
{
static
_typecast
(
field
,
next
)
{
if
(
parser
Map
.
has
(
field
.
type
))
{
if
(
parser
Store
.
get
(
field
.
type
))
{
return
parser
Map
.
get
(
field
.
type
)(
field
,
this
.
sequelize
.
options
,
next
);
return
parser
Store
.
get
(
field
.
type
)(
field
,
this
.
sequelize
.
options
,
next
);
}
}
return
next
();
return
next
();
}
}
...
@@ -180,8 +176,6 @@ class ConnectionManager extends AbstractConnectionManager {
...
@@ -180,8 +176,6 @@ class ConnectionManager extends AbstractConnectionManager {
}
}
}
}
_
.
extend
(
ConnectionManager
.
prototype
,
AbstractConnectionManager
.
prototype
);
module
.
exports
=
ConnectionManager
;
module
.
exports
=
ConnectionManager
;
module
.
exports
.
ConnectionManager
=
ConnectionManager
;
module
.
exports
.
ConnectionManager
=
ConnectionManager
;
module
.
exports
.
default
=
ConnectionManager
;
module
.
exports
.
default
=
ConnectionManager
;
lib/dialects/postgres/connection-manager.js
View file @
f290fb5
...
@@ -252,8 +252,6 @@ class ConnectionManager extends AbstractConnectionManager {
...
@@ -252,8 +252,6 @@ class ConnectionManager extends AbstractConnectionManager {
}
}
}
}
_
.
extend
(
ConnectionManager
.
prototype
,
AbstractConnectionManager
.
prototype
);
module
.
exports
=
ConnectionManager
;
module
.
exports
=
ConnectionManager
;
module
.
exports
.
ConnectionManager
=
ConnectionManager
;
module
.
exports
.
ConnectionManager
=
ConnectionManager
;
module
.
exports
.
default
=
ConnectionManager
;
module
.
exports
.
default
=
ConnectionManager
;
lib/dialects/sqlite/connection-manager.js
View file @
f290fb5
...
@@ -94,7 +94,6 @@ class ConnectionManager extends AbstractConnectionManager {
...
@@ -94,7 +94,6 @@ class ConnectionManager extends AbstractConnectionManager {
}
}
}
}
module
.
exports
=
ConnectionManager
;
module
.
exports
=
ConnectionManager
;
module
.
exports
.
ConnectionManager
=
ConnectionManager
;
module
.
exports
.
ConnectionManager
=
ConnectionManager
;
module
.
exports
.
default
=
ConnectionManager
;
module
.
exports
.
default
=
ConnectionManager
;
test/unit/dialects/mssql/query-generator.test.js
View file @
f290fb5
...
@@ -5,7 +5,6 @@ const expectsql = Support.expectsql;
...
@@ -5,7 +5,6 @@ const expectsql = Support.expectsql;
const
current
=
Support
.
sequelize
;
const
current
=
Support
.
sequelize
;
const
TableHints
=
require
(
'../../../../lib/table-hints'
);
const
TableHints
=
require
(
'../../../../lib/table-hints'
);
const
QueryGenerator
=
require
(
'../../../../lib/dialects/mssql/query-generator'
);
const
QueryGenerator
=
require
(
'../../../../lib/dialects/mssql/query-generator'
);
const
_
=
require
(
'lodash'
);
if
(
current
.
dialect
.
name
===
'mssql'
)
{
if
(
current
.
dialect
.
name
===
'mssql'
)
{
describe
(
'[MSSQL Specific] QueryGenerator'
,
()
=>
{
describe
(
'[MSSQL Specific] QueryGenerator'
,
()
=>
{
...
@@ -50,7 +49,10 @@ if (current.dialect.name === 'mssql') {
...
@@ -50,7 +49,10 @@ if (current.dialect.name === 'mssql') {
});
});
it
(
'selectFromTableFragment'
,
function
()
{
it
(
'selectFromTableFragment'
,
function
()
{
const
modifiedGen
=
_
.
cloneDeep
(
this
.
queryGenerator
);
const
modifiedGen
=
new
QueryGenerator
({
sequelize
:
this
.
sequelize
,
_dialect
:
this
.
sequelize
.
dialect
});
// Test newer versions first
// Test newer versions first
// Should be all the same since handling is done in addLimitAndOffset
// Should be all the same since handling is done in addLimitAndOffset
// for SQL Server 2012 and higher (>= v11.0.0)
// for SQL Server 2012 and higher (>= v11.0.0)
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment