private static void RewriteNamedWindowSubselect(
            IList<ExprDotNode> chainedExpressionsDot,
            IList<ExprSubselectNode> subselects,
            NamedWindowCompileTimeResolver service)
        {
            foreach (var dotNode in chainedExpressionsDot) {
                if (dotNode.ChainSpec.IsEmpty()) {
                    continue;
                }
                
                var proposedWindow = dotNode.ChainSpec[0].GetRootNameOrEmptyString();
                var namedWindowDetail = service.Resolve(proposedWindow);
                if (namedWindowDetail == null) {
                    continue;
                }

                // build spec for subselect
                var raw = new StatementSpecRaw(SelectClauseStreamSelectorEnum.ISTREAM_ONLY);
                var filter = new FilterSpecRaw(proposedWindow, Collections.GetEmptyList<ExprNode>(), null);
                raw.StreamSpecs.Add(
                    new FilterStreamSpecRaw(
                        filter,
                        ViewSpec.EMPTY_VIEWSPEC_ARRAY,
                        proposedWindow,
                        StreamSpecOptions.DEFAULT));

                
                var modified = new List<Chainable>(dotNode.ChainSpec);
                var firstChain = modified.DeleteAt(0);
                var firstChainParams = firstChain.GetParametersOrEmpty();
                if (!firstChainParams.IsEmpty()) {
                    if (firstChainParams.Count == 1) {
                        raw.WhereClause = firstChainParams[0];
                    } else {
                        ExprAndNode andNode = new ExprAndNodeImpl();
                        foreach (ExprNode node in firstChainParams) {
                            andNode.AddChildNode(node);
                        }
                        raw.WhereClause = andNode;
                    }
                }

                // activate subselect
                ExprSubselectNode subselect = new ExprSubselectRowNode(raw);
                subselects.Add(subselect);
                dotNode.ChildNodes = new ExprNode[] {subselect};
                dotNode.ChainSpec = modified;
            }
        }
Exemplo n.º 2
0
        protected internal static StreamJoinAnalysisResultCompileTime VerifyJoinViews(
            StatementSpecCompiled statementSpec,
            NamedWindowCompileTimeResolver namedWindowCompileTimeResolver)
        {
            var streamSpecs = statementSpec.StreamSpecs;
            var analysisResult = new StreamJoinAnalysisResultCompileTime(streamSpecs.Length);
            if (streamSpecs.Length < 2) {
                return analysisResult;
            }

            // Determine if any stream has a unidirectional keyword

            // inspect unidirectional indicator and named window flags
            for (var i = 0; i < statementSpec.StreamSpecs.Length; i++) {
                var streamSpec = statementSpec.StreamSpecs[i];
                if (streamSpec.Options.IsUnidirectional) {
                    analysisResult.SetUnidirectionalInd(i);
                }

                if (streamSpec.ViewSpecs.Length > 0) {
                    analysisResult.SetHasChildViews(i);
                }

                if (streamSpec is NamedWindowConsumerStreamSpec) {
                    var nwSpec = (NamedWindowConsumerStreamSpec) streamSpec;
                    if (nwSpec.OptPropertyEvaluator != null && !streamSpec.Options.IsUnidirectional) {
                        throw new ExprValidationException(
                            "Failed to validate named window use in join, Contained-event is only allowed for named windows when marked as unidirectional");
                    }

                    var nwinfo = nwSpec.NamedWindow;
                    analysisResult.SetNamedWindowsPerStream(i, nwinfo);
                    analysisResult.UniqueKeys[i] = EventTableIndexMetadataUtil.GetUniqueness(
                        nwinfo.IndexMetadata,
                        nwinfo.Uniqueness);
                }
            }

            // non-outer-join: verify unidirectional can be on a single stream only
            if (statementSpec.StreamSpecs.Length > 1 && analysisResult.IsUnidirectional) {
                VerifyJoinUnidirectional(analysisResult, statementSpec);
            }

            // count streams that provide data, excluding streams that poll data (DB and method)
            var countProviderNonpolling = 0;
            for (var i = 0; i < statementSpec.StreamSpecs.Length; i++) {
                var streamSpec = statementSpec.StreamSpecs[i];
                if (streamSpec is MethodStreamSpec ||
                    streamSpec is DBStatementStreamSpec ||
                    streamSpec is TableQueryStreamSpec) {
                    continue;
                }

                countProviderNonpolling++;
            }

            // if there is only one stream providing data, the analysis is done
            if (countProviderNonpolling == 1) {
                return analysisResult;
            }
            // there are multiple driving streams, verify the presence of a view for insert/remove stream

            // validation of join views works differently for unidirectional as there can be self-joins that don't require a view
            // see if this is a self-join in which all streams are filters and filter specification is the same.
            FilterSpecCompiled unidirectionalFilterSpec = null;
            FilterSpecCompiled lastFilterSpec = null;
            var pureSelfJoin = true;
            foreach (var streamSpec in statementSpec.StreamSpecs) {
                if (!(streamSpec is FilterStreamSpecCompiled)) {
                    pureSelfJoin = false;
                    continue;
                }

                var filterSpec = ((FilterStreamSpecCompiled) streamSpec).FilterSpecCompiled;
                if (lastFilterSpec != null && !lastFilterSpec.EqualsTypeAndFilter(filterSpec)) {
                    pureSelfJoin = false;
                }

                if (streamSpec.ViewSpecs.Length > 0) {
                    pureSelfJoin = false;
                }

                lastFilterSpec = filterSpec;

                if (streamSpec.Options.IsUnidirectional) {
                    unidirectionalFilterSpec = filterSpec;
                }
            }

            // self-join without views and not unidirectional
            if (pureSelfJoin && unidirectionalFilterSpec == null) {
                analysisResult.IsPureSelfJoin = true;
                return analysisResult;
            }

            // weed out filter and pattern streams that don't have a view in a join
            for (var i = 0; i < statementSpec.StreamSpecs.Length; i++) {
                var streamSpec = statementSpec.StreamSpecs[i];
                if (streamSpec.ViewSpecs.Length > 0) {
                    continue;
                }

                var name = streamSpec.OptionalStreamName;
                if (name == null && streamSpec is FilterStreamSpecCompiled) {
                    name = ((FilterStreamSpecCompiled) streamSpec).FilterSpecCompiled.FilterForEventTypeName;
                }

                if (name == null && streamSpec is PatternStreamSpecCompiled) {
                    name = "pattern event stream";
                }

                if (streamSpec.Options.IsUnidirectional) {
                    continue;
                }

                // allow a self-join without a child view, in that the filter spec is the same as the unidirection's stream filter
                if (unidirectionalFilterSpec != null &&
                    streamSpec is FilterStreamSpecCompiled &&
                    ((FilterStreamSpecCompiled) streamSpec).FilterSpecCompiled.EqualsTypeAndFilter(
                        unidirectionalFilterSpec)) {
                    analysisResult.SetUnidirectionalNonDriving(i);
                    continue;
                }

                if (streamSpec is FilterStreamSpecCompiled ||
                    streamSpec is PatternStreamSpecCompiled) {
                    throw new ExprValidationException(
                        "Joins require that at least one view is specified for each stream, no view was specified for " +
                        name);
                }
            }

            return analysisResult;
        }
Exemplo n.º 3
0
        public ModuleCompileTimeServices(
            IContainer container,
            CompilerServices compilerServices,
            Configuration configuration,
            ContextCompileTimeRegistry contextCompileTimeRegistry,
            ContextCompileTimeResolver contextCompileTimeResolver,
            BeanEventTypeStemService beanEventTypeStemService,
            BeanEventTypeFactoryPrivate beanEventTypeFactoryPrivate,
            ClassProvidedCompileTimeRegistry classProvidedCompileTimeRegistry,
            ClassProvidedCompileTimeResolver classProvidedCompileTimeResolver,
            DatabaseConfigServiceCompileTime databaseConfigServiceCompileTime,
            ImportServiceCompileTime importService,
            ExprDeclaredCompileTimeRegistry exprDeclaredCompileTimeRegistry,
            ExprDeclaredCompileTimeResolver exprDeclaredCompileTimeResolver,
            EventTypeAvroHandler eventTypeAvroHandler,
            EventTypeCompileTimeRegistry eventTypeCompileTimeRegistry,
            EventTypeCompileTimeResolver eventTypeCompileTimeResolver,
            EventTypeRepositoryImpl eventTypeRepositoryPreconfigured,
            bool fireAndForget,
            IndexCompileTimeRegistry indexCompileTimeRegistry,
            ModuleDependenciesCompileTime moduleDependencies,
            ModuleAccessModifierService moduleVisibilityRules,
            NamedWindowCompileTimeResolver namedWindowCompileTimeResolver,
            NamedWindowCompileTimeRegistry namedWindowCompileTimeRegistry,
            ParentClassLoader parentClassLoader,
            PatternObjectResolutionService patternObjectResolutionService,
            ScriptCompileTimeRegistry scriptCompileTimeRegistry,
            ScriptCompileTimeResolver scriptCompileTimeResolver,
            ScriptCompiler scriptCompiler,
            SerdeEventTypeCompileTimeRegistry serdeEventTypeRegistry,
            SerdeCompileTimeResolver serdeResolver, 
            TableCompileTimeRegistry tableCompileTimeRegistry,
            TableCompileTimeResolver tableCompileTimeResolver,
            VariableCompileTimeRegistry variableCompileTimeRegistry,
            VariableCompileTimeResolver variableCompileTimeResolver,
            ViewResolutionService viewResolutionService,
            XMLFragmentEventTypeFactory xmlFragmentEventTypeFactory)
        {
            var generation = Interlocked.Increment(ref _generation);
            
            Namespace = $"generation_{generation}";

            Container = container;
            CompilerServices = compilerServices;
            Configuration = configuration;
            ContextCompileTimeRegistry = contextCompileTimeRegistry;
            ContextCompileTimeResolver = contextCompileTimeResolver;
            BeanEventTypeStemService = beanEventTypeStemService;
            BeanEventTypeFactoryPrivate = beanEventTypeFactoryPrivate;
            DatabaseConfigServiceCompileTime = databaseConfigServiceCompileTime;
            ImportServiceCompileTime = importService;
            ExprDeclaredCompileTimeRegistry = exprDeclaredCompileTimeRegistry;
            ExprDeclaredCompileTimeResolver = exprDeclaredCompileTimeResolver;
            EventTypeAvroHandler = eventTypeAvroHandler;
            EventTypeCompileTimeRegistry = eventTypeCompileTimeRegistry;
            EventTypeCompileTimeResolver = eventTypeCompileTimeResolver;
            EventTypeRepositoryPreconfigured = eventTypeRepositoryPreconfigured;
            IndexCompileTimeRegistry = indexCompileTimeRegistry;
            ModuleDependencies = moduleDependencies;
            ModuleVisibilityRules = moduleVisibilityRules;
            NamedWindowCompileTimeResolver = namedWindowCompileTimeResolver;
            NamedWindowCompileTimeRegistry = namedWindowCompileTimeRegistry;
            ParentClassLoader = parentClassLoader;
            PatternObjectResolutionService = patternObjectResolutionService;
            ScriptCompileTimeRegistry = scriptCompileTimeRegistry;
            ScriptCompileTimeResolver = scriptCompileTimeResolver;
            ScriptCompiler = scriptCompiler;
            TableCompileTimeRegistry = tableCompileTimeRegistry;
            TableCompileTimeResolver = tableCompileTimeResolver;
            VariableCompileTimeRegistry = variableCompileTimeRegistry;
            VariableCompileTimeResolver = variableCompileTimeResolver;
            ViewResolutionService = viewResolutionService;
            XmlFragmentEventTypeFactory = xmlFragmentEventTypeFactory;

            #region ESPER_8.5.1
            ClassProvidedCompileTimeRegistry = classProvidedCompileTimeRegistry;
            ClassProvidedCompileTimeResolver = classProvidedCompileTimeResolver;
            SerdeEventTypeRegistry = serdeEventTypeRegistry;
            SerdeResolver = serdeResolver;
            IsFireAndForget = fireAndForget;
            #endregion
        }
Exemplo n.º 4
0
 public ModuleCompileTimeServices(
     IContainer container,
     CompilerServices compilerServices,
     Configuration configuration,
     ContextCompileTimeRegistry contextCompileTimeRegistry,
     ContextCompileTimeResolver contextCompileTimeResolver,
     BeanEventTypeStemService beanEventTypeStemService,
     BeanEventTypeFactoryPrivate beanEventTypeFactoryPrivate,
     DatabaseConfigServiceCompileTime databaseConfigServiceCompileTime,
     ImportServiceCompileTime importService,
     ExprDeclaredCompileTimeRegistry exprDeclaredCompileTimeRegistry,
     ExprDeclaredCompileTimeResolver exprDeclaredCompileTimeResolver,
     EventTypeAvroHandler eventTypeAvroHandler,
     EventTypeCompileTimeRegistry eventTypeCompileTimeRegistry,
     EventTypeCompileTimeResolver eventTypeCompileTimeResolver,
     EventTypeRepositoryImpl eventTypeRepositoryPreconfigured,
     IndexCompileTimeRegistry indexCompileTimeRegistry,
     ModuleDependenciesCompileTime moduleDependencies,
     ModuleAccessModifierService moduleVisibilityRules,
     NamedWindowCompileTimeResolver namedWindowCompileTimeResolver,
     NamedWindowCompileTimeRegistry namedWindowCompileTimeRegistry,
     PatternObjectResolutionService patternObjectResolutionService,
     ScriptCompileTimeRegistry scriptCompileTimeRegistry,
     ScriptCompileTimeResolver scriptCompileTimeResolver,
     ScriptServiceCompileTime scriptServiceCompileTime,
     TableCompileTimeRegistry tableCompileTimeRegistry,
     TableCompileTimeResolver tableCompileTimeResolver,
     VariableCompileTimeRegistry variableCompileTimeRegistry,
     VariableCompileTimeResolver variableCompileTimeResolver,
     ViewResolutionService viewResolutionService,
     XMLFragmentEventTypeFactory xmlFragmentEventTypeFactory)
 {
     Container = container;
     CompilerServices = compilerServices;
     Configuration = configuration;
     ContextCompileTimeRegistry = contextCompileTimeRegistry;
     ContextCompileTimeResolver = contextCompileTimeResolver;
     BeanEventTypeStemService = beanEventTypeStemService;
     BeanEventTypeFactoryPrivate = beanEventTypeFactoryPrivate;
     DatabaseConfigServiceCompileTime = databaseConfigServiceCompileTime;
     ImportServiceCompileTime = importService;
     ExprDeclaredCompileTimeRegistry = exprDeclaredCompileTimeRegistry;
     ExprDeclaredCompileTimeResolver = exprDeclaredCompileTimeResolver;
     EventTypeAvroHandler = eventTypeAvroHandler;
     EventTypeCompileTimeRegistry = eventTypeCompileTimeRegistry;
     EventTypeCompileTimeResolver = eventTypeCompileTimeResolver;
     EventTypeRepositoryPreconfigured = eventTypeRepositoryPreconfigured;
     IndexCompileTimeRegistry = indexCompileTimeRegistry;
     ModuleDependencies = moduleDependencies;
     ModuleVisibilityRules = moduleVisibilityRules;
     NamedWindowCompileTimeResolver = namedWindowCompileTimeResolver;
     NamedWindowCompileTimeRegistry = namedWindowCompileTimeRegistry;
     PatternObjectResolutionService = patternObjectResolutionService;
     ScriptServiceCompileTime = scriptServiceCompileTime;
     ScriptCompileTimeRegistry = scriptCompileTimeRegistry;
     ScriptCompileTimeResolver = scriptCompileTimeResolver;
     TableCompileTimeRegistry = tableCompileTimeRegistry;
     TableCompileTimeResolver = tableCompileTimeResolver;
     VariableCompileTimeRegistry = variableCompileTimeRegistry;
     VariableCompileTimeResolver = variableCompileTimeResolver;
     ViewResolutionService = viewResolutionService;
     XmlFragmentEventTypeFactory = xmlFragmentEventTypeFactory;
 }