Coder Social home page Coder Social logo

rel's Introduction

Rel

http://github.com/cjwoodward/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:

  1. No reliance on a database connection. This library builds queries only.
  2. 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:

  1. Simplifies the generation complex of SQL queries.
  2. 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.

rel's People

Contributors

cjwoodwardtest avatar zacheryph avatar

Watchers

Max Brunsfeld avatar James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.