Querying Data


Selector Built-in Functions

These functions are available via the object's namespace, e.g. Person:{function}.

They can be used to read sets of data from the persistence layer. The final four in the table below (union, diff, intersect, and and) can be used to build up a complex selector using a combination of other selector BIFs as parameters. The other selectors all take an object's attribute as first parameter, and one or more values as the next parameter(s).


FunctionSyntaxDescriptionExample
allObj:all()Returns all records from the table.Person[] plist = Person:all();
equalsObj:equals(a,b)

Returns records with value of a equal to b.

Person[] plist = Person:equals(deleted, false);
notEqualsObj:notEquals(a,b)Returns records with value of a not equal to b.Person[] plist = Person:notEquals(deleted, true);
emptyObj:empty(a)Returns records with a equal to null.Person[] plist = Person:empty(mobileNum);
notEmptyObj:notEmpty(a)Returns records with a not equal to null.Person[] plist = Person:notEmpty(mobileNum);
betweenObj:between(a,x,y)Returns records with value of a within the range of values between x and y.Person[] plist = Person:between(dob, date1, date2);
notBetweenObj:notBetween(a,x,y)Returns records with value of a not within the range of values between x and y.Person[] plist = Person:notBetween(dob, date1, date2);
lessThanOrEqual
Obj:lessThanOrEqual(a,b)Returns records with value of a less than or equal to b.Person[] plist = Person:lessThanOrEqual(age, num);
lessThanObj:lessThan(a,b)Returns records with value of a less than b.Person[] plist = Person:lessThan(age, num);
greaterThanObj:greaterThan(a,b)Returns records with value of a greater than b.Person[] plist = Person:greaterThan(age, num);
attributeInObj:attributeIn(a,b)Returns records with value of a matching any of the values b (replace b with a list of values of the same type as a).Person[] plist = Person:attributeIn(state, state_list);
notAttributeInObj:notAttributeIn(a,b)Returns records with value of a not matching any of the values b (replace b with a list of values of the same type as a).Person[] plist = Person:notAttributeIn(state, state_list);
relationshipInObj:relationshipIn(a,b)Returns records with a relationship/link between a and b, with attribute a being annotated as @OneToMany, @ManyToOne, etc. and b a persistent object instance. Attribute a can be likened to a foreign key.Person[] plist = Person:relationshipIn(reportsTo, person);
notRelationshipInObj:notRelationshipIn(a,b)Returns records without a relationship/link between a and b, with attribute a being annotated as  @OneToMany, @ManyToOne, etc. and b a persistent object instance. Attribute a can be likened to a foreign key.Person[] plist = Person:notRelationshipIn(reportsTo, person);
containsObj:contains(a,b)Returns records with substring b found anywhere within value of a.Person[] plist = Person:contains(name, "a");
beginsWithObj:beginsWith(a,b)Returns records with substring b found at the beginning of the value of a.Person[] plist = Person:beginsWith(name, "a");
endsWithObj:endsWith(a,b)Returns records with substring b found at the end of the value of a.Person[] plist = Person:endsWith(name, "a");
notContainsObj:notContains(a,b)Returns records with substring b found nowhere within value of a.Person[] plist = Person:notContains(name, "a");
notBeginWithObj:notBeginWith(a,b)Returns records with substring b not found at the beginning of the value of a.Person[] plist = Person:notBeginWith(name, "a");
notEndsWithObj:notEndsWith(a,b)Returns records with substring b not found at the end of the value of a.Person[] plist = Person:notEndsWith(name, "a");
unionObj:union(selector1(a,b), selector2(x,y))

Combines the results of two or more selectors. Does not return the same record twice.

Person[] plist = Person:union(equals(rating, "good"), equals(rating, "excellent"));
diffObj:diff(selector1(a,b), selector2(x,y))Compares the results of two or more selectors and returns only the difference.Person[] plist = Person:diff(equals(), equals());
intersectObj:intersect(selector1(a,b), selector2(x,y))Returns records for which all the selectors are true.Person[] plist = Person:intersect(equals(deleted, false), equals(active, true));
andObj:and(selector1(a,b), selector2(x,y))Returns records for which all the selectors are true.Person[] plist = Person:and(equals(deleted, false), equals(active, true));




Data Subsets

Having populated a collection with a selector BIF, you can further refine your selection by assigning a subset of said collection to a new collection by using the select BIF. This BIF is available via the collection variable and takes one or a combination of the above selector BIFs as parameter. See the Collections for details.




Executing SQL

Helium provides functionality to execute SQL natively from the DSL. Details can be found here.