Specifying the Object Types of FROM Clause Collections

To resolve implicit attribute names, the query engine must be able to associate each attribute or method name to a single iterator expression in the FROM clause.

Depending on the complexity of the query, the engine may be able to discover the proper associations on its own, but providing the specifications described here increases the chances for success.

The server region being queried should contain only homogeneous objects of the same type. See Setting Object Type Constraints for more information.

The object type information must be available when the query is created. To provide the appropriate information to the query engine, specify the type for each of your FROM clause collection objects by importing the object’s class before running the query and typing the object inside the query. For the example region, this query is valid (all of the examples in this section assume that this IMPORT statement is provided):

Query Using IMPORT and TYPE for Object Typing

IMPORT javaobject.Position;
SELECT DISTINCT mktValue
FROM /portfolios, positions.values TYPE Position
WHERE mktValue > 25.00

This entire query string must be passed to the query engine, including the IMPORT statement. Import the object’s class before running the query and typecast the object inside the query. For the example region, both of these queries are valid:

Query Using IMPORT and Typecasting for Object Typing

IMPORT javaobject.Position;
SELECT DISTINCT value.mktValue
  FROM /portfolios, (map<string,Position>)positions
  WHERE value.mktValue > 25.00
IMPORT cacheRunner.Position;
SELECT DISTINCT mktValue
  FROM /portfolios, (collection<Position>)positions.values
  WHERE mktValue > 25.00

This entire query string must be passed to the query engine, including the IMPORT statement. Use named iterators in the FROM clause and explicitly prefix the path expression with iterator names.

Query Using Named Iterators for Object Typing

SELECT DISTINCT posnVal

FROM /portfolios pflo, pflo.positions.values posnVal

WHERE posnVal.mktValue >= 25.00

The IMPORT statements in these examples assume that the classes directory of the examples is in the CLASSPATH. This is required so the cache server can process IMPORT statements. The class’s package name cannot be used in the FROM clause. The package name must be specified in an IMPORT statement.

There is one exception to these typing guidelines. If one FROM expression lacks explicit typing, the query engine associates all unresolved attributes with that expression and creates the query. An exception is thrown if any of these attributes are not found at execution time.