arel-clone
v0.1.0
Published
Arel Clone is a SQL AST manager for Node JS
Downloads
3
Readme
Rel
https://github.com/yang/rel
Description
Rel is a SQL AST manager for Node JS. It is a straight port of https://github.com/rails/arel. Although it does have some changes of note. These are:
- No reliance on a database connection. This library builds queries only.
- It obviously can't use all of the ruby-isms like over-riding the array operator so methods are used instead.
It still holds the same goals as Arel which are:
- Simplifies the generation complex of SQL queries.
- Adapts to various RDBMS systems
Before you ask, there will also be a port of ActiveRecord coming in the next little bit.
Installation
npm install rel
Introduction
users = new Rel.Table 'users'
users.project(Rel.star()).toSql()
Will produce
SELECT * FROM users
A more complicated example of command queries is:
users.where(users.column('name').eq('amy'))
# => SELECT * FROM users WHERE users.name = 'amy'
In SQL the selection would contain what you are getting from the database, this is called a projection in Rel.
users.project(users.column('id')) # => SELECT users.id FROM users
Joins resemble SQL:
users.join(photos).on(users.column('id').eq(photos.column('user_id')))
# => SELECT * FROM users INNER JOIN photos ON users.id = photos.user_id
Limit and offset and called take and skip:
users.take(5) # => SELECT * FROM users LIMIT 5
users.skip(4) # => SELECT * FROM users OFFSET 4
GROUP BY is called group:
users.group(users.column('name')) # => SELECT * FROM users GROUP BY name
You can chain all operators, for example:
users.where(users.column('name').eq('amy')).project(users.column('id'))
# => SELECT users.id FROM users WHERE users.name = 'amy'
Another example:
users.where(users.column('name').eq('bob')).where(users.column('age').lt(25))
You can also pass in multiple arguments:
users.where(users.column('name').eq('bob'), users.column('age').lt(25))
The OR operator works like this:
users.where(users.column('name').eq('bob').or(users.column('age').lt(25)))
This is the same as the AS operator.
Contributors
Founded and majority of development to date by Carl Woodward (@carlwoodward).
Current developer and maintainer is Yang Zhang (@yang).
Setup notes
- Using special commit of vows to work around https://github.com/flatiron/vows/issues/296.