Пример #1
0
        public void ApplyEnter(EventBean[] eventsPerStream, object optionalGroupKeyPerRow, ExprEvaluatorContext exprEvaluatorContext)
        {
            // acquire table-level write lock
            ExprTableEvalLockUtil.ObtainLockUnless(_tableStateInstance.TableLevelRWLock.WriteLock, exprEvaluatorContext);

            var @event = _tableStateInstance.GetCreateRowIntoTable(null, exprEvaluatorContext);
            var row = ExprTableEvalStrategyUtil.GetRow(@event);
            var evaluateParams = new EvaluateParams(eventsPerStream, true, exprEvaluatorContext);

            if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggregationUngroupedApplyEnterLeave(true, row.Methods.Length, row.States.Length); }
            for (var i = 0; i < _methodPairs.Length; i++)
            {
                var methodPair = _methodPairs[i];
                var method = row.Methods[methodPair.TargetIndex];
                if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggNoAccessEnterLeave(true, i, method, methodPair.AggregationNode); }
                var columnResult = methodPair.Evaluator.Evaluate(evaluateParams);
                method.Enter(columnResult);
                if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggNoAccessEnterLeave(true, i, method); }
            }

            for (var i = 0; i < _targetStates.Length; i++)
            {
                var state = row.States[_targetStates[i]];
                if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QAggAccessEnterLeave(true, i, state, _accessStateExpr[i]); }
                _agents[i].ApplyEnter(eventsPerStream, exprEvaluatorContext, state);
                if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggAccessEnterLeave(true, i, state); }
            }

            _tableStateInstance.HandleRowUpdated(@event);
            if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AAggregationUngroupedApplyEnterLeave(true); }
        }