public StatementAgentInstanceFactoryOnTriggerSetForge( ViewableActivatorForge activator, EventType resultEventType, IDictionary<ExprSubselectNode, SubSelectFactoryForge> subselects, IDictionary<ExprTableAccessNode, ExprTableEvalStrategyFactoryForge> tableAccesses, VariableReadWritePackageForge variableReadWrite, string resultSetProcessorProviderClassName) : base(activator, resultEventType, subselects, tableAccesses) { this.variableReadWrite = variableReadWrite; this.resultSetProcessorProviderClassName = resultSetProcessorProviderClassName; }
public OutputConditionExpressionForge( ExprNode whenExpressionNode, IList<OnTriggerSetAssignment> assignments, ExprNode andWhenTerminatedExpr, IList<OnTriggerSetAssignment> afterTerminateAssignments, bool isStartConditionOnCreation, StatementRawInfo statementRawInfo, StatementCompileTimeServices services) { whenExpressionNodeEval = whenExpressionNode; andWhenTerminatedExpressionNodeEval = andWhenTerminatedExpr; this.isStartConditionOnCreation = isStartConditionOnCreation; // determine if using variables var variableVisitor = new ExprNodeVariableVisitor(services.VariableCompileTimeResolver); whenExpressionNode.Accept(variableVisitor); variableNames = variableVisitor.VariableNames; // determine if using properties var containsBuiltinProperties = ContainsBuiltinProperties(whenExpressionNode); if (!containsBuiltinProperties && assignments != null) { foreach (var assignment in assignments) { if (ContainsBuiltinProperties(assignment.Expression)) { containsBuiltinProperties = true; } } } if (!containsBuiltinProperties && andWhenTerminatedExpressionNodeEval != null) { containsBuiltinProperties = ContainsBuiltinProperties(andWhenTerminatedExpr); } if (!containsBuiltinProperties && afterTerminateAssignments != null) { foreach (var assignment in afterTerminateAssignments) { if (ContainsBuiltinProperties(assignment.Expression)) { containsBuiltinProperties = true; } } } isUsingBuiltinProperties = containsBuiltinProperties; if (assignments != null && !assignments.IsEmpty()) { variableReadWritePackage = new VariableReadWritePackageForge( assignments, statementRawInfo.StatementName, services); } else { variableReadWritePackage = null; } if (afterTerminateAssignments != null) { variableReadWritePackageAfterTerminated = new VariableReadWritePackageForge( afterTerminateAssignments, statementRawInfo.StatementName, services); } else { variableReadWritePackageAfterTerminated = null; } }
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); }