from - FROM operands
The FROM expression defines the base for a select statement or view definition. The operands in the parameter list should result in collections and are passed as collection parameters to the FROM method.
When defining several operands in the operand list (or FROM elements in a view definition), data types for each operand become base types for the FROM data type (e.g. (Person, Company) results in an instance type containing Person and Company as base types). Base types may be referred to by base type member name, which by default is the collection name passed in the FROM operand list. By preceding the collection references with names (e.g. (pers = Person, comp = Company), one may explicitly assign base type member names.
When a FROM operand is a property path ( e.g. (Person.children.cars)), each path element becomes a base type for the FROM data type. In this case, names for base type members correspond to property names in the path.
Property path operands define an inner join operation, i.e. the path in the example above provides all children that have one or more cars and its parent. Persons that do not got children or persons with children that do not have got cars are not element of the FROM collection.
When the data source is a result of an operation, a base type name has to be defined explicitly (e.g. ( set<Person> special_per = Person.SpecialPersons("category1") ) ). One may omit the type definition, when the operation is defined as OSI function in the resource data base or in a preloaded OSI function, which provides the type in the return value definition. The type is required, when the function is implemented as C++ function supported via OSI interface.