-
Notifications
You must be signed in to change notification settings - Fork 1
BASE.query.Queryable
Queryables create a common way to describe a query acrossed multiple data stores. This allows you to switch databases without touching your application queries. Its extremely powerful.
BASE.require([
"BASE.query.Queryable",
"BASE.query.ArrayProvider"
], function(){
var Queryable = BASE.query.Queryable;
var ArrayProvider = BASE.query.ArrayProvider
var queryable = new Queryable();
// The queryable gives you another instance of
// queryable everytime you modify the queryable.
// So make sure you assign it to the variable you want.
// We'll just reassign it to queryable.
queryable = queryable.where(function(expressionBuilder){
return expressionBuilder.property("name").isEqualTo("John");
});
var array = [{name: "John"}, {name: "Jane"}];
var arrayProvider = new ArrayProvider(array);
queryable.provider = arrayProvider;
queryable.toArray().then(function(array){
console.log(array.length); // --> 1
});
});
This example is silly because most of the time its not a local array you are trying to query. But just know that you can switch that provider at anytime and not change any of the existing code.
Queryables are not tightly coupled to their providers. So you can assign new providers on the fly and the queryable will try to get the values from the new provider.
#Instance Methods
This allows you to filter your result set with the expression builder.
queryable.where(filter: Function) --> queryable
var queryable = new Queryable();
queryable.where(function(expressionBuilder){
return expresssionBuilder.property("name").isEqualTo("Jared");
});
This allows you to order your result set by a property using the expression builder. The queryable.orderBy is ascending (A-Z). See queryable.orderByDesc to order the result set descending.
queryable.orderBy(propertySelector: Function) --> queryable
var queryable = new Queryable();
queryable.orderBy(function(expressionBuilder){
return expresssionBuilder.property("name");
});
This allows you to order your result set by a property using the expression builder. This orders your result set descending (Z-A).
queryable.orderBy(propertySelector: Function) --> queryable
var queryable = new Queryable();
queryable.orderByDesc(function(expressionBuilder){
return expresssionBuilder.property("name");
});
This allows you to skip x amount of results from the result set.
queryable.skip(count: number) --> queryable
var queryable = new Queryable(); queryable.skip(10);
This allows you to take x amount of results from the result set. So even if there was millions of results, you may choose to only take one.
queryable.take(count: number) --> queryable
var queryable = new Queryable(); queryable.skip(10);
Here is a full list of the property comparative operators on the expression builder.
For strings, numbers, booleans, dates, null.
- isEqualTo(value)
- isNotEqualTo(value)
For strings.
- startsWith(value)
- endsWith(value)
- contains(value)
For numbers, dates.
- isGreaterThan(number)
- isGreaterThanOrEqualTo(number)
- isLessThan(number)
- isLessThanOrEqualTo(number)
For comparing to multiple values.
- isIn([1,2,3]) The property is one of these values
- isNotIn([1,2,3])
//...
queryable.where(function(expressionBuilder){
// You use expressionBuilder.or as well.
return expressionBuilder.and(
expressionBuilder.property("age").isGreaterThan(20),
expressionBuilder.property("name").isEqualTo("John")
);
});
//...
Nested.
//...
queryable.where(function(expressionBuilder){
// You use expressionBuilder.or as well.
return expressionBuilder.or(
expressionBuilder.and(
expressionBuilder.property("age").isGreaterThan(20),
expressionBuilder.property("name").isEqualTo("John"),
),
expressionBuilder.and(
expressionBuilder.property("age").isLessThan(20),
expressionBuilder.property("name").isEqualTo("Jane"),
),
);
});
//...