Attribute Visibility
Within the current query scope, you can access any available object or object attribute.
In querying, an object’s attribute is any identifier that can be mapped to a public field or method in the object.
In the FROM
specification, any object that is in scope is valid, so at the beginning of a query all cached regions and their attributes on the cache server are in scope.
This query is valid because name resolves to the Region method getName
:
/portfolios.name
This query is valid because toArray
resolves to the Collection
method with the same name:
SELECT DISTINCT * FROM /portfolios.toArray
You cannot, however, refer to the attribute of a collection object in the region path expression where the collection itself is specified. The following statement is invalid because neither Collection
nor Region
contain an attribute named positions
. The entry values collection (specified by /portfolios
) that does contain an attribute named positions is not yet part of the query name space.
/* INCORRECT: positions is not an attribute of Region or of Collection */
SELECT DISTINCT * FROM /portfolios.positions
The following SELECT
statement is valid, because positions
is an element of the entry value collection that is specified by /portfolios
. The entry value collection is in scope as soon as the specification in the FROM expression is complete (before WHERE
or SELECT
are evaluated).
SELECT DISTINCT positions FROM /portfolios
You can also refer to positions inside the FROM clause after the /portfolios
entry value collection is created. In this example, positions is an element of the /portfolios
entry value collection and values is an attribute of positions:
IMPORT javaobject.Position;
SELECT DISTINCT posnVal
FROM /portfolios, positions.values posnVal TYPE Position
WHERE posnVal.mktValue >= 25.00
After the comma in the FROM clause, /portfolios
is in scope, so its value collection can be iterated. In this case, this is done with the second FROM clause specification, positions.values
.