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 8d161a59
authored
Jun 12, 2014
by
Mick Hansen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor(connections): fix maria connections, fix more tests
1 parent
546b90be
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
93 additions
and
29 deletions
lib/connection-manager.js → lib/dialects/abstract/connection-manager.js
lib/dialects/mariadb/connection-manager.js
lib/dialects/mysql/connection-manager.js
lib/dialects/postgres/connection-manager.js
lib/dialects/sqlite/connection-manager.js
lib/dialects/sqlite/index.js
lib/sequelize.js
test/sequelize.test.js
test/support.js
lib/connection-manager.js
→
lib/
dialects/abstract/
connection-manager.js
View file @
8d161a5
"use strict"
;
"use strict"
;
var
Pooling
=
require
(
'generic-pool'
)
var
Pooling
=
require
(
'generic-pool'
)
,
Promise
=
require
(
'./promise'
)
,
Promise
=
require
(
'.
./..
/promise'
)
,
_
=
require
(
'lodash'
)
,
_
=
require
(
'lodash'
)
,
defaultPoolingConfig
=
{
,
defaultPoolingConfig
=
{
max
:
10
,
max
:
5
,
min
:
0
,
min
:
0
,
idle
:
10000
,
idle
:
10000
,
handleDisconnects
:
false
handleDisconnects
:
false
}
}
,
ConnectionManager
;
,
ConnectionManager
;
ConnectionManager
=
function
(
sequelize
)
{
ConnectionManager
=
function
(
dialect
,
sequelize
)
{
var
config
=
sequelize
.
config
var
config
=
sequelize
.
config
,
self
=
this
;
,
self
=
this
;
this
.
sequelize
=
sequelize
;
this
.
config
=
config
;
this
.
config
=
config
;
this
.
dialect
=
sequelize
.
dialect
;
this
.
dialect
=
dialect
;
if
(
config
.
pool
)
{
if
(
config
.
pool
)
{
config
.
pool
=
_
.
extend
({},
config
.
pool
);
// Make sure we don't modify the existing config object (user might re-use it)
config
.
pool
=
_
.
extend
({},
config
.
pool
);
// Make sure we don't modify the existing config object (user might re-use it)
...
@@ -160,6 +161,7 @@ ConnectionManager = function(sequelize) {
...
@@ -160,6 +161,7 @@ ConnectionManager = function(sequelize) {
ConnectionManager
.
prototype
.
getConnection
=
function
(
options
)
{
ConnectionManager
.
prototype
.
getConnection
=
function
(
options
)
{
var
self
=
this
;
var
self
=
this
;
options
=
options
||
{};
options
=
options
||
{};
return
new
Promise
(
function
(
resolve
,
reject
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
self
.
pool
.
acquire
(
function
(
err
,
connection
)
{
self
.
pool
.
acquire
(
function
(
err
,
connection
)
{
if
(
err
)
return
reject
(
err
);
if
(
err
)
return
reject
(
err
);
...
@@ -169,6 +171,7 @@ ConnectionManager.prototype.getConnection = function(options) {
...
@@ -169,6 +171,7 @@ ConnectionManager.prototype.getConnection = function(options) {
};
};
ConnectionManager
.
prototype
.
releaseConnection
=
function
(
connection
)
{
ConnectionManager
.
prototype
.
releaseConnection
=
function
(
connection
)
{
var
self
=
this
;
var
self
=
this
;
return
new
Promise
(
function
(
resolve
,
reject
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
self
.
pool
.
release
(
connection
);
self
.
pool
.
release
(
connection
);
resolve
();
resolve
();
...
...
lib/dialects/mariadb/connection-manager.js
View file @
8d161a5
"use strict"
;
"use strict"
;
var
ConnectionManager
var
AbstractConnectionManager
=
require
(
'../abstract/connection-manager'
)
,
ConnectionManager
,
Utils
=
require
(
'../../utils'
)
,
Promise
=
require
(
'../../promise'
);
,
Promise
=
require
(
'../../promise'
);
ConnectionManager
=
function
(
dialect
,
sequelize
)
{
ConnectionManager
=
function
(
dialect
,
sequelize
)
{
AbstractConnectionManager
.
call
(
this
,
dialect
,
sequelize
);
try
{
try
{
this
.
lib
=
require
(
sequelize
.
config
.
dialectModulePath
||
'mariasql'
);
this
.
lib
=
require
(
sequelize
.
config
.
dialectModulePath
||
'mariasql'
);
}
catch
(
err
)
{
}
catch
(
err
)
{
...
@@ -10,15 +14,52 @@ ConnectionManager = function(dialect, sequelize) {
...
@@ -10,15 +14,52 @@ ConnectionManager = function(dialect, sequelize) {
}
}
};
};
Utils
.
_
.
extend
(
ConnectionManager
.
prototype
,
AbstractConnectionManager
.
prototype
);
ConnectionManager
.
prototype
.
connect
=
function
(
config
)
{
ConnectionManager
.
prototype
.
connect
=
function
(
config
)
{
var
self
=
this
;
return
new
Promise
(
function
(
resolve
,
reject
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
var
connectionConfig
=
{
host
:
config
.
host
,
port
:
config
.
port
,
user
:
config
.
username
,
password
:
config
.
password
,
db
:
config
.
database
,
metadata
:
true
};
if
(
config
.
dialectOptions
)
{
Object
.
keys
(
config
.
dialectOptions
).
forEach
(
function
(
key
)
{
connectionConfig
[
key
]
=
config
.
dialectOptions
[
key
];
});
}
if
(
connectionConfig
.
unixSocket
)
{
delete
connectionConfig
.
host
;
delete
connectionConfig
.
port
;
}
var
connection
=
new
self
.
lib
();
connection
.
connect
(
connectionConfig
);
connection
.
on
(
'error'
,
function
(
err
)
{
return
reject
(
err
);
});
connection
.
on
(
'connect'
,
function
()
{
return
resolve
(
connection
);
});
}).
tap
(
function
(
connection
)
{
connection
.
query
(
"SET time_zone = '+0:00'"
);
});
});
};
};
ConnectionManager
.
prototype
.
disconnect
=
function
(
connection
)
{
ConnectionManager
.
prototype
.
disconnect
=
function
(
connection
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
connection
.
end
();
resolve
();
});
});
};
};
ConnectionManager
.
prototype
.
validate
=
function
(
connection
)
{
return
connection
&&
connection
.
state
!==
'disconnected'
;
};
module
.
exports
=
ConnectionManager
;
module
.
exports
=
ConnectionManager
;
\ No newline at end of file
lib/dialects/mysql/connection-manager.js
View file @
8d161a5
"use strict"
;
"use strict"
;
var
ConnectionManager
var
AbstractConnectionManager
=
require
(
'../abstract/connection-manager'
)
,
ConnectionManager
,
Utils
=
require
(
'../../utils'
)
,
Promise
=
require
(
'../../promise'
);
,
Promise
=
require
(
'../../promise'
);
ConnectionManager
=
function
(
dialect
,
sequelize
)
{
ConnectionManager
=
function
(
dialect
,
sequelize
)
{
AbstractConnectionManager
.
call
(
this
,
dialect
,
sequelize
);
this
.
sequelize
=
sequelize
;
this
.
sequelize
.
config
.
port
=
this
.
sequelize
.
config
.
port
||
3306
;
try
{
try
{
this
.
lib
=
require
(
sequelize
.
config
.
dialectModulePath
||
'mysql'
);
this
.
lib
=
require
(
sequelize
.
config
.
dialectModulePath
||
'mysql'
);
}
catch
(
err
)
{
}
catch
(
err
)
{
...
@@ -10,6 +16,8 @@ ConnectionManager = function(dialect, sequelize) {
...
@@ -10,6 +16,8 @@ ConnectionManager = function(dialect, sequelize) {
}
}
};
};
Utils
.
_
.
extend
(
ConnectionManager
.
prototype
,
AbstractConnectionManager
.
prototype
);
ConnectionManager
.
prototype
.
connect
=
function
(
config
)
{
ConnectionManager
.
prototype
.
connect
=
function
(
config
)
{
var
self
=
this
;
var
self
=
this
;
return
new
Promise
(
function
(
resolve
,
reject
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
...
...
lib/dialects/postgres/connection-manager.js
View file @
8d161a5
"use strict"
;
"use strict"
;
var
ConnectionManager
var
AbstractConnectionManager
=
require
(
'../abstract/connection-manager'
)
,
ConnectionManager
,
Utils
=
require
(
'../../utils'
)
,
Promise
=
require
(
'../../promise'
);
,
Promise
=
require
(
'../../promise'
);
ConnectionManager
=
function
(
dialect
,
sequelize
)
{
ConnectionManager
=
function
(
dialect
,
sequelize
)
{
AbstractConnectionManager
.
call
(
this
,
dialect
,
sequelize
);
this
.
sequelize
=
sequelize
;
this
.
sequelize
=
sequelize
;
this
.
sequelize
.
config
.
port
=
this
.
sequelize
.
config
.
port
||
5432
;
this
.
sequelize
.
config
.
port
=
this
.
sequelize
.
config
.
port
||
5432
;
try
{
try
{
...
@@ -12,6 +16,8 @@ ConnectionManager = function(dialect, sequelize) {
...
@@ -12,6 +16,8 @@ ConnectionManager = function(dialect, sequelize) {
}
}
};
};
Utils
.
_
.
extend
(
ConnectionManager
.
prototype
,
AbstractConnectionManager
.
prototype
);
ConnectionManager
.
prototype
.
connect
=
function
(
config
)
{
ConnectionManager
.
prototype
.
connect
=
function
(
config
)
{
var
self
=
this
;
var
self
=
this
;
...
...
lib/dialects/sqlite/connection-manager.js
View file @
8d161a5
"use strict"
;
"use strict"
;
var
ConnectionManager
var
AbstractConnectionManager
=
require
(
'../abstract/connection-manager'
)
,
ConnectionManager
,
Utils
=
require
(
'../../utils'
)
,
Promise
=
require
(
'../../promise'
);
,
Promise
=
require
(
'../../promise'
);
ConnectionManager
=
function
(
dialect
,
sequelize
)
{
ConnectionManager
=
function
(
dialect
,
sequelize
)
{
this
.
sequelize
=
sequelize
;
this
.
sequelize
=
sequelize
;
this
.
config
=
sequelize
.
config
;
this
.
dialect
=
dialect
;
this
.
connection
=
null
;
try
{
try
{
this
.
lib
=
require
(
sequelize
.
config
.
dialectModulePath
||
'sqlite3'
).
verbose
();
this
.
lib
=
require
(
sequelize
.
config
.
dialectModulePath
||
'sqlite3'
).
verbose
();
...
@@ -12,15 +17,20 @@ ConnectionManager = function(dialect, sequelize) {
...
@@ -12,15 +17,20 @@ ConnectionManager = function(dialect, sequelize) {
}
}
};
};
ConnectionManager
.
prototype
.
connect
=
function
(
config
)
{
Utils
.
_
.
extend
(
ConnectionManager
.
prototype
,
AbstractConnectionManager
.
prototype
);
ConnectionManager
.
prototype
.
getConnection
=
function
(
options
)
{
var
self
=
this
;
var
self
=
this
;
if
(
self
.
connection
)
return
Promise
.
resolve
(
self
.
connection
);
return
new
Promise
(
function
(
resolve
,
reject
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
var
connection
=
new
self
.
lib
.
Database
(
self
.
sequelize
.
options
.
storage
||
':memory:'
,
function
(
err
)
{
self
.
connection
=
new
self
.
lib
.
Database
(
self
.
sequelize
.
options
.
storage
||
':memory:'
,
function
(
err
)
{
if
(
err
)
{
if
(
err
)
{
if
(
err
.
code
===
'SQLITE_CANTOPEN'
)
return
reject
(
'Failed to find SQL server. Please double check your settings.'
);
if
(
err
.
code
===
'SQLITE_CANTOPEN'
)
return
reject
(
'Failed to find SQL server. Please double check your settings.'
);
return
reject
(
err
);
return
reject
(
err
);
}
}
resolve
(
connection
);
resolve
(
self
.
connection
);
});
});
}).
tap
(
function
(
connection
)
{
}).
tap
(
function
(
connection
)
{
if
(
self
.
sequelize
.
options
.
foreignKeys
!==
false
)
{
if
(
self
.
sequelize
.
options
.
foreignKeys
!==
false
)
{
...
@@ -30,13 +40,9 @@ ConnectionManager.prototype.connect = function(config) {
...
@@ -30,13 +40,9 @@ ConnectionManager.prototype.connect = function(config) {
}
}
});
});
};
};
ConnectionManager
.
prototype
.
disconnect
=
function
(
connection
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
ConnectionManager
.
prototype
.
releaseConnection
=
function
(
connection
)
{
connection
.
close
(
function
(
err
)
{
// no-op
if
(
err
)
return
reject
(
err
);
resolve
();
});
});
};
};
module
.
exports
=
ConnectionManager
;
module
.
exports
=
ConnectionManager
;
\ No newline at end of file
lib/dialects/sqlite/index.js
View file @
8d161a5
...
@@ -16,5 +16,6 @@ SqliteDialect.prototype.supports = _.defaults({
...
@@ -16,5 +16,6 @@ SqliteDialect.prototype.supports = _.defaults({
},
Abstract
.
prototype
.
supports
);
},
Abstract
.
prototype
.
supports
);
SqliteDialect
.
prototype
.
Query
=
Query
;
SqliteDialect
.
prototype
.
Query
=
Query
;
SqliteDialect
.
prototype
.
name
=
'sqlite'
;
module
.
exports
=
SqliteDialect
;
module
.
exports
=
SqliteDialect
;
\ No newline at end of file
lib/sequelize.js
View file @
8d161a5
...
@@ -7,7 +7,6 @@ var url = require('url')
...
@@ -7,7 +7,6 @@ var url = require('url')
,
DataTypes
=
require
(
'./data-types'
)
,
DataTypes
=
require
(
'./data-types'
)
,
ModelManager
=
require
(
'./model-manager'
)
,
ModelManager
=
require
(
'./model-manager'
)
,
QueryInterface
=
require
(
'./query-interface'
)
,
QueryInterface
=
require
(
'./query-interface'
)
,
ConnectionManager
=
require
(
'./connection-manager'
)
,
Transaction
=
require
(
'./transaction'
)
,
Transaction
=
require
(
'./transaction'
)
,
QueryTypes
=
require
(
'./query-types'
)
,
QueryTypes
=
require
(
'./query-types'
)
,
sequelizeErrors
=
require
(
'./errors'
)
,
sequelizeErrors
=
require
(
'./errors'
)
...
@@ -122,7 +121,6 @@ module.exports = (function() {
...
@@ -122,7 +121,6 @@ module.exports = (function() {
sync
:
{},
sync
:
{},
logging
:
console
.
log
,
logging
:
console
.
log
,
omitNull
:
false
,
omitNull
:
false
,
queue
:
true
,
native
:
false
,
native
:
false
,
replication
:
false
,
replication
:
false
,
ssl
:
undefined
,
ssl
:
undefined
,
...
@@ -170,7 +168,7 @@ module.exports = (function() {
...
@@ -170,7 +168,7 @@ module.exports = (function() {
*/
*/
this
.
models
=
{};
this
.
models
=
{};
this
.
modelManager
=
this
.
daoFactoryManager
=
new
ModelManager
(
this
);
this
.
modelManager
=
this
.
daoFactoryManager
=
new
ModelManager
(
this
);
this
.
connectionManager
=
new
ConnectionManager
(
this
)
;
this
.
connectionManager
=
this
.
dialect
.
connectionManager
;
this
.
importCache
=
{};
this
.
importCache
=
{};
};
};
...
...
test/sequelize.test.js
View file @
8d161a5
...
@@ -99,12 +99,10 @@ describe(Support.getTestDialectTeaser("Sequelize"), function () {
...
@@ -99,12 +99,10 @@ describe(Support.getTestDialectTeaser("Sequelize"), function () {
if
(
dialect
===
'mariadb'
)
{
if
(
dialect
===
'mariadb'
)
{
expect
(
err
.
message
).
to
.
match
(
/Access denied for user/
)
expect
(
err
.
message
).
to
.
match
(
/Access denied for user/
)
}
else
if
(
dialect
===
'postgres'
)
{
}
else
if
(
dialect
===
'postgres'
)
{
// When the test is run with only it produces:
expect
(
// Error: Error: Failed to authenticate for PostgresSQL. Please double check your settings.
err
.
message
.
match
(
/Failed to authenticate for PostgresSQL/
)
||
expect
(
err
.
message
).
to
.
match
(
/Failed to authenticate for PostgresSQL/
)
err
.
message
.
match
(
/invalid port number/
)
// When its run with all the other tests it produces:
).
to
.
be
.
ok
// Error: invalid port number: "99999"
//expect(err.message).to.match(/invalid port number/)
}
else
{
}
else
{
expect
(
err
.
message
).
to
.
match
(
/Failed to authenticate/
)
expect
(
err
.
message
).
to
.
match
(
/Failed to authenticate/
)
}
}
...
...
test/support.js
View file @
8d161a5
...
@@ -37,7 +37,7 @@ var Support = {
...
@@ -37,7 +37,7 @@ var Support = {
if
(
dialect
===
'sqlite'
)
{
if
(
dialect
===
'sqlite'
)
{
var
options
=
Sequelize
.
Utils
.
_
.
extend
({},
sequelize
.
options
,
{
storage
:
path
.
join
(
__dirname
,
'tmp'
,
'db.sqlite'
)
})
var
options
=
Sequelize
.
Utils
.
_
.
extend
({},
sequelize
.
options
,
{
storage
:
path
.
join
(
__dirname
,
'tmp'
,
'db.sqlite'
)
})
,
_sequelize
=
new
Sequelize
(
sequelize
.
config
.
datase
,
null
,
null
,
options
)
,
_sequelize
=
new
Sequelize
(
sequelize
.
config
.
data
ba
se
,
null
,
null
,
options
)
_sequelize
.
sync
({
force
:
true
}).
success
(
function
()
{
callback
(
_sequelize
)
})
_sequelize
.
sync
({
force
:
true
}).
success
(
function
()
{
callback
(
_sequelize
)
})
}
else
{
}
else
{
...
...
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