FROM clause establishes collections of objects that are iterated over by the remainder of the query.
The attributes of the objects in these collections are added to the name space scope for the remainder of the
FROM clause as well as for the
WHERE clause and the
SELECT projection list.
FROM clause expression must evaluate to a collection. The expression
/portfolios.keySet is valid because it evaluates to a
/portfolios.name, which evaluates to a
String , causes an exception to be thrown.
Like the SQL query, which iterates over the tables named in its
FROM clause, the
OQL query iterates over the
Collections established in its
In the following query,
positions.values evaluates to a
positions is a Map, and the method values on
Map returns a
IMPORT javaobject.Position; SELECT DISTINCT "type" FROM /portfolios, positions.values posnVal TYPE Position WHERE posnVal.qty > 1000.00
Every expression in the
FROM clause must evaluate to a
Collection. For a Map, the values method returns a
If positions were a List instead of a Map , this query could be used to retrieve the data:
IMPORT javaobject.Position; SELECT DISTINCT "type" FROM /portfolios, positions posnVal TYPE Position WHERE posnVal.qty >= 1000.00
A List is a
Collection, so you can access it directly or through its
For each object type accessed in your
FROM clause, use the method that returns a
Collection for that object.
Each expression in the
FROM clause can be any expression that evaluates to a
Collection. An expression in the
FROM clause is typically a path expression that resolves to a region in the cache so that the values in the region become the collection of objects to filter.
For example, this is a simple
SELECT statement that evaluates to a set of all the entry value objects of the region
/portfolios with active status. The collection of entry values provided by the
FROM clause is traversed by the
WHERE clause, which accesses each element’s status attribute for comparison.
SELECT DISTINCT * FROM /portfolios WHERE status = 'active'
FROM clause has only one expression in it, the result of the clause is the single collection that the expression evaluates to. If the clause has more than one expression in it, the result is a collection of structs that contain a member for each of those collection expressions. For example, if the
FROM clause contains three expressions that evaluate to collections
FROM clause generates a set of
struct(x1, x2, x3) where
x3 represent nested iterations over the collections specified.
If the collections are independent of each other, this
struct represents their cartesian product.
In this query, the
FROM clause produces a
portfolio and position pairs to be iterated. Each element in the struct contains the portfolio and one of its contained positions.
IMPORT javaobject.Position; SELECT DISTINCT "type" FROM /portfolios, positions TYPE Position WHERE qty > 1000.00
To understand the effects of
FROM expressions on query scope, see Drilling Down for Modifying Query Scope.