public override void SetCurrentAccess(Object groupByKey, int agentInstanceId, AggregationGroupByRollupLevel rollupLevel)
        {
            AggregationMethodPairRow row;

            if (rollupLevel.IsAggregationTop)
            {
                row = _aggregatorTopGroup;
            }
            else
            {
                row = _aggregatorsPerGroup[rollupLevel.AggregationOffset].Get(groupByKey);
            }

            if (row != null)
            {
                _currentAggregatorMethods = row.Methods;
                _currentAggregatorStates  = row.States;
            }
            else
            {
                _currentAggregatorMethods = null;
            }

            if (_currentAggregatorMethods == null)
            {
                _currentAggregatorMethods = AggSvcGroupByUtil.NewAggregators(Aggregators);
                _currentAggregatorStates  = AggSvcGroupByUtil.NewAccesses(agentInstanceId, _isJoin, _accessAggregations, groupByKey, null);
            }

            _currentGroupKey = groupByKey;
        }
예제 #2
0
        public override void ApplyEnter(EventBean[] eventsPerStream, Object groupByKey, ExprEvaluatorContext exprEvaluatorContext)
        {
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().QAggregationGroupedApplyEnterLeave(true, Aggregators.Length, AccessAggregations.Length, groupByKey);
            }
            AggregationRowPair groupAggregators = AggregatorsPerGroup.Get(groupByKey);

            // The aggregators for this group do not exist, need to create them from the prototypes
            AggregationState[] states;

            if (groupAggregators == null)
            {
                AggregationMethod[] methods = AggSvcGroupByUtil.NewAggregators(Aggregators);
                states           = AggSvcGroupByUtil.NewAccesses(exprEvaluatorContext.AgentInstanceId, IsJoin, AccessAggregations, groupByKey, null);
                groupAggregators = new AggregationRowPair(methods, states);
                AggregatorsPerGroup.Put(groupByKey, groupAggregators);
            }

            var evaluateParams = new EvaluateParams(eventsPerStream, true, exprEvaluatorContext);

            // For this row, evaluate sub-expressions, enter result
            _currentAggregatorRow = groupAggregators;
            AggregationMethod[] groupAggMethods = groupAggregators.Methods;
            for (int i = 0; i < Evaluators.Length; i++)
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QAggNoAccessEnterLeave(true, i, groupAggMethods[i], Aggregators[i].AggregationExpression);
                }
                Object columnResult = Evaluators[i].Evaluate(evaluateParams);
                groupAggMethods[i].Enter(columnResult);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AAggNoAccessEnterLeave(true, i, groupAggMethods[i]);
                }
            }

            states = _currentAggregatorRow.States;
            for (int i = 0; i < states.Length; i++)
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QAggAccessEnterLeave(true, i, states[i], AccessAggregations[i].AggregationExpression);
                }
                states[i].ApplyEnter(eventsPerStream, exprEvaluatorContext);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AAggAccessEnterLeave(true, i, states[i]);
                }
            }

            InternalHandleUpdated(groupByKey, groupAggregators);
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().AAggregationGroupedApplyEnterLeave(true);
            }
        }
 public override AggregationService MakeService(AgentInstanceContext agentInstanceContext, EngineImportService engineImportService, bool isSubquery, int?subqueryNumber)
 {
     AggregationState[] states = AggSvcGroupByUtil.NewAccesses(
         agentInstanceContext.AgentInstanceId, IsJoin, AccessAggregations, null, null);
     AggregationMethod[] aggregatorsAgentInstance = AggSvcGroupByUtil.NewAggregators(
         base.Aggregators);
     return(new AggSvcGroupAllMixedAccessImpl(
                Evaluators, aggregatorsAgentInstance, Accessors, states, base.Aggregators, AccessAggregations));
 }
예제 #4
0
 public override AggregationService MakeService(AgentInstanceContext agentInstanceContext, EngineImportService engineImportService, bool isSubquery, int?subqueryNumber)
 {
     AggregationState[] topStates = AggSvcGroupByUtil.NewAccesses(
         agentInstanceContext.AgentInstanceId, IsJoin, AccessAggregations, null, null);
     AggregationMethod[] topMethods = AggSvcGroupByUtil.NewAggregators(
         base.Aggregators);
     return(new AggSvcGroupByRefcountedWAccessRollupImpl(
                Evaluators, Aggregators, Accessors, AccessAggregations, IsJoin, GroupByRollupDesc, topMethods, topStates));
 }
예제 #5
0
        public override void SetCurrentAccess(Object groupByKey, int agentInstanceId, AggregationGroupByRollupLevel rollupLevel)
        {
            _currentAggregatorRow = _aggregatorsPerGroup.Get(groupByKey);
            _currentGroupKey      = groupByKey;

            if (_currentAggregatorRow == null)
            {
                _currentAggregatorRow = AggSvcGroupByUtil.NewAggregators(Aggregators);
                _aggregatorsPerGroup.Put(groupByKey, _currentAggregatorRow);
            }
        }
        public void ApplyLeave(
            EventBean[] eventsPerStream,
            object groupByKeyProvided,
            ExprEvaluatorContext exprEvaluatorContext)
        {
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().QAggregationGroupedApplyEnterLeave(false, LocalGroupByPlan.NumMethods, LocalGroupByPlan.NumAccess, groupByKeyProvided);
            }

            if (LocalGroupByPlan.OptionalLevelTop != null)
            {
                if (AggregatorsTopLevel == null)
                {
                    AggregatorsTopLevel = AggSvcGroupByUtil.NewAggregators(LocalGroupByPlan.OptionalLevelTop.MethodFactories);
                    StatesTopLevel      = AggSvcGroupByUtil.NewAccesses(exprEvaluatorContext.AgentInstanceId, IsJoin, LocalGroupByPlan.OptionalLevelTop.StateFactories, null, null);
                }
                AggregateIntoLeave(
                    LocalGroupByPlan.OptionalLevelTop, AggregatorsTopLevel, StatesTopLevel, eventsPerStream,
                    exprEvaluatorContext);
                InternalHandleUpdatedTop();
            }

            for (var levelNum = 0; levelNum < LocalGroupByPlan.AllLevels.Length; levelNum++)
            {
                var level         = LocalGroupByPlan.AllLevels[levelNum];
                var partitionEval = level.PartitionEvaluators;
                var groupByKey    = ComputeGroupKey(
                    level, groupByKeyProvided, partitionEval, eventsPerStream, true, exprEvaluatorContext);
                var row = AggregatorsPerLevelAndGroup[levelNum].Get(groupByKey);
                if (row == null)
                {
                    var rowAggregators           = AggSvcGroupByUtil.NewAggregators(level.MethodFactories);
                    AggregationState[] rowStates = AggSvcGroupByUtil.NewAccesses(exprEvaluatorContext.AgentInstanceId, IsJoin, level.StateFactories, groupByKey, null);
                    row = new AggregationMethodPairRow(1, rowAggregators, rowStates);
                    AggregatorsPerLevelAndGroup[levelNum].Put(groupByKey, row);
                }
                else
                {
                    row.DecreaseRefcount();
                    if (row.Refcount <= 0)
                    {
                        RemovedKeys.Add(new Pair <int, object>(levelNum, groupByKey));
                    }
                }
                AggregateIntoLeave(level, row.Methods, row.States, eventsPerStream, exprEvaluatorContext);
                InternalHandleUpdatedGroup(levelNum, groupByKey, row);
            }
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().AAggregationGroupedApplyEnterLeave(false);
            }
        }
        private AggregationState[] GetAssertRow(int agentInstanceId, Object groupKey)
        {
            AggregationState[] row = _accessMap.Get(groupKey);
            if (row != null)
            {
                return(row);
            }

            row = AggSvcGroupByUtil.NewAccesses(agentInstanceId, _isJoin, _accessAggSpecs, groupKey, null);
            _accessMap.Put(groupKey, row);
            return(row);
        }
        public override void ApplyLeave(EventBean[] eventsPerStream, Object groupByKey, ExprEvaluatorContext exprEvaluatorContext)
        {
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().QAggregationGroupedApplyEnterLeave(false, Aggregators.Length, 0, groupByKey);
            }
            var row = _aggregatorsPerGroup.Get(groupByKey);

            // The aggregators for this group do not exist, need to create them from the prototypes
            AggregationMethod[] groupAggregators;
            if (row != null)
            {
                groupAggregators = row.Methods;
            }
            else
            {
                groupAggregators = AggSvcGroupByUtil.NewAggregators(Aggregators);
                row = new AggregationMethodRow(1, groupAggregators);
                _aggregatorsPerGroup[groupByKey] = row;
            }

            var evaluateParams = new EvaluateParams(eventsPerStream, false, exprEvaluatorContext);

            // For this row, evaluate sub-expressions, enter result
            _currentAggregatorRow = groupAggregators;

            var evaluators       = Evaluators;
            var evaluatorsLength = evaluators.Length;

            for (var ii = 0; ii < evaluatorsLength; ii++)
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QAggNoAccessEnterLeave(false, ii, groupAggregators[ii], Aggregators[ii].AggregationExpression);
                }
                groupAggregators[ii].Leave(evaluators[ii].Evaluate(evaluateParams));
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AAggNoAccessEnterLeave(false, ii, groupAggregators[ii]);
                }
            }

            row.DecreaseRefcount();
            if (row.Refcount <= 0)
            {
                _removedKeys.Add(groupByKey);
            }
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().AAggregationGroupedApplyEnterLeave(false);
            }
        }
예제 #9
0
        public override void SetCurrentAccess(Object groupByKey, int agentInstanceId, AggregationGroupByRollupLevel rollupLevel)
        {
            _currentAggregatorRow = AggregatorsPerGroup.Get(groupByKey);
            _currentGroupKey      = groupByKey;

            if (_currentAggregatorRow == null)
            {
                AggregationMethod[] methods = AggSvcGroupByUtil.NewAggregators(Aggregators);
                AggregationState[]  states  = AggSvcGroupByUtil.NewAccesses(agentInstanceId, IsJoin, AccessAggregations, groupByKey, null);
                _currentAggregatorRow = new AggregationRowPair(methods, states);
                AggregatorsPerGroup.Put(groupByKey, _currentAggregatorRow);
            }
        }
        public override void SetCurrentAccess(Object groupByKey, int agentInstanceId, AggregationGroupByRollupLevel rollupLevel)
        {
            var row = _aggregatorsPerGroup.Get(groupByKey);

            if (row != null)
            {
                _currentAggregatorRow = row.Methods;
            }
            else
            {
                _currentAggregatorRow = null;
            }

            if (_currentAggregatorRow == null)
            {
                _currentAggregatorRow = AggSvcGroupByUtil.NewAggregators(Aggregators);
            }
            _currentGroupKey = groupByKey;
        }
예제 #11
0
        public override void ApplyLeave(
            EventBean[] eventsPerStream,
            Object groupByKey,
            ExprEvaluatorContext exprEvaluatorContext)
        {
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().QAggregationGroupedApplyEnterLeave(false, Aggregators.Length, 0, groupByKey);
            }
            var groupAggregators = _aggregatorsPerGroup.Get(groupByKey);

            // The aggregators for this group do not exist, need to create them from the prototypes
            if (groupAggregators == null)
            {
                groupAggregators = AggSvcGroupByUtil.NewAggregators(Aggregators);
                _aggregatorsPerGroup.Put(groupByKey, groupAggregators);
            }

            var evaluateParams = new EvaluateParams(eventsPerStream, false, exprEvaluatorContext);

            // For this row, evaluate sub-expressions, enter result
            _currentAggregatorRow = groupAggregators;
            for (var i = 0; i < Evaluators.Length; i++)
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QAggNoAccessEnterLeave(false, i, groupAggregators[i], Aggregators[i].AggregationExpression);
                }
                var columnResult = Evaluators[i].Evaluate(evaluateParams);
                groupAggregators[i].Leave(columnResult);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AAggNoAccessEnterLeave(false, i, groupAggregators[i]);
                }
            }
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().AAggregationGroupedApplyEnterLeave(false);
            }
        }
예제 #12
0
        public override void SetCurrentAccess(Object groupByKey, int agentInstanceId, AggregationGroupByRollupLevel rollupLevel)
        {
            var row = AggregatorsPerGroup.Get(groupByKey);

            if (row != null)
            {
                _currentAggregatorMethods = row.Methods;
                _currentAggregatorStates  = row.States;
            }
            else
            {
                _currentAggregatorMethods = null;
            }

            if (_currentAggregatorMethods == null)
            {
                _currentAggregatorMethods = AggSvcGroupByUtil.NewAggregators(Aggregators);
                _currentAggregatorStates  = AggSvcGroupByUtil.NewAccesses(agentInstanceId, IsJoin, AccessAggregations, groupByKey, null);
            }

            _currentGroupKey = groupByKey;
        }
        public override void SetCurrentAccess(object groupByKey, int agentInstanceId, AggregationGroupByRollupLevel rollupLevel)
        {
            if (!LocalGroupByPlan.AllLevels[0].IsDefaultLevel)
            {
                return;
            }
            var row = AggregatorsPerLevelAndGroup[0].Get(groupByKey);

            if (row != null)
            {
                _currentAggregatorMethods = row.Methods;
                _currentAggregatorStates  = row.States;
            }
            else
            {
                _currentAggregatorMethods = null;
            }

            if (_currentAggregatorMethods == null)
            {
                _currentAggregatorMethods = AggSvcGroupByUtil.NewAggregators(LocalGroupByPlan.AllLevels[0].MethodFactories);
                _currentAggregatorStates  = AggSvcGroupByUtil.NewAccesses(agentInstanceId, IsJoin, LocalGroupByPlan.AllLevels[0].StateFactories, groupByKey, null);
            }
        }
예제 #14
0
 public override AggregationService MakeService(AgentInstanceContext agentInstanceContext, EngineImportService engineImportService, bool isSubquery, int?subqueryNumber)
 {
     AggregationMethod[] aggregatorsAgentInstance = AggSvcGroupByUtil.NewAggregators(
         base.Aggregators);
     return(new AggSvcGroupAllNoAccessImpl(Evaluators, aggregatorsAgentInstance, Aggregators));
 }
        public override void ApplyEnter(EventBean[] eventsPerStream, Object compositeGroupKey, ExprEvaluatorContext exprEvaluatorContext)
        {
            HandleRemovedKeys();

            var evaluateParams = new EvaluateParams(eventsPerStream, true, exprEvaluatorContext);

            for (var i = 0; i < Evaluators.Length; i++)
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QAggregationGroupedRollupEvalParam(true, _methodParameterValues.Length);
                }
                _methodParameterValues[i] = Evaluators[i].Evaluate(evaluateParams);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AAggregationGroupedRollupEvalParam(_methodParameterValues[i]);
                }
            }

            var groupKeyPerLevel = (Object[])compositeGroupKey;

            for (var i = 0; i < groupKeyPerLevel.Length; i++)
            {
                var level    = _rollupLevelDesc.Levels[i];
                var groupKey = groupKeyPerLevel[i];

                AggregationMethodPairRow row;
                if (!level.IsAggregationTop)
                {
                    row = _aggregatorsPerGroup[level.AggregationOffset].Get(groupKey);
                }
                else
                {
                    row = _aggregatorTopGroup;
                }

                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QAggregationGroupedApplyEnterLeave(true, Aggregators.Length, _accessAggregations.Length, groupKey);
                }

                // The aggregators for this group do not exist, need to create them from the prototypes
                AggregationMethod[] groupAggregators;
                AggregationState[]  groupStates;
                if (row == null)
                {
                    groupAggregators = AggSvcGroupByUtil.NewAggregators(Aggregators);
                    groupStates      = AggSvcGroupByUtil.NewAccesses(exprEvaluatorContext.AgentInstanceId, _isJoin, _accessAggregations, groupKey, null);
                    row = new AggregationMethodPairRow(1, groupAggregators, groupStates);
                    if (!level.IsAggregationTop)
                    {
                        _aggregatorsPerGroup[level.AggregationOffset].Put(groupKey, row);
                    }
                }
                else
                {
                    groupAggregators = row.Methods;
                    groupStates      = row.States;
                    row.IncreaseRefcount();
                }

                // For this row, evaluate sub-expressions, enter result
                _currentAggregatorMethods = groupAggregators;
                _currentAggregatorStates  = groupStates;
                for (var j = 0; j < Evaluators.Length; j++)
                {
                    if (InstrumentationHelper.ENABLED)
                    {
                        InstrumentationHelper.Get().QAggNoAccessEnterLeave(true, j, groupAggregators[j], Aggregators[j].AggregationExpression);
                    }
                    groupAggregators[j].Enter(_methodParameterValues[j]);
                    if (InstrumentationHelper.ENABLED)
                    {
                        InstrumentationHelper.Get().AAggNoAccessEnterLeave(true, j, groupAggregators[j]);
                    }
                }

                for (var j = 0; j < _currentAggregatorStates.Length; j++)
                {
                    if (InstrumentationHelper.ENABLED)
                    {
                        InstrumentationHelper.Get().QAggAccessEnterLeave(true, j, _currentAggregatorStates[j], _accessAggregations[j].AggregationExpression);
                    }
                    _currentAggregatorStates[j].ApplyEnter(eventsPerStream, exprEvaluatorContext);
                    if (InstrumentationHelper.ENABLED)
                    {
                        InstrumentationHelper.Get().AAggAccessEnterLeave(true, j, _currentAggregatorStates[j]);
                    }
                }

                InternalHandleGroupUpdate(groupKey, row, level);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AAggregationGroupedApplyEnterLeave(true);
                }
            }
        }
예제 #16
0
        public override void ApplyLeave(
            EventBean[] eventsPerStream,
            Object groupByKey,
            ExprEvaluatorContext exprEvaluatorContext)
        {
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().QAggregationGroupedApplyEnterLeave(false, base.Aggregators.Length, _accessAggregations.Length, groupByKey);
            }
            var row         = _aggregatorsPerGroup.Get(groupByKey);
            var currentTime = exprEvaluatorContext.TimeProvider.Time;

            // The aggregators for this group do not exist, need to create them from the prototypes
            AggregationMethod[] groupAggregators;
            AggregationState[]  groupStates;
            if (row != null)
            {
                groupAggregators = row.Methods;
                groupStates      = row.States;
            }
            else
            {
                groupAggregators = AggSvcGroupByUtil.NewAggregators(base.Aggregators);
                groupStates      = AggSvcGroupByUtil.NewAccesses(
                    exprEvaluatorContext.AgentInstanceId, _isJoin, _accessAggregations, groupByKey, null);
                row = new AggregationMethodRowAged(1, currentTime, groupAggregators, groupStates);
                _aggregatorsPerGroup.Put(groupByKey, row);
            }

            // For this row, evaluate sub-expressions, enter result
            _currentAggregatorMethods = groupAggregators;
            _currentAggregatorStates  = groupStates;
            var evaluateParams = new EvaluateParams(eventsPerStream, false, exprEvaluatorContext);

            for (var i = 0; i < base.Evaluators.Length; i++)
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QAggNoAccessEnterLeave(false, i, _currentAggregatorMethods[i], base.Aggregators[i].AggregationExpression);
                }
                var columnResult = base.Evaluators[i].Evaluate(evaluateParams);
                groupAggregators[i].Leave(columnResult);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AAggNoAccessEnterLeave(false, i, _currentAggregatorMethods[i]);
                }
            }

            for (var i = 0; i < _currentAggregatorStates.Length; i++)
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QAggAccessEnterLeave(false, i, _currentAggregatorStates[i], _accessAggregations[i].AggregationExpression);
                }
                _currentAggregatorStates[i].ApplyLeave(eventsPerStream, exprEvaluatorContext);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AAggAccessEnterLeave(false, i, _currentAggregatorStates[i]);
                }
            }

            row.DecreaseRefcount();
            row.LastUpdateTime = currentTime;
            if (row.Refcount <= 0)
            {
                _removedKeys.Add(groupByKey);
            }
            InternalHandleUpdated(groupByKey, row);
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().AAggregationGroupedApplyEnterLeave(false);
            }
        }
예제 #17
0
        public override void ApplyEnter(
            EventBean[] eventsPerStream,
            Object groupByKey,
            ExprEvaluatorContext exprEvaluatorContext)
        {
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().QAggregationGroupedApplyEnterLeave(true, base.Aggregators.Length, _accessAggregations.Length, groupByKey);
            }
            var currentTime = exprEvaluatorContext.TimeProvider.Time;

            if ((_nextSweepTime == null) || (_nextSweepTime <= currentTime))
            {
                _currentMaxAge           = GetMaxAge(_currentMaxAge);
                _currentReclaimFrequency = GetReclaimFrequency(_currentReclaimFrequency);
                if ((ExecutionPathDebugLog.IsEnabled) && (Log.IsDebugEnabled))
                {
                    Log.Debug(
                        "Reclaiming groups older then " + _currentMaxAge + " msec and every " + _currentReclaimFrequency +
                        "msec in frequency");
                }
                _nextSweepTime = currentTime + _currentReclaimFrequency;
                Sweep(currentTime, _currentMaxAge);
            }

            HandleRemovedKeys();
            // we collect removed keys lazily on the next enter to reduce the chance of empty-group queries creating empty aggregators temporarily

            var row = _aggregatorsPerGroup.Get(groupByKey);

            // The aggregators for this group do not exist, need to create them from the prototypes
            AggregationMethod[] groupAggregators;
            AggregationState[]  groupStates;
            if (row == null)
            {
                groupAggregators = AggSvcGroupByUtil.NewAggregators(base.Aggregators);
                groupStates      = AggSvcGroupByUtil.NewAccesses(
                    exprEvaluatorContext.AgentInstanceId, _isJoin, _accessAggregations, groupByKey, null);
                row = new AggregationMethodRowAged(1, currentTime, groupAggregators, groupStates);
                _aggregatorsPerGroup.Put(groupByKey, row);
            }
            else
            {
                groupAggregators = row.Methods;
                groupStates      = row.States;
                row.IncreaseRefcount();
                row.LastUpdateTime = currentTime;
            }

            // For this row, evaluate sub-expressions, enter result
            _currentAggregatorMethods = groupAggregators;
            _currentAggregatorStates  = groupStates;
            var evaluateParams = new EvaluateParams(eventsPerStream, true, exprEvaluatorContext);

            for (var i = 0; i < base.Evaluators.Length; i++)
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QAggNoAccessEnterLeave(true, i, _currentAggregatorMethods[i], base.Aggregators[i].AggregationExpression);
                }
                var columnResult = base.Evaluators[i].Evaluate(evaluateParams);
                groupAggregators[i].Enter(columnResult);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AAggNoAccessEnterLeave(true, i, _currentAggregatorMethods[i]);
                }
            }

            for (var i = 0; i < _currentAggregatorStates.Length; i++)
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QAggAccessEnterLeave(true, i, _currentAggregatorStates[i], _accessAggregations[i].AggregationExpression);
                }
                _currentAggregatorStates[i].ApplyEnter(eventsPerStream, exprEvaluatorContext);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AAggAccessEnterLeave(true, i, _currentAggregatorStates[i]);
                }
            }

            InternalHandleUpdated(groupByKey, row);
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().AAggregationGroupedApplyEnterLeave(true);
            }
        }
예제 #18
0
        public override void ApplyEnter(EventBean[] eventsPerStream, Object groupByKey, ExprEvaluatorContext exprEvaluatorContext)
        {
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().QAggregationGroupedApplyEnterLeave(true, Aggregators.Length, AccessAggregations.Length, groupByKey);
            }
            HandleRemovedKeys();

            var row = AggregatorsPerGroup.Get(groupByKey);

            // The aggregators for this group do not exist, need to create them from the prototypes
            AggregationMethod[] groupAggregators;
            AggregationState[]  groupStates;
            if (row == null)
            {
                groupAggregators = AggSvcGroupByUtil.NewAggregators(Aggregators);
                groupStates      = AggSvcGroupByUtil.NewAccesses(exprEvaluatorContext.AgentInstanceId, IsJoin, AccessAggregations, groupByKey, null);
                row = new AggregationMethodPairRow(1, groupAggregators, groupStates);
                AggregatorsPerGroup.Put(groupByKey, row);
            }
            else
            {
                groupAggregators = row.Methods;
                groupStates      = row.States;
                row.IncreaseRefcount();
            }

            var evaluateParams = new EvaluateParams(eventsPerStream, true, exprEvaluatorContext);

            // For this row, evaluate sub-expressions, enter result
            _currentAggregatorMethods = groupAggregators;
            _currentAggregatorStates  = groupStates;
            for (var j = 0; j < Evaluators.Length; j++)
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QAggNoAccessEnterLeave(true, j, groupAggregators[j], Aggregators[j].AggregationExpression);
                }
                var columnResult = Evaluators[j].Evaluate(evaluateParams);
                groupAggregators[j].Enter(columnResult);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AAggNoAccessEnterLeave(true, j, groupAggregators[j]);
                }
            }

            for (var i = 0; i < _currentAggregatorStates.Length; i++)
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().QAggAccessEnterLeave(true, i, _currentAggregatorStates[i], AccessAggregations[i].AggregationExpression);
                }
                _currentAggregatorStates[i].ApplyEnter(eventsPerStream, exprEvaluatorContext);
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AAggAccessEnterLeave(true, i, _currentAggregatorStates[i]);
                }
            }

            InternalHandleGroupUpdate(groupByKey, row);
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().AAggregationGroupedApplyEnterLeave(true);
            }
        }
예제 #19
0
 public AggregationService MakeService(AgentInstanceContext agentInstanceContext, EngineImportService engineImportService, bool isSubquery, int?subqueryNumber)
 {
     AggregationState[] states = AggSvcGroupByUtil.NewAccesses(agentInstanceContext.AgentInstanceId, IsJoin, AccessAggSpecs, null, null);
     return(new AggSvcGroupAllAccessOnlyImpl(Accessors, states, AccessAggSpecs));
 }