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; } }
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; }
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 }
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; }