示例#1
0
        private static void HandlePrevious(IList <ExprPreviousNode> previousRequests, Object previousNodeGetter, IDictionary <ExprPreviousNode, ExprPreviousEvalStrategy> strategies)
        {
            if (previousRequests.IsEmpty())
            {
                return;
            }

            RandomAccessByIndexGetter      randomAccessGetter   = null;
            RelativeAccessByEventNIndexMap relativeAccessGetter = null;

            if (previousNodeGetter is RandomAccessByIndexGetter)
            {
                randomAccessGetter = (RandomAccessByIndexGetter)previousNodeGetter;
            }
            else if (previousNodeGetter is RelativeAccessByEventNIndexMap)
            {
                relativeAccessGetter = (RelativeAccessByEventNIndexMap)previousNodeGetter;
            }
            else
            {
                throw new EPException("Unexpected 'previous' handler: " + previousNodeGetter);
            }

            foreach (ExprPreviousNode previousNode in previousRequests)
            {
                int streamNumber = previousNode.StreamNumber;
                ExprPreviousNodePreviousType previousType = previousNode.PreviousType;
                ExprPreviousEvalStrategy     evaluator;

                if (previousType == ExprPreviousNodePreviousType.PREVWINDOW)
                {
                    evaluator = new ExprPreviousEvalStrategyWindow(streamNumber, previousNode.ChildNodes[1].ExprEvaluator, previousNode.ReturnType.GetElementType(),
                                                                   randomAccessGetter, relativeAccessGetter);
                }
                else if (previousType == ExprPreviousNodePreviousType.PREVCOUNT)
                {
                    evaluator = new ExprPreviousEvalStrategyCount(streamNumber, randomAccessGetter, relativeAccessGetter);
                }
                else
                {
                    evaluator = new ExprPreviousEvalStrategyPrev(streamNumber, previousNode.ChildNodes[0].ExprEvaluator, previousNode.ChildNodes[1].ExprEvaluator,
                                                                 randomAccessGetter, relativeAccessGetter, previousNode.IsConstantIndex, previousNode.ConstantIndexNumber, previousType == ExprPreviousNodePreviousType.PREVTAIL);
                }

                strategies.Put(previousNode, evaluator);
            }
        }
示例#2
0
 public ExprPreviousNode(ExprPreviousNodePreviousType previousType)
 {
     _previousType = previousType;
 }