throws ExprValidationException
{
int length = spec.getAtoms().size();
EventPropertyGetter[] getters = new EventPropertyGetter[length];
FragmentEventType types[] = new FragmentEventType[length];
EventType currentEventType = sourceEventType;
ExprEvaluator whereClauses[] = new ExprEvaluator[length];
List<EventType> streamEventTypes = new ArrayList<EventType>();
List<String> streamNames = new ArrayList<String>();
Map<String, Integer> streamNameAndNumber = new HashMap<String,Integer>();
List<String> propertyNames = new ArrayList<String>();
ExprEvaluatorContext validateContext = new ExprEvaluatorContext()
{
public TimeProvider getTimeProvider()
{
return timeProvider;
}
public ExpressionResultCacheService getExpressionResultCacheService() {
return null;
}
};
streamEventTypes.add(sourceEventType);
streamNames.add(optionalSourceStreamName);
streamNameAndNumber.put(optionalSourceStreamName, 0);
propertyNames.add(sourceEventType.getName());
List<SelectClauseElementCompiled> cumulativeSelectClause = new ArrayList<SelectClauseElementCompiled>();
for (int i = 0; i < length; i++)
{
PropertyEvalAtom atom = spec.getAtoms().get(i);
// obtain property info
String propertyName = atom.getPropertyName();
FragmentEventType fragmentEventType = currentEventType.getFragmentType(propertyName);
if (fragmentEventType == null)
{
throw new ExprValidationException("Property expression '" + propertyName + "' against type '" + currentEventType.getName() + "' does not return a fragmentable property value");
}
EventPropertyGetter getter = currentEventType.getGetter(propertyName);
if (getter == null)
{
throw new ExprValidationException("Property expression '" + propertyName + "' against type '" + currentEventType.getName() + "' does not return a fragmentable property value");
}
// validate where clause, if any
streamEventTypes.add(fragmentEventType.getFragmentType());
streamNames.add(atom.getOptionalAsName());