Apache Cassandra QueryBuilder for NodeJS
this project provides a QueryBuilder for Apache Cassandra to NodeJS
$ npm install --save node-cassandra-querybuilder
var QueryBuilder = require('node-cassandra-querybuilder');
var query = QueryBuilder
.select() // choose statement
.columns(['*']) // select columns to be projected
.from('db', 'table') // select database and table
.where(QueryBuilder.eq('foo', 'bar')) // add condition
.limit(5) // add limit
.toString(); // compile and get query
console.log(query); // SELECT * FROM db.table WHERE foo = 'bar';
- QueryBuilder.select() - call select statement
- QueryBuilder.insert() - call insert statement
- QueryBuilder.update() - call update statement
- QueryBuilder.delete() - call delete statement
var select = QueryBuilder.select() //or...
QueryBuilder.select()...
{column} - name of the column {value} - value to be recorded
- QueryBuilder.eq({column}, {value}) - equal operator
- QueryBuilder.lt({column}, {value}) - less than operator
- QueryBuilder.lte({column}, {value}) - less than or equal operator
- QueryBuilder.gt({column}, {value}) - greater than operator
- QueryBuilder.gte({column}, {value}) - greater than or equal operator
QueryBuilder.gte('size', 10) // size >= 10
UUID type needs wrapper to works
QueryBuilder.eq('id', new QueryBuilder.Types.UUID('652f2270-fac4-11e5-bcc3-452e2b89ab68')) // id = 652f2270-fac4-11e5-bcc3-452e2b89ab68
{operator} - Operators type
- where({operator}) - insert condition
- and({operator}) - append condition
...where(QueryBuilder.eq('foo', 'bar')) // WHERE foo = 'bar'
...where(QueryBuilder.eq('foo', 'bar')).and(QueryBuilder.lte('length', 10)) // WHERE foo = 'bar' AND length <= 10
{limiter} - value to limit
- limit({limiter}) - add limit
...where(QueryBuilder.eq('foo', 'bar')).limit(5) // WHERE foo = 'bar' LIMIT 5
{database} - database name {table} - table name {columns} - array of columns' names {values} - array of values to be recorded {operator} - Operators type
- from([{database, }] {table}) - set database's name and/or table's name
- columns({columns}) - set columns
- values({values}) - set values
- set({operator}) - set assignment
...from('database','table') // database.table
...from('table') // table
...columns(['id', 'name', 'age']) // (id,name,age)
...values([new QueryBuilder.Types.UUID('652f2270-fac4-11e5-bcc3-452e2b89ab68'),'foo',99]) // (652f2270-fac4-11e5-bcc3-452e2b89ab68, 'foo', 99)
...set(QueryBuilder.eq('name', 'foo')).set(QueryBuilder.eq('age', 99)) // name = 'foo', age = 99
// SELECT id,name,age FROM db.users WHERE id = 652f2270-fac4-11e5-bcc3-452e2b89ab68 AND age < 50 LIMIT 1;
QueryBuilder
.select()
.columns(['id', 'name', 'age'])
.from('db', 'users')
.where(QueryBuilder.eq('id', new QueryBuilder.Types.UUID('652f2270-fac4-11e5-bcc3-452e2b89ab68')))
.and(QueryBuilder.lt('age', 50))
.limit(1)
.toString();
// INSERT INTO db.users (id,name,age) VALUES (652f2270-fac4-11e5-bcc3-452e2b89ab68,'foo',70);
QueryBuilder
.insert()
.from('db', 'users')
.columns(['id', 'name', 'age'])
.values([new QueryBuilder.Types.UUID('652f2270-fac4-11e5-bcc3-452e2b89ab68'), 'foo', 70])
.toString();
// UPDATE db.users SET name = 'foo bar', age = 71 WHERE id = 652f2270-fac4-11e5-bcc3-452e2b89ab68;
QueryBuilder
.update()
.from('db', 'users')
.set(QueryBuilder.eq('name', 'foo bar'))
.set(QueryBuilder.eq('age', 71))
.where(QueryBuilder.eq('id', new QueryBuilder.Types.UUID('652f2270-fac4-11e5-bcc3-452e2b89ab68')))
.toString();
// DELETE FROM db.users WHERE id = 652f2270-fac4-11e5-bcc3-452e2b89ab68;
QueryBuilder
.delete()
.from('db', 'users')
.where(QueryBuilder.eq('id', new QueryBuilder.Types.UUID('652f2270-fac4-11e5-bcc3-452e2b89ab68')))
.toString();
you can use statements as an attribute too (is better to make code conditions)
function(age_value) {
var select = QueryBuilder.select();
select.columns(['id', 'name', 'age']).from('db', 'users')
.where(QueryBuilder.eq('id', new QueryBuilder.Types.UUID('652f2270-fac4-11e5-bcc3-452e2b89ab68')))
if (age_value) {
select.and(QueryBuilder.lt('age', 50));
}
return select.toString();
};
use '*' to select all columns
...columns(['*'])...