Example #1
0
 private static void AddFilters(StreamSpecCompiled[] streams, IList <FilterSpecCompiled> filters, IList <NamedWindowConsumerStreamSpec> namedWindows)
 {
     foreach (StreamSpecCompiled compiled in streams)
     {
         if (compiled is FilterStreamSpecCompiled)
         {
             FilterStreamSpecCompiled c = (FilterStreamSpecCompiled)compiled;
             filters.Add(c.FilterSpec);
         }
         if (compiled is PatternStreamSpecCompiled)
         {
             PatternStreamSpecCompiled     r = (PatternStreamSpecCompiled)compiled;
             EvalNodeAnalysisResult        evalNodeAnalysisResult = EvalNodeUtil.RecursiveAnalyzeChildNodes((r.EvalFactoryNode));
             IList <EvalFilterFactoryNode> filterNodes            = evalNodeAnalysisResult.FilterNodes;
             foreach (EvalFilterFactoryNode filterNode in filterNodes)
             {
                 filters.Add(filterNode.FilterSpec);
             }
         }
         if (compiled is NamedWindowConsumerStreamSpec)
         {
             namedWindows.Add((NamedWindowConsumerStreamSpec)compiled);
         }
     }
 }
Example #2
0
 public ViewableActivatorPatternForge(
     EventType eventType,
     PatternStreamSpecCompiled spec,
     PatternContext patternContext,
     bool isCanIterate)
 {
     _eventType = eventType;
     _spec = spec;
     _patternContext = patternContext;
     _isCanIterate = isCanIterate;
 }
Example #3
0
 private OnTriggerActivatorDesc ActivatorPattern(
     PatternStreamSpecCompiled patternStreamSpec,
     StatementCompileTimeServices services)
 {
     var triggerEventTypeName = patternStreamSpec.OptionalStreamName;
     var patternType =
         ViewableActivatorPatternForge.MakeRegisterPatternType(@base, 0, patternStreamSpec, services);
     var patternContext = new PatternContext(0, patternStreamSpec.MatchedEventMapMeta, false, -1, false);
     var activator = new ViewableActivatorPatternForge(patternType, patternStreamSpec, patternContext, false);
     return new OnTriggerActivatorDesc(activator, triggerEventTypeName, patternType);
 }
        private void TryAssertionEPL(EPServiceProvider epService, string epl, string patternText, string expectedIfDifferent)
        {
            EPStatementObjectModel    model   = epService.EPAdministrator.CompileEPL(epl);
            EPStatementSPI            spi     = (EPStatementSPI)epService.EPAdministrator.Create(model);
            StatementSpecCompiled     spec    = ((EPServiceProviderSPI)epService).StatementLifecycleSvc.GetStatementSpec(spi.StatementId);
            PatternStreamSpecCompiled pattern = (PatternStreamSpecCompiled)spec.StreamSpecs[0];
            var writer = new StringWriter();

            pattern.EvalFactoryNode.ToEPL(writer, PatternExpressionPrecedenceEnum.MINIMUM);
            if (expectedIfDifferent == null)
            {
                Assert.AreEqual(patternText, writer.ToString());
            }
            else
            {
                Assert.AreEqual(expectedIfDifferent, writer.ToString());
            }
            spi.Dispose();
        }
        public void Activate(EventBean optionalTriggeringEvent, MatchedEventMap priorMatches, long timeOffset, bool isRecoveringResilient)
        {
            if (PatternStopCallback != null)
            {
                PatternStopCallback.Stop();
            }

            PatternStreamSpecCompiled patternStreamSpec = _endpointPatternSpec.PatternCompiled;
            StatementContext          stmtContext       = _agentInstanceContext.StatementContext;

            EvalRootFactoryNode rootFactoryNode = _servicesContext.PatternNodeFactory.MakeRootNode(patternStreamSpec.EvalFactoryNode);
            int            streamNum            = _isStartEndpoint ? _contextStatePathKey.SubPath : -1 * _contextStatePathKey.SubPath;
            bool           allowResilient       = _contextStatePathKey.Level == 1;
            PatternContext patternContext       = stmtContext.PatternContextFactory.CreateContext(stmtContext, streamNum, rootFactoryNode, new MatchedEventMapMeta(patternStreamSpec.AllTags, !patternStreamSpec.ArrayEventTypes.IsEmpty()), allowResilient);

            PatternAgentInstanceContext patternAgentInstanceContext = stmtContext.PatternContextFactory.CreatePatternAgentContext(patternContext, _agentInstanceContext, false);
            EvalRootNode rootNode = EvalNodeUtil.MakeRootNodeFromFactory(rootFactoryNode, patternAgentInstanceContext);

            if (priorMatches == null)
            {
                priorMatches = new MatchedEventMapImpl(patternContext.MatchedEventMapMeta);
            }

            // capture any callbacks that may occur right after start
            ConditionPatternMatchCallback callback = new ConditionPatternMatchCallback(this);

            PatternStopCallback   = rootNode.Start(callback.MatchFound, patternContext, priorMatches, isRecoveringResilient);
            callback.ForwardCalls = true;

            if (_agentInstanceContext.StatementContext.StatementExtensionServicesContext != null &&
                _agentInstanceContext.StatementContext.StatementExtensionServicesContext.StmtResources != null)
            {
                _agentInstanceContext.StatementContext.StatementExtensionServicesContext.StmtResources
                .StartContextPattern(PatternStopCallback, _isStartEndpoint, _contextStatePathKey);
            }

            if (callback.IsInvoked)
            {
                MatchFound(Collections.GetEmptyMap <String, Object>());
            }
        }
Example #6
0
        public static MapEventType MakeRegisterPatternType(
            StatementBaseInfo @base,
            int stream,
            PatternStreamSpecCompiled patternStreamSpec,
            StatementCompileTimeServices services)
        {
            var patternEventTypeName = services.EventTypeNameGeneratorStatement.GetPatternTypeName(stream);
            var metadata = new EventTypeMetadata(
                patternEventTypeName,
                @base.ModuleName,
                EventTypeTypeClass.STREAM,
                EventTypeApplicationType.MAP,
                NameAccessModifier.PRIVATE,
                EventTypeBusModifier.NONBUS,
                false,
                EventTypeIdPair.Unassigned());
            IDictionary<string, object> propertyTypes = new LinkedHashMap<string, object>();
            foreach (var entry in patternStreamSpec.TaggedEventTypes) {
                propertyTypes.Put(entry.Key, entry.Value.First);
            }

            foreach (var entry in patternStreamSpec.ArrayEventTypes) {
                propertyTypes.Put(entry.Key, new[] {entry.Value.First});
            }

            var patternType = BaseNestableEventUtil.MakeMapTypeCompileTime(
                metadata,
                propertyTypes,
                null,
                null,
                null,
                null,
                services.BeanEventTypeFactoryPrivate,
                services.EventTypeCompileTimeResolver);
            services.EventTypeCompileTimeRegistry.NewType(patternType);
            return patternType;
        }
Example #7
0
        public static StreamSpecCompiledDesc CompilePatternWTags(
            PatternStreamSpecRaw streamSpecRaw,
            ISet<string> eventTypeReferences,
            bool isInsertInto,
            MatchEventSpec tags,
            ISet<string> priorAllTags,
            bool isJoin,
            bool isContextDeclaration,
            bool isOnTrigger,
            int streamNum,
            StatementRawInfo statementRawInfo,
            StatementCompileTimeServices services)
        {
            // validate
            if ((streamSpecRaw.IsSuppressSameEventMatches || streamSpecRaw.IsDiscardPartialsOnMatch) &&
                (isJoin || isContextDeclaration || isOnTrigger)) {
                throw new ExprValidationException(
                    "Discard-partials and suppress-matches is not supported in a joins, context declaration and on-action");
            }

            if (tags == null) {
                tags = new MatchEventSpec();
            }

            var nodeStack = new Stack<EvalForgeNode>();

            // determine ordered tags
            ISet<string> allTagNamesOrdered = FilterSpecCompilerTagUtil.AssignEventAsTagNumber(priorAllTags, streamSpecRaw.EvalForgeNode);

            // construct root : assigns factory node ids
            var top = streamSpecRaw.EvalForgeNode;
            var root = new EvalRootForgeNode(services.IsAttachPatternText, top, statementRawInfo.Annotations);
            var additionalForgeables = new List<StmtClassForgeableFactory>();
            
            RecursiveCompile(
                top,
                tags,
                nodeStack,
                allTagNamesOrdered,
                streamNum,
                additionalForgeables,
                statementRawInfo,
                services);

            var hook = (PatternCompileHook) ImportUtil.GetAnnotationHook(
                statementRawInfo.Annotations,
                HookType.INTERNAL_PATTERNCOMPILE,
                typeof(PatternCompileHook),
                services.ImportServiceCompileTime);
            hook?.Pattern(root);

            PatternStreamSpecCompiled compiled = new PatternStreamSpecCompiled(
                root,
                tags.TaggedEventTypes,
                tags.ArrayEventTypes,
                allTagNamesOrdered,
                streamSpecRaw.ViewSpecs,
                streamSpecRaw.OptionalStreamName,
                streamSpecRaw.Options,
                streamSpecRaw.IsSuppressSameEventMatches,
                streamSpecRaw.IsDiscardPartialsOnMatch);

            return new StreamSpecCompiledDesc(compiled, additionalForgeables);
        }