public override EPStatementStartResult StartInternal(
            EPServicesContext services,
            StatementContext statementContext,
            bool isNewStatement,
            bool isRecoveringStatement,
            bool isRecoveringResilient)
        {
            var expressionName =
                services.ExprDeclaredService.AddExpressionOrScript(StatementSpec.CreateExpressionDesc);

            // define output event type
            var typeName   = "EventType_Expression_" + expressionName;
            var resultType = services.EventAdapterService.CreateAnonymousMapType(
                typeName, Collections.GetEmptyMap <String, Object>(), true);

            var stopMethod = new ProxyEPStatementStopMethod(
                () =>
            {
                // no action
            });

            var destroyMethod = new ProxyEPStatementDestroyMethod(
                () => services.ExprDeclaredService.DestroyedExpression(StatementSpec.CreateExpressionDesc));

            Viewable resultView = new ZeroDepthStreamNoIterate(resultType);

            statementContext.StatementAgentInstanceFactory = new StatementAgentInstanceFactoryNoAgentInstance(resultView);
            return(new EPStatementStartResult(resultView, stopMethod, destroyMethod));
        }
Пример #2
0
        public override EPStatementStartResult StartInternal(EPServicesContext services, StatementContext statementContext, bool isNewStatement, bool isRecoveringStatement, bool isRecoveringResilient)
        {
            var createGraphDesc      = StatementSpec.CreateGraphDesc;
            var agentInstanceContext = GetDefaultAgentInstanceContext(statementContext);

            // define output event type
            var typeName   = "EventType_Graph_" + createGraphDesc.GraphName;
            var resultType = services.EventAdapterService.CreateAnonymousMapType(typeName, Collections.GetEmptyMap <String, Object>(), true);

            services.DataFlowService.AddStartGraph(createGraphDesc, statementContext, services, agentInstanceContext, isNewStatement);

            var stopMethod = new ProxyEPStatementStopMethod(() =>
                                                            services.DataFlowService.StopGraph(createGraphDesc.GraphName));

            var destroyMethod = new ProxyEPStatementDestroyMethod(() =>
                                                                  services.DataFlowService.RemoveGraph(createGraphDesc.GraphName));

            var resultView = new ZeroDepthStreamNoIterate(resultType);

            statementContext.StatementAgentInstanceFactory = new StatementAgentInstanceFactoryNoAgentInstance(resultView);
            return(new EPStatementStartResult(resultView, stopMethod, destroyMethod));
        }
Пример #3
0
        public ViewableActivationResult Activate(
            AgentInstanceContext agentInstanceContext,
            bool isSubselect,
            bool isRecoveringResilient)
        {
            FilterValueSetParam[][] addendum = null;
            if (agentInstanceContext.AgentInstanceFilterProxy != null) {
                addendum = agentInstanceContext.AgentInstanceFilterProxy.GetAddendumFilters(
                    FilterSpec,
                    agentInstanceContext);
            }

            var filterValues = FilterSpec.GetValueSet(
                null,
                addendum,
                agentInstanceContext,
                agentInstanceContext.StatementContextFilterEvalEnv);

            EventStream theStream;
            if (filterValues == null) {
                theStream = new ZeroDepthStreamNoIterate(FilterSpec.ResultEventType);
            }
            else {
                if (!agentInstanceContext.AuditProvider.Activated() &&
                    !agentInstanceContext.InstrumentationProvider.Activated()) {
                    theStream = CanIterate
                        ? new ZeroDepthStreamIterable(FilterSpec.ResultEventType)
                        : (EventStream) new ZeroDepthStreamNoIterate(FilterSpec.ResultEventType);
                }
                else {
                    var streamNum = StreamNumFromClause ?? -1;
                    theStream = CanIterate
                        ? new ZeroDepthStreamIterableWAudit(
                            FilterSpec.ResultEventType,
                            agentInstanceContext,
                            FilterSpec,
                            streamNum,
                            isSubselect,
                            SubselectNumber)
                        : (EventStream) new ZeroDepthStreamNoIterateWAudit(
                            FilterSpec.ResultEventType,
                            agentInstanceContext,
                            FilterSpec,
                            streamNum,
                            isSubselect,
                            SubselectNumber);
                }
            }

            FilterHandleCallback filterCallback;
            if (FilterSpec.OptionalPropertyEvaluator == null) {
                filterCallback = new ProxyFilterHandleCallback {
                    ProcMatchFound = (
                        theEvent,
                        allStmtMatches) => theStream.Insert(theEvent),

                    ProcIsSubselect = () => IsSubSelect
                };
            }
            else {
                filterCallback = new ProxyFilterHandleCallback {
                    ProcMatchFound = (
                        theEvent,
                        allStmtMatches) => {
                        var result = FilterSpec.OptionalPropertyEvaluator.GetProperty(theEvent, agentInstanceContext);
                        if (result == null) {
                            return;
                        }

                        theStream.Insert(result);
                    },

                    ProcIsSubselect = () => IsSubSelect
                };
            }

            var filterHandle = new EPStatementHandleCallbackFilter(
                agentInstanceContext.EpStatementAgentInstanceHandle,
                filterCallback);
            if (filterValues != null) {
                agentInstanceContext
                    .StatementContext
                    .FilterService
                    .Add(
                        FilterSpec.FilterForEventType,
                        filterValues,
                        filterHandle);
            }

            ViewableActivatorFilterMgmtCallback stopCallback = new ViewableActivatorFilterMgmtCallback(Container, filterHandle, FilterSpec);
            return new ViewableActivationResult(theStream, stopCallback, null, false, false, null, null, null);
        }