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 0e1104d7
authored
Aug 05, 2013
by
Sascha Depold
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of github.com:sequelize/sequelize
2 parents
44ac75c4
d983e96b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
157 additions
and
18 deletions
lib/dao-factory.js
package.json
test/dao-factory.test.js
lib/dao-factory.js
View file @
0e1104d
...
...
@@ -2,6 +2,8 @@ var Utils = require("./utils")
,
DAO
=
require
(
"./dao"
)
,
DataTypes
=
require
(
"./data-types"
)
,
Util
=
require
(
'util'
)
,
sql
=
require
(
'sql'
)
,
SqlString
=
require
(
'./sql-string'
)
module
.
exports
=
(
function
()
{
var
DAOFactory
=
function
(
name
,
attributes
,
options
)
{
...
...
@@ -60,6 +62,32 @@ module.exports = (function() {
get
:
function
()
{
return
this
.
QueryInterface
.
QueryGenerator
}
})
;(
function
()
{
var
instance
=
sql
.
define
({
name
:
"dummy"
,
columns
:
[]
})
for
(
var
methodName
in
instance
)
{
;(
function
(
methodName
)
{
DAOFactory
.
prototype
[
methodName
]
=
function
()
{
var
dataset
=
this
.
dataset
()
,
result
=
dataset
[
methodName
].
apply
(
dataset
,
arguments
)
,
dialect
=
this
.
daoFactoryManager
.
sequelize
.
options
.
dialect
,
self
=
this
result
.
toSql
=
function
()
{
var
query
=
result
.
toQuery
()
return
SqlString
.
format
(
query
.
text
.
replace
(
/
(\$\d)
/g
,
'?'
),
query
.
values
,
null
,
dialect
)
+
';'
}
result
.
exec
=
function
()
{
return
self
.
QueryInterface
.
queryAndEmit
([
result
.
toSql
(),
self
,
{
type
:
'SELECT'
}],
'snafu'
)
}
return
result
}
})(
methodName
)
}
})()
DAOFactory
.
prototype
.
init
=
function
(
daoFactoryManager
)
{
var
self
=
this
;
...
...
@@ -543,25 +571,23 @@ module.exports = (function() {
return
this
.
QueryInterface
.
describeTable
(
this
.
tableName
)
}
// private
var
query
=
function
()
{
var
args
=
Utils
.
_
.
map
(
arguments
,
function
(
arg
,
_
)
{
return
arg
})
,
sequelize
=
this
.
daoFactoryManager
.
sequelize
// add this as the second argument
if
(
arguments
.
length
===
1
)
{
args
.
push
(
this
)
DAOFactory
.
prototype
.
dataset
=
function
()
{
if
(
!
this
.
__sql
)
{
this
.
__sql
=
sql
.
setDialect
(
this
.
daoFactoryManager
.
sequelize
.
options
.
dialect
)
}
// add {} as options
if
(
args
.
length
===
2
)
{
args
.
push
({})
}
var
instance
=
this
.
__sql
.
define
({
name
:
this
.
tableName
,
columns
:
[]
})
,
attributes
=
this
.
attributes
return
sequelize
.
query
.
apply
(
sequelize
,
args
)
Object
.
keys
(
attributes
).
forEach
(
function
(
key
)
{
instance
.
addColumn
(
key
,
attributes
[
key
])
})
return
instance
}
// private
var
addOptionalClassMethods
=
function
()
{
var
self
=
this
Utils
.
_
.
each
(
this
.
options
.
classMethods
||
{},
function
(
fct
,
name
)
{
self
[
name
]
=
fct
})
...
...
package.json
View file @
0e1104d
...
...
@@ -45,7 +45,8 @@
"dottie"
:
"0.0.8-0"
,
"toposort-class"
:
"~0.2.0"
,
"generic-pool"
:
"2.0.4"
,
"promise"
:
"~3.2.0"
"promise"
:
"~3.2.0"
,
"sql"
:
"~0.26.0"
},
"devDependencies"
:
{
"sqlite3"
:
"~2.1.12"
,
...
...
test/dao-factory.test.js
View file @
0e1104d
...
...
@@ -2544,15 +2544,15 @@ describe(Support.getTestDialectTeaser("DAOFactory"), function () {
describe
(
'references'
,
function
()
{
this
.
timeout
(
3000
)
beforeEach
(
function
(
done
)
{
var
self
=
this
self
.
Author
=
self
.
sequelize
.
define
(
'author'
,
{
firstName
:
Sequelize
.
STRING
})
self
.
Author
.
sync
({
force
:
true
}).
success
(
function
()
{
this
.
Author
=
this
.
sequelize
.
define
(
'author'
,
{
firstName
:
Sequelize
.
STRING
})
this
.
Author
.
sync
({
force
:
true
}).
success
(
function
()
{
done
()
})
})
afterEach
(
function
(
done
)
{
var
self
=
this
self
.
sequelize
.
getQueryInterface
().
dropTable
(
'posts'
,
{
force
:
true
}).
success
(
function
()
{
self
.
sequelize
.
getQueryInterface
().
dropTable
(
'authors'
,
{
force
:
true
}).
success
(
function
()
{
done
()
...
...
@@ -2664,4 +2664,116 @@ describe(Support.getTestDialectTeaser("DAOFactory"), function () {
})
})
})
describe
(
"syntax sugar"
,
function
()
{
before
(
function
(
done
)
{
this
.
User
=
this
.
sequelize
.
define
(
"user"
,
{
username
:
Sequelize
.
STRING
,
firstName
:
Sequelize
.
STRING
,
lastName
:
Sequelize
.
STRING
})
this
.
User
.
sync
({
force
:
true
}).
success
(
function
()
{
done
()
})
})
describe
(
"dataset"
,
function
()
{
it
(
"returns a node-sql instance with the correct dialect"
,
function
()
{
expect
(
this
.
User
.
dataset
().
sql
.
dialectName
).
to
.
equal
(
dialect
)
})
it
(
"allows me to generate sql queries"
,
function
()
{
var
query
=
this
.
User
.
dataset
().
select
(
"username"
).
toQuery
()
expect
(
Object
.
keys
(
query
)).
to
.
eql
([
'text'
,
'values'
])
})
})
describe
(
"select"
,
function
()
{
it
(
"sets .select() as an alias to .dataset().select()"
,
function
()
{
var
query1
=
this
.
User
.
select
(
"username"
).
toQuery
()
,
query2
=
this
.
User
.
dataset
().
select
(
"username"
).
toQuery
()
expect
(
query1
.
text
).
to
.
equal
(
query2
.
text
)
})
})
describe
(
"toSql"
,
function
()
{
it
(
"transforms the node-sql instance into a proper sql string"
,
function
()
{
var
sql
=
this
.
User
.
select
(
"username"
).
toSql
()
var
sqlMap
=
{
postgres
:
'SELECT username FROM "'
+
this
.
User
.
tableName
+
'";'
,
mysql
:
'SELECT username FROM `'
+
this
.
User
.
tableName
+
'`;'
,
sqlite
:
'SELECT username FROM "'
+
this
.
User
.
tableName
+
'";'
}
expect
(
sql
).
to
.
equal
(
sqlMap
[
dialect
])
})
it
(
"transforms node-sql instances with chaining into a proper sql string"
,
function
()
{
var
sql
=
this
.
User
.
select
(
"username"
).
select
(
"firstName"
).
group
(
"username"
).
toSql
()
var
sqlMap
=
{
postgres
:
'SELECT username, firstName FROM "'
+
this
.
User
.
tableName
+
'" GROUP BY username;'
,
mysql
:
'SELECT username, firstName FROM `'
+
this
.
User
.
tableName
+
'` GROUP BY username;'
,
sqlite
:
'SELECT username, firstName FROM "'
+
this
.
User
.
tableName
+
'" GROUP BY username;'
}
expect
(
sql
).
to
.
equal
(
sqlMap
[
dialect
])
})
})
describe
(
"exec"
,
function
()
{
beforeEach
(
function
(
done
)
{
var
self
=
this
this
.
User
.
create
({
username
:
"foo"
})
.
then
(
function
()
{
return
self
.
User
.
create
({
username
:
"bar"
})
})
.
then
(
function
()
{
return
self
.
User
.
create
({
username
:
"baz"
})
})
.
then
(
function
()
{
done
()
})
})
it
(
"selects all users with name 'foo'"
,
function
(
done
)
{
this
.
User
.
where
({
username
:
"foo"
})
.
exec
()
.
success
(
function
(
users
)
{
expect
(
users
).
to
.
have
.
length
(
1
)
expect
(
users
[
0
].
username
).
to
.
equal
(
"foo"
)
done
()
})
})
it
(
"returns an instanceof DAO"
,
function
(
done
)
{
var
DAO
=
require
(
__dirname
+
"/../lib/dao"
)
this
.
User
.
where
({
username
:
"foo"
}).
exec
().
success
(
function
(
users
)
{
expect
(
users
[
0
]).
to
.
be
.
instanceOf
(
DAO
)
done
()
})
})
it
(
"returns all users in the db"
,
function
(
done
)
{
this
.
User
.
select
().
exec
().
success
(
function
(
users
)
{
expect
(
users
).
to
.
have
.
length
(
3
)
done
()
})
})
it
(
"can handle or queries"
,
function
(
done
)
{
this
.
User
.
where
(
this
.
User
.
dataset
().
username
.
equals
(
"bar"
).
or
(
this
.
User
.
dataset
().
username
.
equals
(
"baz"
)))
.
exec
()
.
success
(
function
(
users
)
{
expect
(
users
).
to
.
have
.
length
(
2
)
done
()
})
})
})
})
})
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