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 7e03745a
authored
May 06, 2014
by
Mick Hansen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore(model): move attributes normalization and enum validator generation to model constructor
1 parent
9135d344
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
49 additions
and
53 deletions
lib/dao-factory.js
lib/sequelize.js
lib/dao-factory.js
View file @
7e03745
...
@@ -58,7 +58,54 @@ module.exports = (function() {
...
@@ -58,7 +58,54 @@ module.exports = (function() {
this
.
tableName
=
this
.
options
.
tableName
this
.
tableName
=
this
.
options
.
tableName
}
}
attributes
=
replaceReferencesWithTableNames
(
attributes
)
// If you don't specify a valid data type lets help you debug it
Utils
.
_
.
each
(
attributes
,
function
(
dataType
,
name
)
{
if
(
Utils
.
isHash
(
dataType
))
{
// We have special cases where the type is an object containing
// the values (e.g. Sequelize.ENUM(value, value2) returns an object
// instead of a function)
// Copy these values to the dataType
dataType
.
values
=
(
dataType
.
type
&&
dataType
.
type
.
values
)
||
dataType
.
values
;
// We keep on working with the actual type object
dataType
=
dataType
.
type
}
if
(
dataType
===
undefined
)
{
throw
new
Error
(
'Unrecognized data type for field '
+
name
)
}
if
(
dataType
.
toString
()
===
"ENUM"
)
{
attributes
[
name
].
validate
=
attributes
[
name
].
validate
||
{
_checkEnum
:
function
(
value
,
next
)
{
var
hasValue
=
value
!==
undefined
,
isMySQL
=
[
'mysql'
,
'mariadb'
].
indexOf
(
options
.
sequelize
.
options
.
dialect
)
!==
-
1
,
ciCollation
=
!!
options
.
collate
&&
options
.
collate
.
match
(
/_ci$/i
)
!==
null
,
valueOutOfScope
if
(
isMySQL
&&
ciCollation
&&
hasValue
)
{
var
scopeIndex
=
(
attributes
[
name
].
values
||
[]).
map
(
function
(
d
)
{
return
d
.
toLowerCase
()
}).
indexOf
(
value
.
toLowerCase
())
valueOutOfScope
=
scopeIndex
===
-
1
}
else
{
valueOutOfScope
=
((
attributes
[
name
].
values
||
[]).
indexOf
(
value
)
===
-
1
)
}
if
(
hasValue
&&
valueOutOfScope
&&
!
(
attributes
[
name
].
allowNull
===
true
&&
values
[
attrName
]
===
null
))
{
return
next
(
'Value "'
+
value
+
'" for ENUM '
+
name
+
' is out of allowed scope. Allowed values: '
+
attributes
[
name
].
values
.
join
(
', '
))
}
next
()
}
}
}
})
Object
.
keys
(
attributes
).
forEach
(
function
(
attrName
)
{
if
(
attributes
[
attrName
].
references
instanceof
DAOFactory
)
{
attributes
[
attrName
].
references
=
attributes
[
attrName
].
references
.
tableName
}
})
this
.
options
.
hooks
=
this
.
replaceHookAliases
(
this
.
options
.
hooks
)
this
.
options
.
hooks
=
this
.
replaceHookAliases
(
this
.
options
.
hooks
)
this
.
rawAttributes
=
attributes
this
.
rawAttributes
=
attributes
...
@@ -1822,16 +1869,6 @@ module.exports = (function() {
...
@@ -1822,16 +1869,6 @@ module.exports = (function() {
})(
this
,
includes
)
})(
this
,
includes
)
}
}
var
replaceReferencesWithTableNames
=
function
(
attributes
)
{
Object
.
keys
(
attributes
).
forEach
(
function
(
attrName
)
{
if
(
attributes
[
attrName
].
references
instanceof
DAOFactory
)
{
attributes
[
attrName
].
references
=
attributes
[
attrName
].
references
.
tableName
}
})
return
attributes
}
var
optClone
=
function
(
options
)
{
var
optClone
=
function
(
options
)
{
return
Utils
.
_
.
cloneDeep
(
options
,
function
(
elem
)
{
return
Utils
.
_
.
cloneDeep
(
options
,
function
(
elem
)
{
// The DAOFactories used for include are pass by ref, so don't clone them.
// The DAOFactories used for include are pass by ref, so don't clone them.
...
...
lib/sequelize.js
View file @
7e03745
...
@@ -366,53 +366,12 @@ module.exports = (function() {
...
@@ -366,53 +366,12 @@ module.exports = (function() {
options
.
omitNull
=
globalOptions
.
omitNull
options
.
omitNull
=
globalOptions
.
omitNull
options
.
language
=
globalOptions
.
language
options
.
language
=
globalOptions
.
language
// If you don't specify a valid data type lets help you debug it
Utils
.
_
.
each
(
attributes
,
function
(
dataType
,
name
)
{
if
(
Utils
.
isHash
(
dataType
))
{
// We have special cases where the type is an object containing
// the values (e.g. Sequelize.ENUM(value, value2) returns an object
// instead of a function)
// Copy these values to the dataType
dataType
.
values
=
(
dataType
.
type
&&
dataType
.
type
.
values
)
||
dataType
.
values
;
// We keep on working with the actual type object
dataType
=
dataType
.
type
}
if
(
dataType
===
undefined
)
{
throw
new
Error
(
'Unrecognized data type for field '
+
name
)
}
if
(
dataType
.
toString
()
===
"ENUM"
)
{
attributes
[
name
].
validate
=
attributes
[
name
].
validate
||
{
_checkEnum
:
function
(
value
,
next
)
{
var
hasValue
=
value
!==
undefined
,
isMySQL
=
[
'mysql'
,
'mariadb'
].
indexOf
(
self
.
options
.
dialect
)
!==
-
1
,
ciCollation
=
!!
options
.
collate
&&
options
.
collate
.
match
(
/_ci$/i
)
!==
null
,
valueOutOfScope
if
(
isMySQL
&&
ciCollation
&&
hasValue
)
{
var
scopeIndex
=
(
attributes
[
name
].
values
||
[]).
map
(
function
(
d
)
{
return
d
.
toLowerCase
()
}).
indexOf
(
value
.
toLowerCase
())
valueOutOfScope
=
scopeIndex
===
-
1
}
else
{
valueOutOfScope
=
((
attributes
[
name
].
values
||
[]).
indexOf
(
value
)
===
-
1
)
}
if
(
hasValue
&&
valueOutOfScope
&&
!
(
attributes
[
name
].
allowNull
===
true
&&
values
[
attrName
]
===
null
))
{
return
next
(
'Value "'
+
value
+
'" for ENUM '
+
name
+
' is out of allowed scope. Allowed values: '
+
attributes
[
name
].
values
.
join
(
', '
))
}
next
()
}
}
}
})
// if you call "define" multiple times for the same daoName, do not clutter the factory
// if you call "define" multiple times for the same daoName, do not clutter the factory
if
(
this
.
isDefined
(
daoName
))
{
if
(
this
.
isDefined
(
daoName
))
{
this
.
daoFactoryManager
.
removeDAO
(
this
.
daoFactoryManager
.
getDAO
(
daoName
))
this
.
daoFactoryManager
.
removeDAO
(
this
.
daoFactoryManager
.
getDAO
(
daoName
))
}
}
options
.
sequelize
=
this
var
factory
=
new
DAOFactory
(
daoName
,
attributes
,
options
)
var
factory
=
new
DAOFactory
(
daoName
,
attributes
,
options
)
this
.
daoFactoryManager
.
addDAO
(
factory
.
init
(
this
.
daoFactoryManager
))
this
.
daoFactoryManager
.
addDAO
(
factory
.
init
(
this
.
daoFactoryManager
))
...
...
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