Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
        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);
        }