/// <summary> /// Ctor. /// </summary> /// <param name="statementId">The statement identifier.</param> /// <param name="desc">specification for the on-set statement</param> /// <param name="eventAdapterService">for creating statements</param> /// <param name="variableService">for setting variables</param> /// <param name="statementResultService">for coordinating on whether insert and remove stream events should be posted</param> /// <param name="exprEvaluatorContext">context for expression evalauation</param> /// <throws>com.espertech.esper.epl.expression.core.ExprValidationException if the assignment expressions are invalid</throws> public OnSetVariableViewFactory(string statementId, OnTriggerSetDesc desc, EventAdapterService eventAdapterService, VariableService variableService, StatementResultService statementResultService, ExprEvaluatorContext exprEvaluatorContext) { EventAdapterService = eventAdapterService; VariableService = variableService; StatementResultService = statementResultService; VariableReadWritePackage = new VariableReadWritePackage(desc.Assignments, variableService, eventAdapterService); var outputEventTypeName = statementId + "_outsetvar"; EventType = eventAdapterService.CreateAnonymousMapType(outputEventTypeName, VariableReadWritePackage.VariableTypes); }
private static void VisitSubselectOnTrigger( OnTriggerDesc onTriggerDesc, ExprNodeSubselectDeclaredDotVisitor visitor) { if (onTriggerDesc is OnTriggerWindowUpdateDesc) { OnTriggerWindowUpdateDesc updates = (OnTriggerWindowUpdateDesc) onTriggerDesc; foreach (OnTriggerSetAssignment assignment in updates.Assignments) { assignment.Expression.Accept(visitor); } } else if (onTriggerDesc is OnTriggerSetDesc) { OnTriggerSetDesc sets = (OnTriggerSetDesc) onTriggerDesc; foreach (OnTriggerSetAssignment assignment in sets.Assignments) { assignment.Expression.Accept(visitor); } } else if (onTriggerDesc is OnTriggerSplitStreamDesc) { OnTriggerSplitStreamDesc splits = (OnTriggerSplitStreamDesc) onTriggerDesc; foreach (OnTriggerSplitStream split in splits.SplitStreams) { split.WhereClause?.Accept(visitor); if (split.SelectClause.SelectExprList != null) { WalkSubselectSelectClause(split.SelectClause.SelectExprList, visitor); } } } else if (onTriggerDesc is OnTriggerMergeDesc) { OnTriggerMergeDesc merge = (OnTriggerMergeDesc) onTriggerDesc; foreach (OnTriggerMergeMatched matched in merge.Items) { matched.OptionalMatchCond?.Accept(visitor); foreach (OnTriggerMergeAction action in matched.Actions) { action.OptionalWhereClause?.Accept(visitor); if (action is OnTriggerMergeActionUpdate) { OnTriggerMergeActionUpdate update = (OnTriggerMergeActionUpdate) action; foreach (OnTriggerSetAssignment assignment in update.Assignments) { assignment.Expression.Accept(visitor); } } if (action is OnTriggerMergeActionInsert) { OnTriggerMergeActionInsert insert = (OnTriggerMergeActionInsert) action; WalkSubselectSelectClause(insert.SelectClause, visitor); } } } if (merge.OptionalInsertNoMatch != null) { WalkSubselectSelectClause(merge.OptionalInsertNoMatch.SelectClause, visitor); } } }
public static OnTriggerSetPlan HandleSetVariable( string className, CodegenNamespaceScope namespaceScope, string classPostfix, OnTriggerActivatorDesc activatorResult, string optionalStreamName, IDictionary<ExprSubselectNode, SubSelectActivationPlan> subselectActivation, OnTriggerSetDesc desc, StatementBaseInfo @base, StatementCompileTimeServices services) { StreamTypeService typeService = new StreamTypeServiceImpl( new[] {activatorResult.ActivatorResultEventType}, new[] {optionalStreamName}, new[] {true}, false, false); var validationContext = new ExprValidationContextBuilder(typeService, @base.StatementRawInfo, services) .WithAllowBindingConsumption(true) .Build(); // handle subselects var subselectForges = SubSelectHelperForgePlanner.PlanSubSelect( @base, subselectActivation, new[] {optionalStreamName}, new[] {activatorResult.ActivatorResultEventType}, new[] {activatorResult.TriggerEventTypeName}, services); // validate assignments foreach (var assignment in desc.Assignments) { var validated = ExprNodeUtilityValidate.GetValidatedAssignment(assignment, validationContext); assignment.Expression = validated; } // create read-write logic var variableReadWritePackageForge = new VariableReadWritePackageForge(desc.Assignments, services); // plan table access var tableAccessForges = ExprTableEvalHelperPlan.PlanTableAccess(@base.StatementSpec.TableAccessNodes); // create output event type var eventTypeName = services.EventTypeNameGeneratorStatement.AnonymousTypeName; var eventTypeMetadata = new EventTypeMetadata( eventTypeName, @base.ModuleName, EventTypeTypeClass.STATEMENTOUT, EventTypeApplicationType.MAP, NameAccessModifier.TRANSIENT, EventTypeBusModifier.NONBUS, false, EventTypeIdPair.Unassigned()); var eventType = BaseNestableEventUtil.MakeMapTypeCompileTime( eventTypeMetadata, variableReadWritePackageForge.VariableTypes, null, null, null, null, services.BeanEventTypeFactoryPrivate, services.EventTypeCompileTimeResolver); services.EventTypeCompileTimeRegistry.NewType(eventType); // Handle output format var defaultSelectAllSpec = new StatementSpecCompiled(); defaultSelectAllSpec.SelectClauseCompiled.WithSelectExprList(new SelectClauseElementWildcard()); defaultSelectAllSpec.Raw.SelectStreamDirEnum = SelectClauseStreamSelectorEnum.RSTREAM_ISTREAM_BOTH; StreamTypeService streamTypeService = new StreamTypeServiceImpl( new EventType[] {eventType}, new[] {"trigger_stream"}, new[] {true}, false, false); var resultSetProcessor = ResultSetProcessorFactoryFactory.GetProcessorPrototype( new ResultSetSpec(defaultSelectAllSpec), streamTypeService, null, new bool[1], false, @base.ContextPropertyRegistry, false, false, @base.StatementRawInfo, services); var classNameRSP = CodeGenerationIDGenerator.GenerateClassNameSimple( typeof(ResultSetProcessorFactoryProvider), classPostfix); var forge = new StatementAgentInstanceFactoryOnTriggerSetForge( activatorResult.Activator, eventType, subselectForges, tableAccessForges, variableReadWritePackageForge, classNameRSP); IList<StmtClassForgable> forgables = new List<StmtClassForgable>(); forgables.Add( new StmtClassForgableRSPFactoryProvider( classNameRSP, resultSetProcessor, namespaceScope, @base.StatementRawInfo)); var onTrigger = new StmtClassForgableAIFactoryProviderOnTrigger(className, namespaceScope, forge); return new OnTriggerSetPlan(onTrigger, forgables, resultSetProcessor.SelectSubscriberDescriptor); }
private static void VisitSubselectOnTrigger(OnTriggerDesc onTriggerDesc, ExprNodeSubselectDeclaredDotVisitor visitor) { if (onTriggerDesc is OnTriggerWindowUpdateDesc) { OnTriggerWindowUpdateDesc updates = (OnTriggerWindowUpdateDesc)onTriggerDesc; foreach (OnTriggerSetAssignment assignment in updates.Assignments) { assignment.Expression.Accept(visitor); } } else if (onTriggerDesc is OnTriggerSetDesc) { OnTriggerSetDesc sets = (OnTriggerSetDesc)onTriggerDesc; foreach (OnTriggerSetAssignment assignment in sets.Assignments) { assignment.Expression.Accept(visitor); } } else if (onTriggerDesc is OnTriggerSplitStreamDesc) { OnTriggerSplitStreamDesc splits = (OnTriggerSplitStreamDesc)onTriggerDesc; foreach (OnTriggerSplitStream split in splits.SplitStreams) { if (split.WhereClause != null) { split.WhereClause.Accept(visitor); } if (split.SelectClause.SelectExprList != null) { foreach (SelectClauseElementRaw element in split.SelectClause.SelectExprList) { if (element is SelectClauseExprRawSpec) { SelectClauseExprRawSpec selectExpr = (SelectClauseExprRawSpec)element; selectExpr.SelectExpression.Accept(visitor); } } } } } else if (onTriggerDesc is OnTriggerMergeDesc) { OnTriggerMergeDesc merge = (OnTriggerMergeDesc)onTriggerDesc; foreach (OnTriggerMergeMatched matched in merge.Items) { if (matched.OptionalMatchCond != null) { matched.OptionalMatchCond.Accept(visitor); } foreach (OnTriggerMergeAction action in matched.Actions) { if (action.OptionalWhereClause != null) { action.OptionalWhereClause.Accept(visitor); } if (action is OnTriggerMergeActionUpdate) { OnTriggerMergeActionUpdate update = (OnTriggerMergeActionUpdate)action; foreach (OnTriggerSetAssignment assignment in update.Assignments) { assignment.Expression.Accept(visitor); } } if (action is OnTriggerMergeActionInsert) { OnTriggerMergeActionInsert insert = (OnTriggerMergeActionInsert)action; foreach (SelectClauseElementRaw element in insert.SelectClause) { if (element is SelectClauseExprRawSpec) { SelectClauseExprRawSpec selectExpr = (SelectClauseExprRawSpec)element; selectExpr.SelectExpression.Accept(visitor); } } } } } } }