コード例 #1
0
        public OutputProcessViewConditionDefault(
            ResultSetProcessor resultSetProcessor,
            long? afterConditionTime,
            int? afterConditionNumberOfEvents,
            bool afterConditionSatisfied,
            OutputProcessViewConditionFactory parent,
            AgentInstanceContext agentInstanceContext,
            bool isJoin,
            EventType[] eventTypes)
            : base(
                agentInstanceContext,
                resultSetProcessor,
                afterConditionTime,
                afterConditionNumberOfEvents,
                afterConditionSatisfied)
        {
            _parent = parent;

            var outputCallback = GetCallbackToLocal(parent.StreamCount);
            _outputCondition =
                parent.OutputConditionFactory.InstantiateOutputCondition(agentInstanceContext, outputCallback);
            OptionalDeltaSet =
                agentInstanceContext.ResultSetProcessorHelperFactory.MakeOutputConditionChangeSet(
                    eventTypes,
                    agentInstanceContext);
        }
コード例 #2
0
        public EPPreparedQueryResult Execute(
            FAFQueryMethodSelect select,
            ContextPartitionSelector[] contextPartitionSelectors,
            FAFQueryMethodAssignerSetter assignerSetter,
            ContextManagementService contextManagementService)
        {
            FireAndForgetProcessor processor = select.Processors[0];
            FireAndForgetInstance processorInstance = processor.ProcessorInstanceNoContext;

            ICollection<EventBean> events;
            AgentInstanceContext agentInstanceContext = null;
            if (processorInstance == null) {
                events = EmptyList<EventBean>.Instance;
            }
            else {
                agentInstanceContext = processorInstance.AgentInstanceContext;
                events = Snapshot(select.ConsumerFilters[0], processorInstance, select.QueryGraph, select.Annotations);
            }

            // get RSP
            ResultSetProcessor resultSetProcessor = ProcessorWithAssign(
                select.ResultSetProcessorFactoryProvider,
                agentInstanceContext,
                assignerSetter,
                select.TableAccesses,
                select.Subselects);

            if (select.WhereClause != null) {
                events = Filtered(events, select.WhereClause, agentInstanceContext);
            }

            return ProcessedNonJoin(resultSetProcessor, events, select.DistinctKeyGetter);
        }
コード例 #3
0
        /// <summary>The Update method is called if the view does not participate in a join. </summary>
        /// <param name="newData">new events</param>
        /// <param name="oldData">old events</param>
        public override void Update(EventBean[] newData, EventBean[] oldData)
        {
            if ((ExecutionPathDebugLog.IsEnabled) && (Log.IsDebugEnabled))
            {
                Log.Debug(".Update Received Update, " +
                          "  newData.Length==" + ((newData == null) ? 0 : newData.Length) +
                          "  oldData.Length==" + ((oldData == null) ? 0 : oldData.Length));
            }

            ResultSetProcessor.ApplyViewResult(newData, oldData);

            if (!CheckAfterCondition(newData, _parent.StatementContext))
            {
                return;
            }

            // add the incoming events to the event batches
            int newDataLength = 0;
            int oldDataLength = 0;

            if (newData != null)
            {
                newDataLength = newData.Length;
            }
            if (oldData != null)
            {
                oldDataLength = oldData.Length;
            }

            _outputCondition.UpdateOutputCondition(newDataLength, oldDataLength);
        }
コード例 #4
0
        /// <summary>
        /// This process (Update) method is for participation in a join.
        /// </summary>
        /// <param name="newEvents">new events</param>
        /// <param name="oldEvents">old events</param>
        /// <param name="exprEvaluatorContext">expression evaluation context</param>
        public override void Process(ISet <MultiKey <EventBean> > newEvents, ISet <MultiKey <EventBean> > oldEvents, ExprEvaluatorContext exprEvaluatorContext)
        {
            if ((ExecutionPathDebugLog.IsEnabled) && (Log.IsDebugEnabled))
            {
                Log.Debug(".process Received Update, " +
                          "  newData.Length==" + ((newEvents == null) ? 0 : newEvents.Count) +
                          "  oldData.Length==" + ((oldEvents == null) ? 0 : oldEvents.Count));
            }

            ResultSetProcessor.ApplyJoinResult(newEvents, oldEvents);

            if (!CheckAfterCondition(newEvents, _parent.StatementContext))
            {
                return;
            }

            int newEventsSize = 0;

            if (newEvents != null)
            {
                // add the incoming events to the event batches
                newEventsSize = newEvents.Count;
            }

            int oldEventsSize = 0;

            if (oldEvents != null)
            {
                oldEventsSize = oldEvents.Count;
            }

            _outputCondition.UpdateOutputCondition(newEventsSize, oldEventsSize);
        }
コード例 #5
0
 public NamedWindowConsumerPreloadAggregationJoin(
     JoinPreloadMethod joinPreloadMethod,
     ResultSetProcessor resultSetProcessor)
 {
     this._joinPreloadMethod  = joinPreloadMethod;
     this._resultSetProcessor = resultSetProcessor;
 }
コード例 #6
0
ファイル: OutputStrategyUtil.cs プロジェクト: lanicon/nesper
        /// <summary>
        ///     NOTE: Code-generation-invoked method, method name and parameter order matters
        /// </summary>
        /// <param name="joinExecutionStrategy">join strategy</param>
        /// <param name="resultSetProcessor">processor</param>
        /// <param name="parentView">view</param>
        /// <param name="distinct">flag</param>
        /// <param name="distinctKeyGetter"></param>
        /// <returns>iterator</returns>
        public static IEnumerator<EventBean> GetEnumerator(
            JoinExecutionStrategy joinExecutionStrategy,
            ResultSetProcessor resultSetProcessor,
            Viewable parentView,
            bool distinct,
            EventPropertyValueGetter distinctKeyGetter)
        {
            IEnumerator<EventBean> enumerator;
            if (joinExecutionStrategy != null) {
                var joinSet = joinExecutionStrategy.StaticJoin();
                enumerator = resultSetProcessor.GetEnumerator(joinSet);
            }
            else if (resultSetProcessor != null) {
                enumerator = resultSetProcessor.GetEnumerator(parentView);
            }
            else {
                enumerator = parentView.GetEnumerator();
            }

            if (!distinct) {
                return enumerator;
            }

            return EventDistinctEnumerator.For(enumerator, distinctKeyGetter);
        }
コード例 #7
0
        public override OutputProcessViewBase MakeView(
            ResultSetProcessor resultSetProcessor,
            AgentInstanceContext agentInstanceContext)
        {
            bool isAfterConditionSatisfied = true;
            long?afterConditionTime        = null;

            if (AfterConditionNumberOfEvents != null)
            {
                isAfterConditionSatisfied = false;
            }
            else if (AfterTimePeriod != null)
            {
                isAfterConditionSatisfied = false;
                long delta = AfterTimePeriod.NonconstEvaluator().DeltaUseEngineTime(null, agentInstanceContext);
                afterConditionTime = agentInstanceContext.StatementContext.TimeProvider.Time + delta;
            }

            if (base.PostProcessFactory == null)
            {
                return(new OutputProcessViewDirectDistinctOrAfter(
                           ResultSetProcessorHelperFactory, agentInstanceContext, resultSetProcessor, afterConditionTime,
                           AfterConditionNumberOfEvents, isAfterConditionSatisfied, this));
            }
            OutputStrategyPostProcess postProcess = PostProcessFactory.Make(agentInstanceContext);

            return(new OutputProcessViewDirectDistinctOrAfterPostProcess(
                       ResultSetProcessorHelperFactory, agentInstanceContext, resultSetProcessor, afterConditionTime,
                       AfterConditionNumberOfEvents, isAfterConditionSatisfied, this, postProcess));
        }
コード例 #8
0
        public override OnExprViewResult DetermineOnExprView(AgentInstanceContext agentInstanceContext, IList <StopCallback> stopCallbacks, bool isRecoveringResilient)
        {
            var processors = new ResultSetProcessor[_splitDesc.ProcessorFactories.Length];

            for (var i = 0; i < processors.Length; i++)
            {
                var factory   = _splitDesc.ProcessorFactories[i];
                var processor = factory.ResultSetProcessorFactory.Instantiate(null, null, agentInstanceContext);
                processors[i] = processor;
            }

            var tableStateInstances = new TableStateInstance[processors.Length];

            for (var i = 0; i < _insertIntoTableNames.Length; i++)
            {
                var tableName = _insertIntoTableNames[i];
                if (tableName != null)
                {
                    tableStateInstances[i] = agentInstanceContext.StatementContext.TableService.GetState(tableName, agentInstanceContext.AgentInstanceId);
                }
            }
            var  desc = (OnTriggerSplitStreamDesc)StatementSpec.OnTriggerDesc;
            View view = new RouteResultView(
                desc.IsFirst, _activatorResultEventType, StatementContext.EpStatementHandle,
                Services.InternalEventRouter, tableStateInstances, _splitDesc.NamedWindowInsert, processors,
                _splitDesc.WhereClauses, agentInstanceContext);

            return(new OnExprViewResult(view, null));
        }
コード例 #9
0
 public OutputProcessViewSimpleWProcessor(
     AgentInstanceContext agentInstanceContext,
     ResultSetProcessor resultSetProcessor)
 {
     this.agentInstanceContext = agentInstanceContext;
     this.resultSetProcessor = resultSetProcessor;
 }
コード例 #10
0
 public OutputProcessViewDirect(
     AgentInstanceContext agentInstanceContext,
     ResultSetProcessor resultSetProcessor)
 {
     _agentInstanceContext = agentInstanceContext;
     _resultSetProcessor = resultSetProcessor;
 }
コード例 #11
0
        public void PreloadAggregation(ResultSetProcessor resultSetProcessor)
        {
            var newEvents = _joinSetComposer.StaticJoin();
            var oldEvents = new HashSet <MultiKey <EventBean> >();

            resultSetProcessor.ProcessJoinResult(newEvents, oldEvents, false);
        }
        public override View DetermineFinalOutputView(AgentInstanceContext agentInstanceContext, View onExprView)
        {
            ResultSetProcessor outputResultSetProcessor = _outputResultSetProcessorPrototype.ResultSetProcessorFactory.Instantiate(null, null, agentInstanceContext);
            View outputView = _outputProcessViewFactory.MakeView(outputResultSetProcessor, agentInstanceContext);

            onExprView.AddView(outputView);
            return(outputView);
        }
コード例 #13
0
 public OutputProcessViewDirectPostProcess(
     AgentInstanceContext agentInstanceContext,
     ResultSetProcessor resultSetProcessor,
     OutputStrategyPostProcess postProcessor)
     : base(agentInstanceContext, resultSetProcessor)
 {
     _postProcessor = postProcessor;
 }
コード例 #14
0
 public TableOnViewBase Make(
     SubordWMatchExprLookupStrategy lookupStrategy,
     TableStateInstance tableState,
     AgentInstanceContext agentInstanceContext,
     ResultSetProcessor resultSetProcessor)
 {
     return(new TableOnMergeView(lookupStrategy, tableState, agentInstanceContext, TableMetadata, this));
 }
コード例 #15
0
        public OutputProcessViewConditionDefault(ResultSetProcessor resultSetProcessor, long?afterConditionTime, int?afterConditionNumberOfEvents, bool afterConditionSatisfied, OutputProcessViewConditionFactory parent, AgentInstanceContext agentInstanceContext)
            : base(resultSetProcessor, afterConditionTime, afterConditionNumberOfEvents, afterConditionSatisfied)
        {
            _parent = parent;
            OutputCallback outputCallback = GetCallbackToLocal(parent.StreamCount);

            _outputCondition = parent.OutputConditionFactory.Make(agentInstanceContext, outputCallback);
        }
コード例 #16
0
 public override NamedWindowOnExprBaseView Make(
     SubordWMatchExprLookupStrategy lookupStrategy,
     NamedWindowRootViewInstance namedWindowRootViewInstance,
     AgentInstanceContext agentInstanceContext,
     ResultSetProcessor resultSetProcessor)
 {
     return(new NamedWindowOnUpdateView(lookupStrategy, namedWindowRootViewInstance, agentInstanceContext, this));
 }
コード例 #17
0
ファイル: TableOnSelectView.cs プロジェクト: valmac/nesper
 public TableOnSelectView(SubordWMatchExprLookupStrategy lookupStrategy, TableStateInstance rootView, ExprEvaluatorContext exprEvaluatorContext, TableMetadata metadata,
                          TableOnSelectViewFactory parent, ResultSetProcessor resultSetProcessor, bool audit, bool deleteAndSelect)
     : base(lookupStrategy, rootView, exprEvaluatorContext, metadata, deleteAndSelect)
 {
     _parent             = parent;
     _resultSetProcessor = resultSetProcessor;
     _audit           = audit;
     _deleteAndSelect = deleteAndSelect;
 }
コード例 #18
0
 public NamedWindowOnSelectView(SubordWMatchExprLookupStrategy lookupStrategy, NamedWindowRootViewInstance rootView, ExprEvaluatorContext exprEvaluatorContext, NamedWindowOnSelectViewFactory parent, ResultSetProcessor resultSetProcessor, bool audit, bool isDelete, TableStateInstance tableStateInstanceInsertInto)
     : base(lookupStrategy, rootView, exprEvaluatorContext)
 {
     _parent             = parent;
     _resultSetProcessor = resultSetProcessor;
     _audit    = audit;
     _isDelete = isDelete;
     _tableStateInstanceInsertInto = tableStateInstanceInsertInto;
 }
コード例 #19
0
        public EPPreparedQueryResult Execute(
            FAFQueryMethodSelect select,
            ContextPartitionSelector[] contextPartitionSelectors,
            FAFQueryMethodAssignerSetter assignerSetter,
            ContextManagementService contextManagementService)
        {
            var processor = select.Processors[0];

            var singleSelector = contextPartitionSelectors != null && contextPartitionSelectors.Length > 0
                ? contextPartitionSelectors[0]
                : null;
            var agentInstanceIds = AgentInstanceIds(processor, singleSelector, contextManagementService);

            IList<ContextPartitionResult> contextPartitionResults = new List<ContextPartitionResult>();
            foreach (var agentInstanceId in agentInstanceIds) {
                var processorInstance = processor.GetProcessorInstanceContextById(agentInstanceId);
                if (processorInstance != null) {
                    var coll = processorInstance.SnapshotBestEffort(select.QueryGraph, select.Annotations);
                    contextPartitionResults.Add(
                        new ContextPartitionResult(coll, processorInstance.AgentInstanceContext));
                }
            }

            // process context partitions
            var events = new ArrayDeque<EventBean[]>();
            ResultSetProcessor resultSetProcessor = null;
            foreach (var contextPartitionResult in contextPartitionResults) {
                if (resultSetProcessor == null) {
                    resultSetProcessor = ProcessorWithAssign(
                        select.ResultSetProcessorFactoryProvider,
                        contextPartitionResult.Context,
                        assignerSetter,
                        select.TableAccesses);
                }

                var snapshot = contextPartitionResult.Events;
                if (select.WhereClause != null) {
                    snapshot = Filtered(
                        snapshot,
                        select.WhereClause,
                        contextPartitionResult.Context);
                }

                var rows = snapshot.ToArray();
                resultSetProcessor.SetAgentInstanceContext(contextPartitionResult.Context);
                var results = resultSetProcessor.ProcessViewResult(rows, null, true);
                if (results != null && results.First != null && results.First.Length > 0) {
                    events.Add(results.First);
                }
            }

            var distinct = EventBeanUtility.GetDistinctByProp(
                EventBeanUtility.Flatten(events),
                select.EventBeanReaderDistinct);
            return new EPPreparedQueryResult(select.EventType, distinct);
        }
コード例 #20
0
        private JoinPlanResult HandleJoin(
            string[] streamNames,
            Viewable[] streamViews,
            ResultSetProcessor resultSetProcessor,
            AgentInstanceContext agentInstanceContext,
            IList <StopCallback> stopCallbacks,
            StreamJoinAnalysisResult joinAnalysisResult,
            bool isRecoveringResilient)
        {
            var joinSetComposerDesc = _joinSetComposerPrototype.Create(streamViews, false, agentInstanceContext, isRecoveringResilient);

            stopCallbacks.Add(new ProxyStopCallback(() => joinSetComposerDesc.JoinSetComposer.Destroy()));

            var filter        = new JoinSetFilter(joinSetComposerDesc.PostJoinFilterEvaluator);
            var indicatorView = _outputProcessViewFactory.MakeView(resultSetProcessor, agentInstanceContext);

            // Create strategy for join execution
            JoinExecutionStrategy execution = new JoinExecutionStrategyImpl(joinSetComposerDesc.JoinSetComposer, filter, indicatorView, agentInstanceContext);

            // The view needs a reference to the join execution to pull iterator values
            indicatorView.JoinExecutionStrategy = execution;

            // Hook up dispatchable with buffer and execution strategy
            var joinStatementDispatch = new JoinExecStrategyDispatchable(execution, _statementSpec.StreamSpecs.Length);

            agentInstanceContext.EpStatementAgentInstanceHandle.OptionalDispatchable = joinStatementDispatch;

            JoinPreloadMethod preloadMethod;

            if (joinAnalysisResult.UnidirectionalStreamNumber >= 0)
            {
                preloadMethod = new JoinPreloadMethodNull();
            }
            else
            {
                if (!joinSetComposerDesc.JoinSetComposer.AllowsInit)
                {
                    preloadMethod = new JoinPreloadMethodNull();
                }
                else
                {
                    preloadMethod = new JoinPreloadMethodImpl(streamNames.Length, joinSetComposerDesc.JoinSetComposer);
                }
            }

            // Create buffer for each view. Point buffer to dispatchable for join.
            for (var i = 0; i < _statementSpec.StreamSpecs.Length; i++)
            {
                var buffer = new BufferView(i);
                streamViews[i].AddView(buffer);
                buffer.Observer = joinStatementDispatch;
                preloadMethod.SetBuffer(buffer, i);
            }

            return(new JoinPlanResult(indicatorView, preloadMethod, joinSetComposerDesc));
        }
コード例 #21
0
        public virtual OutputProcessViewBase MakeView(ResultSetProcessor resultSetProcessor, AgentInstanceContext agentInstanceContext)
        {
            if (PostProcessFactory == null)
            {
                return(new OutputProcessViewDirect(resultSetProcessor, this));
            }
            OutputStrategyPostProcess postProcess = PostProcessFactory.Make(agentInstanceContext);

            return(new OutputProcessViewDirectPostProcess(resultSetProcessor, this, postProcess));
        }
コード例 #22
0
        public OutputProcessViewConditionLastAllUnord(ResultSetProcessor resultSetProcessor, long?afterConditionTime, int?afterConditionNumberOfEvents, bool afterConditionSatisfied, OutputProcessViewConditionFactory parent, AgentInstanceContext agentInstanceContext)
            : base(resultSetProcessor, afterConditionTime, afterConditionNumberOfEvents, afterConditionSatisfied)
        {
            _parent = parent;
            _isAll  = parent.OutputLimitLimitType == OutputLimitLimitType.ALL;

            var outputCallback = GetCallbackToLocal(parent.StreamCount);

            _outputCondition = parent.OutputConditionFactory.Make(agentInstanceContext, outputCallback);
        }
コード例 #23
0
 protected OutputProcessViewBaseWAfter(ResultSetProcessor resultSetProcessor,
                                       long?afterConditionTime,
                                       int?afterConditionNumberOfEvents,
                                       bool afterConditionSatisfied)
     : base(resultSetProcessor)
 {
     _afterConditionTime           = afterConditionTime;
     _afterConditionNumberOfEvents = afterConditionNumberOfEvents;
     IsAfterConditionSatisfied     = afterConditionSatisfied;
 }
コード例 #24
0
        public override OutputProcessViewBase MakeView(ResultSetProcessor resultSetProcessor, AgentInstanceContext agentInstanceContext)
        {
            // determine after-stuff
            bool isAfterConditionSatisfied    = true;
            long?afterConditionTime           = null;
            var  afterConditionNumberOfEvents = AfterConditionNumberOfEvents;

            if (afterConditionNumberOfEvents != null)
            {
                isAfterConditionSatisfied = false;
            }
            else if (AfterTimePeriod != null)
            {
                isAfterConditionSatisfied = false;
                long delta = AfterTimePeriod.NonconstEvaluator().DeltaMillisecondsUseEngineTime(null, agentInstanceContext);
                afterConditionTime = agentInstanceContext.StatementContext.TimeProvider.Time + delta;
            }

            if (_conditionType == ConditionType.SNAPSHOT)
            {
                if (base.PostProcessFactory == null)
                {
                    return(new OutputProcessViewConditionSnapshot(_resultSetProcessorHelperFactory, resultSetProcessor, afterConditionTime, afterConditionNumberOfEvents, isAfterConditionSatisfied, this, agentInstanceContext));
                }
                OutputStrategyPostProcess postProcess = PostProcessFactory.Make(agentInstanceContext);
                return(new OutputProcessViewConditionSnapshotPostProcess(_resultSetProcessorHelperFactory, resultSetProcessor, afterConditionTime, afterConditionNumberOfEvents, isAfterConditionSatisfied, this, agentInstanceContext, postProcess));
            }
            else if (_conditionType == ConditionType.POLICY_FIRST)
            {
                if (base.PostProcessFactory == null)
                {
                    return(new OutputProcessViewConditionFirst(_resultSetProcessorHelperFactory, resultSetProcessor, afterConditionTime, afterConditionNumberOfEvents, isAfterConditionSatisfied, this, agentInstanceContext));
                }
                OutputStrategyPostProcess postProcess = PostProcessFactory.Make(agentInstanceContext);
                return(new OutputProcessViewConditionFirstPostProcess(_resultSetProcessorHelperFactory, resultSetProcessor, afterConditionTime, afterConditionNumberOfEvents, isAfterConditionSatisfied, this, agentInstanceContext, postProcess));
            }
            else if (_conditionType == ConditionType.POLICY_LASTALL_UNORDERED)
            {
                if (base.PostProcessFactory == null)
                {
                    return(new OutputProcessViewConditionLastAllUnord(_resultSetProcessorHelperFactory, resultSetProcessor, afterConditionTime, afterConditionNumberOfEvents, isAfterConditionSatisfied, this, agentInstanceContext));
                }
                OutputStrategyPostProcess postProcess = PostProcessFactory.Make(agentInstanceContext);
                return(new OutputProcessViewConditionLastAllUnordPostProcessAll(_resultSetProcessorHelperFactory, resultSetProcessor, afterConditionTime, afterConditionNumberOfEvents, isAfterConditionSatisfied, this, agentInstanceContext, postProcess));
            }
            else
            {
                if (base.PostProcessFactory == null)
                {
                    return(new OutputProcessViewConditionDefault(_resultSetProcessorHelperFactory, resultSetProcessor, afterConditionTime, afterConditionNumberOfEvents, isAfterConditionSatisfied, this, agentInstanceContext, StreamCount > 1));
                }
                OutputStrategyPostProcess postProcess = PostProcessFactory.Make(agentInstanceContext);
                return(new OutputProcessViewConditionDefaultPostProcess(resultSetProcessor, afterConditionTime, afterConditionNumberOfEvents, isAfterConditionSatisfied, this, agentInstanceContext, postProcess, StreamCount > 1, _resultSetProcessorHelperFactory));
            }
        }
コード例 #25
0
 public OutputProcessViewDirectDistinctOrAfter(
     ResultSetProcessorHelperFactory resultSetProcessorHelperFactory,
     AgentInstanceContext agentInstanceContext,
     ResultSetProcessor resultSetProcessor,
     long?afterConditionTime,
     int?afterConditionNumberOfEvents,
     bool afterConditionSatisfied,
     OutputProcessViewDirectDistinctOrAfterFactory parent)
     : base(resultSetProcessorHelperFactory, agentInstanceContext, resultSetProcessor, afterConditionTime, afterConditionNumberOfEvents, afterConditionSatisfied)
 {
     _parent = parent;
 }
コード例 #26
0
        /// <summary>
        /// Called once the output condition has been met.
        /// Invokes the result set processor.
        /// Used for non-join event data.
        /// </summary>
        /// <param name="doOutput">true if the batched events should actually be output as well as processed, false if they should just be processed</param>
        /// <param name="forceUpdate">true if output should be made even when no updating events have arrived</param>
        internal virtual void ContinueOutputProcessingView(bool doOutput, bool forceUpdate)
        {
            if ((ExecutionPathDebugLog.IsEnabled) && (Log.IsDebugEnabled))
            {
                Log.Debug(".continueOutputProcessingView");
            }

            var isGenerateSynthetic = _parent.StatementResultService.IsMakeSynthetic;
            var newOldEvents        = ResultSetProcessor.ContinueOutputLimitedLastAllNonBufferedView(isGenerateSynthetic, _isAll);

            ContinueOutputProcessingViewAndJoin(doOutput, forceUpdate, newOldEvents);
        }
コード例 #27
0
 public OutputProcessViewConditionDefaultPostProcess(ResultSetProcessor resultSetProcessor,
                                                     long?afterConditionTime,
                                                     int?afterConditionNumberOfEvents,
                                                     bool afterConditionSatisfied,
                                                     OutputProcessViewConditionFactory parent,
                                                     AgentInstanceContext agentInstanceContext,
                                                     OutputStrategyPostProcess postProcessor)
     : base(
         resultSetProcessor, afterConditionTime, afterConditionNumberOfEvents, afterConditionSatisfied, parent,
         agentInstanceContext)
 {
     _postProcessor = postProcessor;
 }
コード例 #28
0
        /// <summary>
        /// Called once the output condition has been met.
        /// Invokes the result set processor.
        /// Used for join event data.
        /// </summary>
        /// <param name="doOutput">- true if the batched events should actually be output as well as processed, false if they should just be processed</param>
        /// <param name="forceUpdate">- true if output should be made even when no updating events have arrived</param>
        protected void ContinueOutputProcessingJoin(bool doOutput, bool forceUpdate)
        {
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().QOutputRateConditionOutputNow();
            }

            if ((ExecutionPathDebugLog.IsEnabled) && (Log.IsDebugEnabled))
            {
                Log.Debug(".continueOutputProcessingJoin");
            }

            bool isGenerateSynthetic = _parent.StatementResultService.IsMakeSynthetic;
            bool isGenerateNatural   = _parent.StatementResultService.IsMakeNatural;

            // Process the events and get the result
            UniformPair <EventBean[]> newOldEvents = ResultSetProcessor.ProcessOutputLimitedJoin(
                _deltaSet.JoinEventsSet, isGenerateSynthetic, _parent.OutputLimitLimitType);

            if (_parent.IsDistinct && newOldEvents != null)
            {
                newOldEvents.First  = EventBeanUtility.GetDistinctByProp(newOldEvents.First, _parent.EventBeanReader);
                newOldEvents.Second = EventBeanUtility.GetDistinctByProp(newOldEvents.Second, _parent.EventBeanReader);
            }

            if ((!isGenerateSynthetic) && (!isGenerateNatural))
            {
                if (AuditPath.IsAuditEnabled)
                {
                    OutputStrategyUtil.IndicateEarlyReturn(_parent.StatementContext, newOldEvents);
                }
                ResetEventBatches();
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AOutputRateConditionOutputNow(false);
                }
                return;
            }

            if (doOutput)
            {
                Output(forceUpdate, newOldEvents);
            }
            ResetEventBatches();

            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().AOutputRateConditionOutputNow(true);
            }
        }
        public override View DetermineFinalOutputView(AgentInstanceContext agentInstanceContext, View onExprView)
        {
            if ((StatementSpec.OnTriggerDesc.OnTriggerType == OnTriggerType.ON_DELETE) ||
                (StatementSpec.OnTriggerDesc.OnTriggerType == OnTriggerType.ON_UPDATE) ||
                (StatementSpec.OnTriggerDesc.OnTriggerType == OnTriggerType.ON_MERGE))
            {
                ResultSetProcessor outputResultSetProcessor = _outputResultSetProcessorPrototype.ResultSetProcessorFactory.Instantiate(null, null, agentInstanceContext);
                View outputView = _outputProcessViewFactory.MakeView(outputResultSetProcessor, agentInstanceContext);
                onExprView.AddView(outputView);
                return(outputView);
            }

            return(onExprView);
        }
コード例 #30
0
        protected override StatementAgentInstanceFactoryResult NewContextInternal(AgentInstanceContext agentInstanceContext, bool isRecoveringResilient)
        {
            StopCallback stopCallback = new ProxyStopCallback(() => _services.VariableService.DeallocateVariableState(_variableMetaData.VariableName, agentInstanceContext.AgentInstanceId));

            _services.VariableService.AllocateVariableState(
                _variableMetaData.VariableName, agentInstanceContext.AgentInstanceId, _statementContext.StatementExtensionServicesContext, isRecoveringResilient);

            CreateVariableView createView = new CreateVariableView(
                _statementContext.StatementId,
                _services.EventAdapterService,
                _services.VariableService,
                _createDesc.VariableName,
                _statementContext.StatementResultService,
                agentInstanceContext.AgentInstanceId);

            _services.VariableService.RegisterCallback(_createDesc.VariableName, agentInstanceContext.AgentInstanceId, createView.Update);
            _statementContext.StatementStopService.StatementStopped += () => _services.VariableService.UnregisterCallback(_createDesc.VariableName, 0, createView.Update);

            // Create result set processor, use wildcard selection
            _statementSpec.SelectClauseSpec.SetSelectExprList(new SelectClauseElementWildcard());
            _statementSpec.SelectStreamDirEnum = SelectClauseStreamSelectorEnum.RSTREAM_ISTREAM_BOTH;
            var typeService = new StreamTypeServiceImpl(new EventType[] { createView.EventType }, new string[] { "create_variable" }, new bool[] { true }, _services.EngineURI, false);
            OutputProcessViewBase outputViewBase;

            try {
                ResultSetProcessorFactoryDesc resultSetProcessorPrototype = ResultSetProcessorFactoryFactory.GetProcessorPrototype(
                    _statementSpec, _statementContext, typeService, null, new bool[0], true, ContextPropertyRegistryImpl.EMPTY_REGISTRY, null, _services.ConfigSnapshot, _services.ResultSetProcessorHelperFactory, false, false);
                ResultSetProcessor resultSetProcessor = EPStatementStartMethodHelperAssignExpr.GetAssignResultSetProcessor(agentInstanceContext, resultSetProcessorPrototype, false, null, false);

                // Attach output view
                OutputProcessViewFactory outputViewFactory = OutputProcessViewFactoryFactory.Make(
                    _statementSpec,
                    _services.InternalEventRouter,
                    agentInstanceContext.StatementContext,
                    resultSetProcessor.ResultEventType, null,
                    _services.TableService,
                    resultSetProcessorPrototype.ResultSetProcessorFactory.ResultSetProcessorType,
                    _services.ResultSetProcessorHelperFactory,
                    _services.StatementVariableRefService);
                outputViewBase = outputViewFactory.MakeView(resultSetProcessor, agentInstanceContext);
                createView.AddView(outputViewBase);
            }
            catch (ExprValidationException ex)
            {
                throw new EPException("Unexpected exception in create-variable context allocation: " + ex.Message, ex);
            }

            return(new StatementAgentInstanceFactoryCreateVariableResult(outputViewBase, stopCallback, agentInstanceContext));
        }