Beispiel #1
0
        public CodegenExpression Make(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var method = parent.MakeChild(typeof(HistoricalIndexLookupStrategyComposite), GetType(), classScope);

            method.Block.DeclareVar<QueryGraphValueEntryRange[]>(
                "rangeGetters",
                NewArrayByLength(typeof(QueryGraphValueEntryRange), Constant(ranges.Length)));
            for (var i = 0; i < ranges.Length; i++) {
                method.Block.AssignArrayElement(
                    Ref("rangeGetters"),
                    Constant(i),
                    ranges[i].Make(null, method, symbols, classScope));
            }

            var hashGetter = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(evaluators, null, multiKeyClasses, method, classScope);
            
            method.Block
                .DeclareVar<HistoricalIndexLookupStrategyComposite>(
                    "strat",
                    NewInstance(typeof(HistoricalIndexLookupStrategyComposite)))
                .SetProperty(Ref("strat"), "LookupStream", Constant(lookupStream))
                .SetProperty(Ref("strat"), "HashGetter", hashGetter)
                .SetProperty(Ref("strat"), "RangeProps", Ref("rangeGetters"))
                .ExprDotMethod(Ref("strat"), "Init")
                .MethodReturn(Ref("strat"));
            return LocalMethod(method);
        }
Beispiel #2
0
        protected override IList<CodegenExpression> AdditionalParams(
            CodegenMethod method,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            IList<CodegenExpression> @params = new List<CodegenExpression>();
            @params.Add(Constant(indexedProps));
            @params.Add(Constant(hashCoercionDesc.CoercionTypes));
            @params.Add(Constant(unique));
            var propertyTypes = EventTypeUtility.GetPropertyTypes(eventType, indexedProps);
            var getters = EventTypeUtility.GetGetters(eventType, indexedProps);
            var getter = MultiKeyCodegen.CodegenGetterMayMultiKey(
                eventType,
                getters,
                propertyTypes,
                hashCoercionDesc.CoercionTypes,
                multiKeyClassRef,
                method,
                classScope);

            @params.Add(getter);
            @params.Add(ConstantNull()); // no fire-and-forget transform for subqueries
            @params.Add(multiKeyClassRef.GetExprMKSerde(method, classScope));

            return @params;
        }
Beispiel #3
0
        public CodegenExpression Make(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var method = parent.MakeChild(typeof(PollResultIndexingStrategyHash), GetType(), classScope);

            var propertyGetters = EventTypeUtility.GetGetters(_eventType, _propertyNames);
            var propertyTypes = EventTypeUtility.GetPropertyTypes(_eventType, _propertyNames);
            var valueGetter = MultiKeyCodegen.CodegenGetterMayMultiKey(
                _eventType,
                propertyGetters,
                propertyTypes,
                _coercionTypes,
                _multiKeyClasses,
                method,
                classScope);

            method.Block
                .DeclareVar<PollResultIndexingStrategyHash>(
                    "strat",
                    NewInstance(typeof(PollResultIndexingStrategyHash)))
                .SetProperty(Ref("strat"), "StreamNum", Constant(_streamNum))
                .SetProperty(Ref("strat"), "PropertyNames", Constant(_propertyNames))
                .SetProperty(Ref("strat"), "ValueGetter", valueGetter)
                .ExprDotMethod(Ref("strat"), "Init")
                .MethodReturn(Ref("strat"));
            return LocalMethod(method);
        }
Beispiel #4
0
        public CodegenExpression Make(
            CodegenMethodScope parent,
            CodegenClassScope classScope)
        {
            var method = parent.MakeChild(typeof(QueryPlanIndexItem), GetType(), classScope);

            var propertyGetters = EventTypeUtility.GetGetters(eventType, HashProps);
            var propertyTypes = EventTypeUtility.GetPropertyTypes(eventType, HashProps);
            var valueGetter = MultiKeyCodegen.CodegenGetterMayMultiKey(
                eventType, propertyGetters, propertyTypes, HashTypes, HashMultiKeyClasses, method, classScope);

            CodegenExpression rangeGetters;
            if (RangeProps.Length == 0) {
                rangeGetters = NewArrayByLength(typeof(EventPropertyValueGetter), Constant(0));
            }
            else {
                var makeMethod = parent.MakeChild(typeof(EventPropertyValueGetter[]), GetType(), classScope);
                makeMethod.Block.DeclareVar<EventPropertyValueGetter[]>(
                    "getters",
                    NewArrayByLength(typeof(EventPropertyValueGetter), Constant(RangeProps.Length)));
                for (var i = 0; i < RangeProps.Length; i++) {
                    var getter = ((EventTypeSPI) eventType).GetGetterSPI(RangeProps[i]);
                    var getterType = eventType.GetPropertyType(RangeProps[i]);
                    var coercionType = RangeTypes == null ? null : RangeTypes[i];
                    var eval = EventTypeUtility.CodegenGetterWCoerce(
                        getter,
                        getterType,
                        coercionType,
                        method,
                        GetType(),
                        classScope);
                    makeMethod.Block.AssignArrayElement(Ref("getters"), Constant(i), eval);
                }

                makeMethod.Block.MethodReturn(Ref("getters"));
                rangeGetters = LocalMethod(makeMethod);
            }

            CodegenExpression multiKeyTransform = MultiKeyCodegen.CodegenMultiKeyFromArrayTransform(
                HashMultiKeyClasses, method, classScope);

            method.Block.MethodReturn(
                NewInstance<QueryPlanIndexItem>(
                    Constant(HashProps),
                    Constant(HashTypes),
                    valueGetter,
                    multiKeyTransform,
                    HashMultiKeyClasses != null ? HashMultiKeyClasses.GetExprMKSerde(method, classScope) : ConstantNull(),
                    Constant(RangeProps),
                    Constant(RangeTypes),
                    rangeGetters,
                    DataInputOutputSerdeForgeExtensions.CodegenArray(RangeSerdes, method, classScope, null),
                    Constant(IsUnique),
                    AdvancedIndexProvisionDesc == null
                        ? ConstantNull()
                        : AdvancedIndexProvisionDesc.CodegenMake(method, classScope)));
            return LocalMethod(method);
        }
        public CodegenMethod InitializeCodegen(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            // add aggregation row+factory+serde as inner classes
            var aggregationClassNames = new AggregationClassNames();
            var inners = AggregationServiceFactoryCompiler.MakeTable(
                AggregationCodegenRowLevelDesc.FromTopOnly(_plan.AggDesc),
                GetType(),
                classScope,
                aggregationClassNames,
                _className);
            classScope.AddInnerClasses(inners);

            var method = parent.MakeChild(typeof(StatementAgentInstanceFactoryCreateTable), GetType(), classScope);

            CodegenExpression primaryKeyGetter = MultiKeyCodegen.CodegenGetterMayMultiKey(
                _plan.InternalEventType, 
                _plan.PrimaryKeyGetters,
                _plan.PrimaryKeyTypes,
                null,
                _plan.PrimaryKeyMultikeyClasses,
                method,
                classScope);
            CodegenExpression fafTransform = MultiKeyCodegen.CodegenMultiKeyFromArrayTransform(
                _plan.PrimaryKeyMultikeyClasses,
                method,
                classScope);
            CodegenExpression intoTableTransform = MultiKeyCodegen.CodegenMultiKeyFromMultiKeyTransform(
                _plan.PrimaryKeyMultikeyClasses,
                method,
                classScope);

            var propertyForgeEval = DataInputOutputSerdeForgeExtensions.CodegenArray(
                _plan.InternalEventTypePropertySerdes,
                method,
                classScope,
                ExprDotName(symbols.GetAddInitSvc(method), EPStatementInitServicesConstants.EVENTTYPERESOLVER));
            
            method.Block
                .DeclareVar<StatementAgentInstanceFactoryCreateTable>("saiff", NewInstance(typeof(StatementAgentInstanceFactoryCreateTable)))
                .SetProperty(Ref("saiff"), "TableName", Constant(_tableName))
                .SetProperty(Ref("saiff"), "PublicEventType", EventTypeUtility.ResolveTypeCodegen(_plan.PublicEventType, symbols.GetAddInitSvc(method)))
                .SetProperty(Ref("saiff"), "EventToPublic", MakeEventToPublic(method, symbols, classScope))
                .SetProperty(Ref("saiff"), "AggregationRowFactory", NewInstanceInner(aggregationClassNames.RowFactoryTop, Ref("this")))
                .SetProperty(Ref("saiff"), "AggregationSerde", NewInstanceInner(aggregationClassNames.RowSerdeTop, Ref("this")))
                .SetProperty(Ref("saiff"), "PrimaryKeyGetter", primaryKeyGetter)
                .SetProperty(Ref("saiff"), "PrimaryKeySerde", _plan.PrimaryKeyMultikeyClasses.GetExprMKSerde(method, classScope))
                .SetProperty(Ref("saiff"), "PropertyForges", propertyForgeEval)
                .SetProperty(Ref("saiff"), "PrimaryKeyObjectArrayTransform", fafTransform)
                .SetProperty(Ref("saiff"), "PrimaryKeyIntoTableTransform", intoTableTransform)

                .ExprDotMethod(symbols.GetAddInitSvc(method), "AddReadyCallback", Ref("saiff"))
                .MethodReturn(Ref("saiff"));
            return method;
        }
        public static CodegenMethod GenerateGroupKeySingleCodegen(
            ExprNode[] groupKeyExpressions,
            MultiKeyClassRef optionalMultiKeyClasses,
            CodegenClassScope classScope,
            CodegenInstanceAux instance)
        {
            Consumer<CodegenMethod> code = methodNode => {
                string[] expressions = null;
                if (classScope.IsInstrumented) {
                    expressions = ExprNodeUtilityPrint.ToExpressionStringsMinPrecedence(groupKeyExpressions);
                }

                methodNode.Block.Apply(
                    Instblock(
                        classScope,
                        "qResultSetProcessComputeGroupKeys",
                        ExprForgeCodegenNames.REF_ISNEWDATA,
                        Constant(expressions),
                        REF_EPS));


                if (optionalMultiKeyClasses != null && optionalMultiKeyClasses.ClassNameMK != null) {
                    var method = MultiKeyCodegen.CodegenMethod(groupKeyExpressions, optionalMultiKeyClasses, methodNode, classScope);
                    methodNode
                        .Block
                        .DeclareVar<object>("key", LocalMethod(method, REF_EPS, ExprForgeCodegenNames.REF_ISNEWDATA, MEMBER_AGENTINSTANCECONTEXT))
                        .Apply(Instblock(classScope, "aResultSetProcessComputeGroupKeys", ExprForgeCodegenNames.REF_ISNEWDATA, Ref("key")))
                        .MethodReturn(Ref("key"));
                    return;
                }

                if (groupKeyExpressions.Length > 1) {
                    throw new IllegalStateException("Multiple group-by expression and no multikey");
                }

                var expression = CodegenLegoMethodExpression.CodegenExpression(groupKeyExpressions[0].Forge, methodNode, classScope);
                methodNode
                    .Block
                    .DeclareVar<object>("key", LocalMethod(expression, REF_EPS, ExprForgeCodegenNames.REF_ISNEWDATA, MEMBER_AGENTINSTANCECONTEXT))
                    .Apply(Instblock(classScope, "aResultSetProcessComputeGroupKeys", ExprForgeCodegenNames.REF_ISNEWDATA, Ref("key")))
                    .MethodReturn(Ref("key"));
            };

            return instance.Methods.AddMethod(
                typeof(object),
                "GenerateGroupKeySingle",
                CodegenNamedParam.From(
                    typeof(EventBean[]),
                    NAME_EPS,
                    typeof(bool),
                    ResultSetProcessorCodegenNames.NAME_ISNEWDATA),
                typeof(ResultSetProcessorUtil),
                classScope,
                code);
        }
        public CodegenExpression Make(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var methodNode = parent.MakeChild(typeof(SubordTableLookupStrategyFactory), GetType(), classScope);
            if (_isStrictKeys) {
                int[] keyStreamNums = IntArrayUtil.Copy(_keyStreamNumbers);
                var keyStreamTypes = _outerStreamTypesZeroIndexed;
                if (isNWOnTrigger) {
                    keyStreamTypes = EventTypeUtility.ShiftRight(_outerStreamTypesZeroIndexed);
                    for (var i = 0; i < keyStreamNums.Length; i++) {
                        keyStreamNums[i] = keyStreamNums[i] + 1;
                    }
                }

                var forges = ExprNodeUtilityQuery.ForgesForProperties(
                    keyStreamTypes, _hashStrictKeys, keyStreamNums);
                var eval = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(
                    forges,
                    _hashKeyCoercionTypes.CoercionTypes,
                    _hashMultikeyClasses,
                    methodNode,
                    classScope);

                methodNode.Block.MethodReturn(
                    NewInstance<SubordHashedTableLookupStrategyPropFactory>(
                        Constant(_hashStrictKeys),
                        Constant(keyStreamNums),
                        eval));
                return LocalMethod(methodNode);
            }
            else {
                var forges = new ExprForge[_hashKeys.Count];
                for (var i = 0; i < _hashKeys.Count; i++) {
                    forges[i] = _hashKeys[i].HashKey.KeyExpr.Forge;
                }

                var expressions = ExprNodeUtilityPrint.ToExpressionStringsMinPrecedence(forges);
                var eval = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(
                    forges,
                    _hashKeyCoercionTypes.CoercionTypes,
                    _hashMultikeyClasses,
                    methodNode,
                    classScope);
                
                methodNode.Block.MethodReturn(
                    NewInstance<SubordHashedTableLookupStrategyExprFactory>(
                        Constant(expressions),
                        eval,
                        Constant(isNWOnTrigger),
                        Constant(_numStreamsOuter)));
                return LocalMethod(methodNode);
            }
        }
        public override ICollection<CodegenExpression> AdditionalParams(
            CodegenMethod method,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var forges = QueryGraphValueEntryHashKeyedForge.GetForges(HashKeys);
            var types = ExprNodeUtilityQuery.GetExprResultTypes(forges);

            // we take coercion types from the index plan as the index plan is always accurate but not always available (for tables it is not)
            Type[] coercionTypes;
            var indexForge = _indexSpecs.Items.Get(IndexNum[0]);
            if (indexForge != null) {
                coercionTypes = indexForge.HashTypes;
            }
            else {
                coercionTypes = _optionalCoercionTypes;
            }

            CodegenExpression getter;
            EventType eventType = typesPerStream[LookupStream];
            EventPropertyGetterSPI[] getterSPIS = QueryGraphValueEntryHashKeyedForge.GetGettersIfPropsOnly(_hashKeys);
            if (indexForge != null) {
                if (getterSPIS != null) {
                    getter = MultiKeyCodegen.CodegenGetterMayMultiKey(
                        eventType,
                        getterSPIS,
                        types,
                        coercionTypes,
                        indexForge.HashMultiKeyClasses,
                        method,
                        classScope);
                }
                else {
                    getter = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(forges, coercionTypes, indexForge.HashMultiKeyClasses, method, classScope);
                }
            }
            else {
                if (getterSPIS != null) {
                    getter = MultiKeyCodegen.CodegenGetterMayMultiKey(
                        eventType,
                        getterSPIS,
                        types,
                        coercionTypes,
                        _optionalEPLTableLookupMultiKey,
                        method,
                        classScope);
                }
                else {
                    getter = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(forges, coercionTypes, _optionalEPLTableLookupMultiKey, method, classScope);
                }
            }

            return Collections.SingletonList(getter);
        }
        public CodegenExpression Make(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var method = parent.MakeChild(typeof(PollResultIndexingStrategyComposite), GetType(), classScope);

            var hashGetter = ConstantNull();
            if (optHashPropertyNames != null) {
                var propertyGetters = EventTypeUtility.GetGetters(eventType, optHashPropertyNames);
                var propertyTypes = EventTypeUtility.GetPropertyTypes(eventType, optHashPropertyNames);
                hashGetter = MultiKeyCodegen.CodegenGetterMayMultiKey(
                    eventType,
                    propertyGetters,
                    propertyTypes,
                    optHashCoercedTypes,
                    optHashMultiKeyClasses,
                    method,
                    classScope);
            }

            method.Block.DeclareVar<EventPropertyValueGetter[]>(
                "rangeGetters",
                NewArrayByLength(typeof(EventPropertyValueGetter), Constant(rangeProps.Length)));
            for (var i = 0; i < rangeProps.Length; i++) {
                var propertyType = eventType.GetPropertyType(rangeProps[i]);
                var getterSPI = ((EventTypeSPI) eventType).GetGetterSPI(rangeProps[i]);
                var getter = EventTypeUtility.CodegenGetterWCoerce(
                    getterSPI,
                    propertyType,
                    rangeTypes[i],
                    method,
                    GetType(),
                    classScope);
                method.Block.AssignArrayElement(Ref("rangeGetters"), Constant(i), getter);
            }

            method.Block
                .DeclareVar<PollResultIndexingStrategyComposite>(
                    "strat",
                    NewInstance(typeof(PollResultIndexingStrategyComposite)))
                .SetProperty(Ref("strat"), "StreamNum", Constant(streamNum))
                .SetProperty(Ref("strat"), "OptionalKeyedProps", Constant(optHashPropertyNames))
                .SetProperty(Ref("strat"), "OptKeyCoercedTypes", Constant(optHashCoercedTypes))
                .SetProperty(Ref("strat"), "HashGetter", hashGetter)
                .SetProperty(Ref("strat"), "RangeProps", Constant(rangeProps))
                .SetProperty(Ref("strat"), "OptRangeCoercedTypes", Constant(rangeTypes))
                .SetProperty(Ref("strat"), "RangeGetters", Ref("rangeGetters"))
                .ExprDotMethod(Ref("strat"), "Init")
                .MethodReturn(Ref("strat"));
            return LocalMethod(method);
        }
 public CodegenExpression Make(
     CodegenMethodScope parent,
     CodegenClassScope classScope)
 {
     var method = parent.MakeChild(typeof(StatementInformationalsRuntime), GetType(), classScope);
     var info = Ref("info");
     var annotationsExpr = _annotations == null
         ? ConstantNull()
         : LocalMethod(MakeAnnotations(typeof(Attribute[]), _annotations, method, classScope));
     method.Block
         .DeclareVar<StatementInformationalsRuntime>(
             info.Ref,
             NewInstance(typeof(StatementInformationalsRuntime)))
         .SetProperty(info, "StatementNameCompileTime", Constant(_statementNameCompileTime))
         .SetProperty(info, "IsAlwaysSynthesizeOutputEvents", Constant(_alwaysSynthesizeOutputEvents))
         .SetProperty(info, "OptionalContextName", Constant(_optionalContextName))
         .SetProperty(info, "OptionalContextModuleName", Constant(_optionalContextModuleName))
         .SetProperty(info, "OptionalContextVisibility", Constant(_optionalContextVisibility))
         .SetProperty(info, "IsCanSelfJoin", Constant(_canSelfJoin))
         .SetProperty(info, "HasSubquery", Constant(_hasSubquery))
         .SetProperty(info, "IsNeedDedup", Constant(_needDedup))
         .SetProperty(info, "IsStateless", Constant(_stateless))
         .SetProperty(info, "Annotations", annotationsExpr)
         .SetProperty(info, "UserObjectCompileTime", SerializerUtil.ExpressionForUserObject(_userObjectCompileTime))
         .SetProperty(info, "NumFilterCallbacks", Constant(_numFilterCallbacks))
         .SetProperty(info, "NumScheduleCallbacks", Constant(_numScheduleCallbacks))
         .SetProperty(info, "NumNamedWindowCallbacks", Constant(_numNamedWindowCallbacks))
         .SetProperty(info, "StatementType", Constant(_statementType))
         .SetProperty(info, "Priority", Constant(_priority))
         .SetProperty(info, "IsPreemptive", Constant(_preemptive))
         .SetProperty(info, "HasVariables", Constant(_hasVariables))
         .SetProperty(info, "IsWritesToTables", Constant(_writesToTables))
         .SetProperty(info, "HasTableAccess", Constant(_hasTableAccess))
         .SetProperty(info, "SelectClauseTypes", Constant(_selectClauseTypes))
         .SetProperty(info, "SelectClauseColumnNames", Constant(_selectClauseColumnNames))
         .SetProperty(info, "IsForClauseDelivery", Constant(_forClauseDelivery))
         .SetProperty(info, "GroupDeliveryEval", MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(_groupDelivery, null, _groupDeliveryMultiKey, method, classScope))
         .SetProperty(info, "Properties", MakeProperties(_properties, method, classScope))
         .SetProperty(info, "HasMatchRecognize", Constant(_hasMatchRecognize))
         .SetProperty(info, "AuditProvider", MakeAuditProvider(method, classScope))
         .SetProperty(info, "IsInstrumented", Constant(_instrumented))
         .SetProperty(info, "InstrumentationProvider", MakeInstrumentationProvider(method, classScope))
         .SetProperty(info, "SubstitutionParamTypes", MakeSubstitutionParamTypes())
         .SetProperty(info, "SubstitutionParamNames", MakeSubstitutionParamNames(method, classScope))
         .SetProperty(info, "InsertIntoLatchName", Constant(_insertIntoLatchName))
         .SetProperty(info, "IsAllowSubscriber", Constant(_allowSubscriber))
         .SetProperty(info, "OnScripts", MakeOnScripts(_onScripts, method, classScope))
         .MethodReturn(info);
     return LocalMethod(method);
 }
Beispiel #11
0
        public CodegenExpression MakeCodegen(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var method = parent.MakeChild(typeof(ContextControllerDetailKeyed), GetType(), classScope);

            method.Block.DeclareVar<ContextControllerDetailKeyedItem[]>(
                "items",
                NewArrayByLength(typeof(ContextControllerDetailKeyedItem), Constant(Items.Count)));
            for (var i = 0; i < Items.Count; i++) {
                method.Block.AssignArrayElement(
                    "items",
                    Constant(i),
                    Items[i].MakeCodegen(method, symbols, classScope));
            }

            method.Block
                .DeclareVar<ContextControllerDetailKeyed>("detail", NewInstance(typeof(ContextControllerDetailKeyed)))
                .SetProperty(Ref("detail"), "Items", Ref("items"))
                .SetProperty(Ref("detail"), "MultiKeyFromObjectArray", MultiKeyCodegen.CodegenMultiKeyFromArrayTransform(MultiKeyClassRef, method, classScope));

            if (OptionalInit != null && !OptionalInit.IsEmpty()) {
                method.Block.DeclareVar<ContextConditionDescriptorFilter[]>(
                    "init",
                    NewArrayByLength(typeof(ContextConditionDescriptorFilter), Constant(OptionalInit.Count)));
                for (var i = 0; i < OptionalInit.Count; i++) {
                    method.Block.AssignArrayElement(
                        "init",
                        Constant(i),
                        Cast(
                            typeof(ContextConditionDescriptorFilter),
                            OptionalInit[i].Make(method, symbols, classScope)));
                }

                method.Block.SetProperty(Ref("detail"), "OptionalInit", Ref("init"));
            }

            if (OptionalTermination != null) {
                method.Block.SetProperty(
                    Ref("detail"),
                    "OptionalTermination",
                    OptionalTermination.Make(method, symbols, classScope));
            }

            method.Block.Expression(
                    ExprDotMethodChain(symbols.GetAddInitSvc(method)).Add("AddReadyCallback", Ref("detail")))
                .MethodReturn(Ref("detail"));
            return LocalMethod(method);
        }
Beispiel #12
0
        public static void Assign(
            ExprNode[] criteriaExpressions,
            MultiKeyClassRef multiKeyClassNames,
            CodegenMethod method,
            CodegenExpressionRef factory,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            CodegenExpression criteriaEval = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(criteriaExpressions, null, multiKeyClassNames, method, classScope);

            method.Block
            .SetProperty(factory, "CriteriaEval", criteriaEval)
            .SetProperty(factory, "CriteriaTypes", Constant(ExprNodeUtilityQuery.GetExprResultTypes(criteriaExpressions)))
            .SetProperty(factory, "KeySerde", multiKeyClassNames.GetExprMKSerde(method, classScope));
        }
Beispiel #13
0
        public CodegenExpression Make(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var method = parent.MakeChild(typeof(PropertyCompositeEventTableFactoryFactory), GetType(), classScope);

            var hashGetter = ConstantNull();
            if (_optKeyProps != null && _optKeyProps.Length > 0) {
                var propertyTypes = EventTypeUtility.GetPropertyTypes(_eventType, _optKeyProps);
                var getters = EventTypeUtility.GetGetters(_eventType, _optKeyProps);
                hashGetter = MultiKeyCodegen.CodegenGetterMayMultiKey(
                    _eventType, getters, propertyTypes, _optKeyTypes, _hashMultikeyClasses, method, classScope);
            }

            method.Block.DeclareVar<EventPropertyValueGetter[]>(
                "rangeGetters",
                NewArrayByLength(typeof(EventPropertyValueGetter), Constant(_rangeProps.Length)));
            for (var i = 0; i < _rangeProps.Length; i++) {
                var propertyType = _eventType.GetPropertyType(_rangeProps[i]);
                var getterSPI = ((EventTypeSPI) _eventType).GetGetterSPI(_rangeProps[i]);
                var getter = EventTypeUtility.CodegenGetterWCoerce(
                    getterSPI,
                    propertyType,
                    _rangeTypes[i],
                    method,
                    GetType(),
                    classScope);
                method.Block.AssignArrayElement(Ref("rangeGetters"), Constant(i), getter);
            }

            IList<CodegenExpression> @params = new List<CodegenExpression>();
            @params.Add(Constant(_indexedStreamNum));
            @params.Add(Constant(_subqueryNum));
            @params.Add(Constant(_isFireAndForget));
            @params.Add(Constant(_optKeyProps));
            @params.Add(Constant(_optKeyTypes));
            @params.Add(hashGetter);
            @params.Add(_hashMultikeyClasses.GetExprMKSerde(method, classScope));
            @params.Add(Constant(_rangeProps));
            @params.Add(Constant(_rangeTypes));
            @params.Add(Ref("rangeGetters"));
            @params.Add(DataInputOutputSerdeForgeExtensions.CodegenArray(_rangeSerdes, method, classScope, null));

            method.Block.MethodReturn(
                NewInstance<PropertyCompositeEventTableFactoryFactory>(@params.ToArray()));
            return LocalMethod(method);
        }
        public CodegenExpression Make(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var method = parent.MakeChild(typeof(HistoricalIndexLookupStrategyHash), GetType(), classScope);
            var evaluator = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(
                _evaluators, _coercionTypes, _multiKeyClassRef, method, classScope);

            method.Block
                .DeclareVar<HistoricalIndexLookupStrategyHash>(
                    "strat",
                    NewInstance(typeof(HistoricalIndexLookupStrategyHash)))
                .SetProperty(Ref("strat"), "LookupStream", Constant(_lookupStream))
                .SetProperty(Ref("strat"), "Evaluator", evaluator)
                .MethodReturn(Ref("strat"));
            return LocalMethod(method);
        }
Beispiel #15
0
 public void ProvideCodegen(
     CodegenMethod method,
     SAIFFInitializeSymbol symbols,
     CodegenClassScope classScope)
 {
     method.Block.MethodReturn(
         NewInstance<OutputProcessViewDirectDistinctOrAfterFactory>(
             _outputStrategyPostProcessForge == null
                 ? ConstantNull()
                 : _outputStrategyPostProcessForge.Make(method, symbols, classScope),
             Constant(_isDistinct),
             MultiKeyCodegen.CodegenGetterEventDistinct(
                 _isDistinct, ResultEventType, DistinctMultiKey, method, classScope),
             AfterTimePeriod == null
                 ? ConstantNull()
                 : AfterTimePeriod.TimePeriodComputeForge.MakeEvaluator(method, classScope),
             Constant(AfterConditionNumberOfEvents),
             EventTypeUtility.ResolveTypeCodegen(ResultEventType, symbols.GetAddInitSvc(method))));
 }
        public CodegenExpression MakeCodegen(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            CodegenMethod method = parent.MakeChild(typeof(SubSelectStrategyFactoryIndexShare), GetType(), classScope);

            CodegenExpression groupKeyEval = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(_groupKeys, null, _groupByMultiKey, method, classScope);

            var tableExpr = _table == null
                                ? ConstantNull()
                                : TableDeployTimeResolver.MakeResolveTable(_table, symbols.GetAddInitSvc(method));

            var namedWindowExpr = _namedWindow == null
                                ? ConstantNull()
                                : NamedWindowDeployTimeResolver.MakeResolveNamedWindow(_namedWindow, symbols.GetAddInitSvc(method));

            var aggregationServiceFactoryExpr = SubSelectStrategyFactoryLocalViewPreloadedForge.MakeAggregationService(
                _subqueryNumber,
                _aggregationServiceForgeDesc,
                classScope,
                method,
                symbols);
            var filterExprEvalExpr = _filterExprEval == null
                                ? ConstantNull()
                                : ExprNodeUtilityCodegen.CodegenEvaluatorNoCoerce(_filterExprEval, method, GetType(), classScope);

            var queryPlanExpr = _queryPlan == null
                                ? ConstantNull()
                                : _queryPlan.Make(method, symbols, classScope);

            method.Block
            .DeclareVar <SubSelectStrategyFactoryIndexShare>("s", NewInstance(typeof(SubSelectStrategyFactoryIndexShare)))
            .SetProperty(Ref("s"), "Table", tableExpr)
            .SetProperty(Ref("s"), "NamedWindow", namedWindowExpr)
            .SetProperty(Ref("s"), "AggregationServiceFactory", aggregationServiceFactoryExpr)
            .SetProperty(Ref("s"), "FilterExprEval", filterExprEvalExpr)
            .SetProperty(Ref("s"), "GroupKeyEval", groupKeyEval)
            .SetProperty(Ref("s"), "QueryPlan", queryPlanExpr)
            .MethodReturn(Ref("s"));
            return(LocalMethod(method));
        }
        public override ICollection<CodegenExpression> AdditionalParams(
            CodegenMethod method,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var hashGetter = ConstantNull();
            if (!_hashKeys.IsEmpty()) {
                var indexForge = _indexSpecs.Items.Get(IndexNum[0]);
                var forges = QueryGraphValueEntryHashKeyedForge.GetForges(_hashKeys.ToArray());
                if (indexForge != null) {
                    hashGetter = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(
                        forges,
                        _hashCoercionTypes,
                        indexForge.HashMultiKeyClasses,
                        method,
                        classScope);
                } else {
                    hashGetter = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(
                        forges,
                        _hashCoercionTypes,
                        _optionalEPLTableLookupMultiKey,
                        method,
                        classScope);
                }
            }

            var rangeGetters = method.MakeChild(typeof(QueryGraphValueEntryRange[]), GetType(), classScope);
            rangeGetters.Block.DeclareVar<QueryGraphValueEntryRange[]>(
                "rangeGetters",
                NewArrayByLength(typeof(QueryGraphValueEntryRange), Constant(_rangeKeyPairs.Count)));
            for (var i = 0; i < _rangeKeyPairs.Count; i++) {
                var optCoercionType = _optRangeCoercionTypes == null ? null : _optRangeCoercionTypes[i];
                rangeGetters.Block.AssignArrayElement(
                    Ref("rangeGetters"),
                    Constant(i),
                    _rangeKeyPairs[i].Make(optCoercionType, rangeGetters, symbols, classScope));
            }

            rangeGetters.Block.MethodReturn(Ref("rangeGetters"));

            return Arrays.AsList(hashGetter, LocalMethod(rangeGetters));
        }
Beispiel #18
0
        public CodegenExpression Make(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var method = parent.MakeChild(typeof(SubordCompositeTableLookupStrategyFactory), GetType(), classScope);

            IList<string> expressions = new List<string>();
            var hashEval = ConstantNull();
            if (_hashKeys != null && !_hashKeys.IsEmpty()) {
                var forges = new ExprForge[_hashKeys.Count];
                for (var i = 0; i < _hashKeys.Count; i++) {
                    forges[i] = _hashKeys[i].HashKey.KeyExpr.Forge;
                }

                expressions.AddAll(ExprNodeUtilityPrint.ToExpressionStringsMinPrecedence(forges));
                hashEval = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(forges, _hashTypes, _hashMultikeyClasses, method, classScope);
            }

            method.Block.DeclareVar<QueryGraphValueEntryRange[]>(
                "rangeEvals",
                NewArrayByLength(typeof(QueryGraphValueEntryRange), Constant(_rangeProps.Count)));
            for (var i = 0; i < _rangeProps.Count; i++) {
                CodegenExpression rangeEval = _rangeProps[i]
                    .RangeInfo.Make(
                        _coercionRangeTypes[i],
                        parent,
                        symbols,
                        classScope);
                method.Block.AssignArrayElement(Ref("rangeEvals"), Constant(i), rangeEval);
            }

            method.Block.MethodReturn(
                NewInstance<SubordCompositeTableLookupStrategyFactory>(
                    Constant(_isNWOnTrigger),
                    Constant(_numStreams),
                    Constant(expressions.ToArray()),
                    hashEval,
                    Ref("rangeEvals")));
            return LocalMethod(method);
        }
        public CodegenExpression MakeCodegen(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            CodegenMethod method = parent.MakeChild(typeof(SubSelectStrategyFactoryLocalViewPreloaded), GetType(), classScope);

            CodegenExpression groupKeyEval = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(_groupKeys, null, _groupByMultiKeyClasses, method, classScope);

            method.Block
            .DeclareVar <SubSelectStrategyFactoryLocalViewPreloaded>("factory", NewInstance(typeof(SubSelectStrategyFactoryLocalViewPreloaded)))
            .SetProperty(Ref("factory"), "SubqueryNumber", Constant(_subqueryNumber))
            .SetProperty(Ref("factory"), "ViewFactories", ViewFactoryForgeUtil.CodegenForgesWInit(_viewForges, 0, _subqueryNumber, method, symbols, classScope))
            .SetProperty(Ref("factory"), "ViewResourceDelegate", _viewResourceDelegateDesc.ToExpression())
            .SetProperty(Ref("factory"), "EventTableFactoryFactory", _lookupStrategy.First.Make(method, symbols, classScope))
            .SetProperty(Ref("factory"), "LookupStrategyFactory", _lookupStrategy.Second.Make(method, symbols, classScope))
            .SetProperty(Ref("factory"), "AggregationServiceFactory", MakeAggregationService(_subqueryNumber, _aggregationServiceForgeDesc, classScope, method, symbols))
            .SetProperty(Ref("factory"), "CorrelatedSubquery", Constant(_correlatedSubquery))
            .SetProperty(Ref("factory"), "GroupKeyEval", groupKeyEval)
            .SetProperty(Ref("factory"), "FilterExprEval", _filterExprNode == null
                                                ? ConstantNull()
                                                : ExprNodeUtilityCodegen.CodegenEvaluatorNoCoerce(_filterExprNode.Forge, method, GetType(), classScope));

            if (_namedWindow != null)
            {
                method.Block.SetProperty(
                    Ref("factory"), "NamedWindow", NamedWindowDeployTimeResolver.MakeResolveNamedWindow(_namedWindow, symbols.GetAddInitSvc(method)));
                if (_namedWindowFilterExpr != null)
                {
                    method.Block
                    .SetProperty(Ref("factory"), "NamedWindowFilterQueryGraph",
                                 _namedWindowFilterQueryGraph.Make(method, symbols, classScope))
                    .SetProperty(Ref("factory"), "NamedWindowFilterExpr",
                                 ExprNodeUtilityCodegen.CodegenEvaluator(_namedWindowFilterExpr.Forge, method, GetType(), classScope));
                }
            }

            method.Block.MethodReturn(Ref("factory"));
            return(LocalMethod(method));
        }
Beispiel #20
0
 protected override void InlineInitializeOnTriggerSpecific(
     CodegenExpressionRef saiff,
     CodegenMethod method,
     SAIFFInitializeSymbol symbols,
     CodegenClassScope classScope)
 {
     method.Block
         .SetProperty(
             saiff,
             "ResultSetProcessorFactoryProvider",
             NewInstanceInner(
                 resultSetProcessorProviderClassName,
                 symbols.GetAddInitSvc(method),
                 Ref("statementFields")))
         .SetProperty(saiff, "IsInsertInto", Constant(insertInto))
         .SetProperty(saiff, "IsAddToFront", Constant(addToFront))
         .SetProperty(saiff, "IsSelectAndDelete", Constant(selectAndDelete))
         .SetProperty(saiff, "IsDistinct", Constant(distinct))
         .SetProperty(
             saiff,
             "DistinctKeyGetter",
             MultiKeyCodegen.CodegenGetterEventDistinct(
                 distinct,
                 ResultEventType,
                 distinctMultiKey,
                 method,
                 classScope))
         .SetProperty(
             saiff,
             "OptionalInsertIntoTable",
             optionalInsertIntoTable == null
                 ? ConstantNull()
                 : TableDeployTimeResolver.MakeResolveTable(
                     optionalInsertIntoTable,
                     symbols.GetAddInitSvc(method)));
 }
Beispiel #21
0
        public CodegenExpression MakeCodegen(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var method = parent.MakeChild(typeof(ContextControllerDetailInitiatedTerminated), GetType(), classScope);

            var distinctEval = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(
                DistinctExpressions, null, DistinctMultiKey, method, classScope);

            method.Block
                .DeclareVar<ContextControllerDetailInitiatedTerminated>(
                    "detail",
                    NewInstance(typeof(ContextControllerDetailInitiatedTerminated)))
                .SetProperty(Ref("detail"), "StartCondition", StartCondition.Make(method, symbols, classScope))
                .SetProperty(Ref("detail"), "EndCondition", EndCondition.Make(method, symbols, classScope))
                .SetProperty(Ref("detail"), "IsOverlapping", Constant(IsOverlapping))
                .SetProperty(Ref("detail"), "DistinctEval", distinctEval)
                .SetProperty(Ref("detail"), "DistinctTypes", DistinctExpressions == null ? ConstantNull() : Constant(ExprNodeUtilityQuery.GetExprResultTypes(DistinctExpressions)))
                .SetProperty(Ref("detail"), "DistinctSerde", DistinctMultiKey == null ? ConstantNull() : DistinctMultiKey.GetExprMKSerde(method, classScope));

            method.Block.MethodReturn(Ref("detail"));
            return LocalMethod(method);
        }
Beispiel #22
0
 public void MakeMethod(
     CodegenMethod method,
     SAIFFInitializeSymbol symbols,
     CodegenClassScope classScope)
 {
     var select = Ref("select");
     method.Block
         .DeclareVar<FAFQueryMethodSelect>(select.Ref, NewInstance(typeof(FAFQueryMethodSelect)))
         .SetProperty(
             select,
             "Annotations",
             LocalMethod(
                 AnnotationUtil.MakeAnnotations(typeof(Attribute[]), _desc.Annotations, method, classScope)))
         .SetProperty(
             select,
             "Processors",
             FireAndForgetProcessorForgeExtensions.MakeArray(_desc.Processors, method, symbols, classScope))
         .DeclareVar(
             _classNameResultSetProcessor,
             "rsp",
             NewInstanceInner(_classNameResultSetProcessor, symbols.GetAddInitSvc(method), Ref("statementFields")))
         .SetProperty(
             select,
             "ResultSetProcessorFactoryProvider",
             Ref("rsp"))
         .SetProperty(
             select,
             "QueryGraph",
             _desc.QueryGraph.Make(method, symbols, classScope))
         .SetProperty(
             select,
             "WhereClause",
             _desc.WhereClause == null
                 ? ConstantNull()
                 : ExprNodeUtilityCodegen.CodegenEvaluator(
                     _desc.WhereClause.Forge,
                     method,
                     GetType(),
                     classScope))
         .SetProperty(
             select,
             "JoinSetComposerPrototype",
             _desc.Joins == null ? ConstantNull() : _desc.Joins.Make(method, symbols, classScope))
         .SetProperty(
             select,
             "ConsumerFilters",
             ExprNodeUtilityCodegen.CodegenEvaluators(
                 _desc.ConsumerFilters,
                 method,
                 GetType(),
                 classScope))
         .SetProperty(
             select,
             "ContextName",
             Constant(_desc.ContextName))
         .SetProperty(
             select,
             "TableAccesses",
             ExprTableEvalStrategyUtil.CodegenInitMap(
                 _desc.TableAccessForges,
                 GetType(),
                 method,
                 symbols,
                 classScope))
         .SetProperty(
             select,
             "HasTableAccess",
             Constant(_desc.HasTableAccess))
         .SetProperty(
             select,
             "IsDistinct",
             Constant(_desc.IsDistinct))
         .SetProperty(
             select,
             "DistinctKeyGetter",
             MultiKeyCodegen.CodegenGetterEventDistinct(
                 _desc.IsDistinct,
                 _desc.ResultSetProcessor.ResultEventType,
                 _desc.DistinctMultiKey,
                 method,
                 classScope))
         .SetProperty(
             select,
             "Subselects",
             SubSelectFactoryForge.CodegenInitMap(
                 _desc.SubselectForges,
                 GetType(),
                 method,
                 symbols,
                 classScope))
         .MethodReturn(select);
 }
        public void ProviderCodegen(
            CodegenMethod method,
            CodegenClassScope classScope,
            AggregationClassNames classNames)
        {
            method.Block.DeclareVar<AggregationLocalGroupByLevel>("optionalTop", ConstantNull());
            if (localGroupByPlan.OptionalLevelTopForge != null) {
                method.Block.AssignRef(
                    "optionalTop",
                    localGroupByPlan.OptionalLevelTopForge.ToExpression(
                        classNames.RowFactoryTop,
                        classNames.RowSerdeTop,
                        ConstantNull(),
                        method,
                        classScope));
            }

            int numLevels = localGroupByPlan.AllLevelsForges.Length;
            method.Block.DeclareVar<AggregationLocalGroupByLevel[]>(
                "levels",
                NewArrayByLength(typeof(AggregationLocalGroupByLevel), Constant(numLevels)));
            for (var i = 0; i < numLevels; i++) {
                AggregationLocalGroupByLevelForge forge = localGroupByPlan.AllLevelsForges[i];
                CodegenExpression eval = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(
                    forge.PartitionForges,
                    null,
                    forge.PartitionMKClasses,
                    method,
                    classScope);
                method.Block.AssignArrayElement(
                    "levels",
                    Constant(i),
                    localGroupByPlan.AllLevelsForges[i]
                        .ToExpression(
                            classNames.GetRowFactoryPerLevel(i),
                            classNames.GetRowSerdePerLevel(i),
                            eval,
                            method,
                            classScope));
            }

            method.Block.DeclareVar<AggregationLocalGroupByColumn[]>(
                "columns",
                NewArrayByLength(
                    typeof(AggregationLocalGroupByColumn),
                    Constant(localGroupByPlan.ColumnsForges.Length)));
            var rowLevelDesc = RowLevelDesc;
            for (var i = 0; i < localGroupByPlan.ColumnsForges.Length; i++) {
                AggregationLocalGroupByColumnForge col = localGroupByPlan.ColumnsForges[i];
                int fieldNum;
                if (hasGroupBy && col.IsDefaultGroupLevel) {
                    AggregationCodegenRowDetailDesc levelDesc = rowLevelDesc.OptionalAdditionalRows[col.LevelNum];
                    fieldNum = GetRowFieldNum(col, levelDesc);
                }
                else if (col.LevelNum == -1) {
                    AggregationCodegenRowDetailDesc levelDesc = rowLevelDesc.OptionalTopRow;
                    fieldNum = GetRowFieldNum(col, levelDesc);
                }
                else {
                    AggregationCodegenRowDetailDesc levelDesc = rowLevelDesc.OptionalAdditionalRows[col.LevelNum];
                    fieldNum = GetRowFieldNum(col, levelDesc);
                }

                method.Block.AssignArrayElement(
                    "columns",
                    Constant(i),
                    localGroupByPlan.ColumnsForges[i].ToExpression(fieldNum));
            }

            method.Block
                .DeclareVar<AggregationServiceFactory>(
                    "svcFactory",
                    NewInstanceInner(classNames.ServiceFactory, Ref("this")))
                .MethodReturn(
                    ExprDotMethodChain(EPStatementInitServicesConstants.REF)
                        .Get(AGGREGATIONSERVICEFACTORYSERVICE)
                        .Add(
                            "GroupLocalGroupBy",
                            Ref("svcFactory"),
                            useFlags.ToExpression(),
                            Constant(hasGroupBy),
                            Ref("optionalTop"),
                            Ref("levels"),
                            Ref("columns")));
        }
Beispiel #24
0
 public void ProvideCodegen(
     CodegenMethod method,
     SAIFFInitializeSymbol symbols,
     CodegenClassScope classScope)
 {
     var spec = Ref("spec");
     method.Block
         .DeclareVar<OutputProcessViewConditionSpec>(
             spec.Ref,
             NewInstance(typeof(OutputProcessViewConditionSpec)))
         .SetProperty(
             spec,
             "ConditionType",
             EnumValue(typeof(ResultSetProcessorOutputConditionType), _conditionType.GetName()))
         .SetProperty(
             spec,
             "OutputConditionFactory",
             _outputConditionFactoryForge.Make(method, symbols, classScope))
         .SetProperty(
             spec,
             "StreamCount",
             Constant(_streamCount))
         .SetProperty(
             spec,
             "IsTerminable",
             Constant(_terminable))
         .SetProperty(
             spec,
             "SelectClauseStreamSelector",
             EnumValue(typeof(SelectClauseStreamSelectorEnum), _selectClauseStreamSelector.GetName()))
         .SetProperty(
             spec,
             "PostProcessFactory",
             _outputStrategyPostProcessForge == null
                 ? ConstantNull()
                 : _outputStrategyPostProcessForge.Make(method, symbols, classScope))
         .SetProperty(
             spec,
             "HasAfter",
             Constant(_hasAfter))
         .SetProperty(
             spec,
             "IsDistinct",
             Constant(_isDistinct))
         .SetProperty(
             spec,
             "DistinctKeyGetter",
             MultiKeyCodegen.CodegenGetterEventDistinct(
                 _isDistinct, _resultEventType, _distinctMultiKey, method, classScope))
         .SetProperty(
             spec,
             "ResultEventType",
             EventTypeUtility.ResolveTypeCodegen(_resultEventType, symbols.GetAddInitSvc(method)))
         .SetProperty(
             spec,
             "AfterTimePeriod",
             _afterTimePeriodExpr == null
                 ? ConstantNull()
                 : _afterTimePeriodExpr.TimePeriodComputeForge.MakeEvaluator(method, classScope))
         .SetProperty(
             spec,
             "AfterConditionNumberOfEvents",
             Constant(_afterNumberOfEvents))
         .SetProperty(
             spec,
             "IsUnaggregatedUngrouped",
             Constant(_unaggregatedUngrouped))
         .SetProperty(
             spec,
             "EventTypes",
             EventTypeUtility.ResolveTypeArrayCodegen(_eventTypes, EPStatementInitServicesConstants.REF))
         .MethodReturn(NewInstance<OutputProcessViewConditionFactory>(spec));
 }
Beispiel #25
0
        public CodegenExpression Make(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var method = parent.MakeChild(typeof(RowRecogDesc), GetType(), classScope);
            var desc = Ref("desc");
            CodegenExpression init = symbols.GetAddInitSvc(method);

            var startStateNums = new int[_startStates.Length];
            for (var i = 0; i < _startStates.Length; i++) {
                startStateNums[i] = _startStates[i].NodeNumFlat;
            }

            var aggregationServiceFactories = ConstantNull();
            if (_aggregationServices != null) {
                var initAggsSvcs = new CodegenExpression[_aggregationServices.Length];
                for (var i = 0; i < _aggregationServices.Length; i++) {
                    initAggsSvcs[i] = ConstantNull();
                    if (_aggregationServices[i] != null) {
                        var aggSvc = _aggregationServices[i];
                        var aggregationClassNames = new AggregationClassNames("_mra" + i);
                        var result = AggregationServiceFactoryCompiler.MakeInnerClassesAndInit(
                            false,
                            aggSvc.AggregationServiceFactoryForge,
                            method,
                            classScope,
                            classScope.OutermostClassName,
                            aggregationClassNames);
                        classScope.AddInnerClasses(result.InnerClasses);
                        initAggsSvcs[i] = LocalMethod(result.InitMethod, symbols.GetAddInitSvc(parent));
                    }
                }

                aggregationServiceFactories = NewArrayWithInit(typeof(AggregationServiceFactory), initAggsSvcs);
            }

            method.Block
                .DeclareVar<RowRecogDesc>(desc.Ref, NewInstance(typeof(RowRecogDesc)))
                .SetProperty(desc, "ParentEventType", EventTypeUtility.ResolveTypeCodegen(_parentEventType, init))
                .SetProperty(desc, "RowEventType", EventTypeUtility.ResolveTypeCodegen(RowEventType, init))
                .SetProperty(desc, "CompositeEventType", EventTypeUtility.ResolveTypeCodegen(_compositeEventType, init))
                .SetProperty(
                    desc,
                    "MultimatchEventType",
                    _multimatchEventType == null
                        ? ConstantNull()
                        : EventTypeUtility.ResolveTypeCodegen(_multimatchEventType, init))
                .SetProperty(desc, "MultimatchStreamNumToVariable", Constant(_multimatchStreamNumToVariable))
                .SetProperty(desc, "MultimatchVariableToStreamNum", Constant(_multimatchVariableToStreamNum))
                .SetProperty(
                    desc,
                    "PartitionEvalMayNull",
                    MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(_partitionBy, null, _partitionByMultiKey, method, classScope))
                .SetProperty(
                    desc,
                    "PartitionEvalTypes",
                    _partitionBy == null
                        ? ConstantNull()
                        : Constant(ExprNodeUtilityQuery.GetExprResultTypes(_partitionBy)))
                .SetProperty(desc, "PartitionEvalSerde", _partitionBy == null ? ConstantNull() : _partitionByMultiKey.GetExprMKSerde(method, classScope))
                .SetProperty(desc, "VariableStreams", MakeVariableStreams(method, symbols, classScope))
                .SetProperty(desc, "HasInterval", Constant(_hasInterval))
                .SetProperty(desc, "IsIterateOnly", Constant(_iterateOnly))
                .SetProperty(desc, "IsUnbound", Constant(_unbound))
                .SetProperty(desc, "IsOrTerminated", Constant(_orTerminated))
                .SetProperty(desc, "IsCollectMultimatches", Constant(_collectMultimatches))
                .SetProperty(desc, "IsDefineAsksMultimatches", Constant(_defineAsksMultimatches))
                .SetProperty(desc, "NumEventsEventsPerStreamDefine", Constant(_numEventsEventsPerStreamDefine))
                .SetProperty(desc, "MultimatchVariablesArray", Constant(_multimatchVariablesArray))
                .SetProperty(desc, "StatesOrdered", MakeStates(method, symbols, classScope))
                .SetProperty(desc, "NextStatesPerState", MakeNextStates(method, classScope))
                .SetProperty(desc, "StartStates", Constant(startStateNums))
                .SetProperty(desc, "IsAllMatches", Constant(_allMatches))
                .SetProperty(desc, "Skip", Constant(_skip))
                .SetProperty(
                    desc,
                    "ColumnEvaluators",
                    ExprNodeUtilityCodegen.CodegenEvaluators(_columnEvaluators, method, GetType(), classScope))
                .SetProperty(desc, "ColumnNames", Constant(_columnNames))
                .SetProperty(
                    desc,
                    "IntervalCompute",
                    _intervalCompute == null ? ConstantNull() : _intervalCompute.MakeEvaluator(method, classScope))
                .SetProperty(desc, "PreviousRandomAccessIndexes", Constant(_previousRandomAccessIndexes))
                .SetProperty(desc, "AggregationServiceFactories", aggregationServiceFactories)
                .SetProperty(
                    desc,
                    "AggregationResultFutureAssignables",
                    _aggregationServices == null ? ConstantNull() : MakeAggAssignables(method, classScope))
                .MethodReturn(desc);
            return LocalMethod(method);
        }