mohair
Version:
mohair is an sql builder
168 lines (109 loc) • 3.77 kB
Markdown
mohair is an sql builder for nodejs
[](https://travis-ci.org/snd/mohair)
npm install mohair
```coffeescript
mohair = require 'mohair'
user = mohair.table 'user'
```
```coffeescript
query = user.insert {name: 'foo', email: 'foo@example.com'}
query.sql()
query.params()
```
```coffeescript
query = user.insert [{name: 'foo'}, {name: 'bar'}]
query.sql()
query.params()
```
all records in the argument array must have the same keys.
```coffeescript
user.where(id: 3).delete()
query.sql()
query.params()
```
`where` can take any valid [criterion](https://github.com/snd/criterion).
```coffeescript
query = user.where({name: 'foo'}).update({name: 'bar'})
query.sql()
query.params()
```
```coffeescript
query = user.select()
query.sql()
query.params()
```
you can omit `select()` if you want to select `*`. select is the default action.
```coffeescript
query = user.select('name, timestamp AS created_at')
query.sql()
query.params()
```
```coffeescript
query = user.where(id: 3).where('name = ?', 'foo').select()
query.sql()
query.params()
```
multiple calls to `where` are anded together.
`where` can take any valid [criterion](https://github.com/snd/criterion).
```coffeescript
query = user.order('created DESC, name ASC').select()
query.sql()
query.params()
```
```coffeescript
query = user.limit(20).offset(10).select()
query.sql()
query.params()
```
```coffeescript
query = user.join('JOIN project ON user.id = project.user_id')
query.sql()
query.params()
```
```coffeescript
query = user.join('JOIN project ON user.id = project.user_id', {'project.column': {$null: true}})
query.sql()
query.params()
```
```coffeescript
query = user
.select('user.*, count(project.id) AS project_count')
.join('JOIN project ON user.id = project.user_id')
.group('user.id')
query.sql()
query.params()
```
mohair objects are immutable.
every method call returns a new object.
no method call ever changes the state of the object it is called on.
this means you can do stuff like this:
```coffeescript
visibleUsers = mohair.table('user').where(is_visible: true)
updateUser = visibleUsers.update({name: 'i am visible'}).where(id: 3)
updateUser.sql()
updateUser.params()
deleteUser = visibleUsers.where({name: 'foo'}).delete()
deleteUser.sql()
deleteUser.params()
```
everything chains!