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

            var propertyGetter = ((EventTypeSPI) eventType).GetGetterSPI(propertyName);
            var propertyType = eventType.GetPropertyType(propertyName);
            var valueGetter = EventTypeUtility.CodegenGetterWCoerce(
                propertyGetter,
                propertyType,
                valueType,
                method,
                GetType(),
                classScope);

            method.Block
                .DeclareVar<PollResultIndexingStrategySorted>(
                    "strat",
                    NewInstance(typeof(PollResultIndexingStrategySorted)))
                .SetProperty(Ref("strat"), "StreamNum", Constant(streamNum))
                .SetProperty(Ref("strat"), "PropertyName", Constant(propertyName))
                .SetProperty(Ref("strat"), "ValueGetter", valueGetter)
                .SetProperty(Ref("strat"), "ValueType", Constant(valueType))
                .ExprDotMethod(Ref("strat"), "Init")
                .MethodReturn(Ref("strat"));
            return LocalMethod(method);
        }
예제 #2
0
        public static CodegenExpression CodegenGetterMayMultiKey(
            EventType eventType,
            EventPropertyGetterSPI[] getters,
            Type[] getterResultTypes,
            Type[] optionalCoercionTypes,
            MultiKeyClassRef multiKeyClassRef,
            CodegenMethod method,
            CodegenClassScope classScope)
        {
            if (getters == null || getters.Length == 0)
            {
                return(ConstantNull());
            }

            if (multiKeyClassRef != null && multiKeyClassRef.ClassNameMK != null)
            {
                return(CodegenMultiKeyGetter(eventType, getters, getterResultTypes, multiKeyClassRef, method, classScope));
            }

            return(EventTypeUtility.CodegenGetterWCoerce(
                       getters[0],
                       getterResultTypes[0],
                       optionalCoercionTypes?[0],
                       method,
                       typeof(MultiKeyCodegen),
                       classScope));
        }
예제 #3
0
        public CodegenExpression Make(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var method = parent.MakeChild(typeof(PollResultIndexingStrategyInKeywordMulti), GetType(), classScope);

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

            method.Block
                .DeclareVar<PollResultIndexingStrategyInKeywordMulti>(
                    "strat",
                    NewInstance(typeof(PollResultIndexingStrategyInKeywordMulti)))
                .SetProperty(Ref("strat"), "StreamNum", Constant(streamNum))
                .SetProperty(Ref("strat"), "PropertyNames", Constant(propertyNames))
                .SetProperty(Ref("strat"), "ValueGetters", Ref("getters"))
                .ExprDotMethod(Ref("strat"), "Init")
                .MethodReturn(Ref("strat"));
            return LocalMethod(method);
        }
예제 #4
0
 public override CodegenMethod MakeCodegen(
     CodegenMethodScope parent,
     SAIFFInitializeSymbolWEventType symbols,
     CodegenClassScope classScope)
 {
     var method = parent.MakeChild(
         typeof(FilterSpecLookupableAdvancedIndex),
         typeof(FilterSpecLookupableAdvancedIndexForge),
         classScope);
     Func<EventPropertyGetterSPI, CodegenExpression> toEval = getter =>
         EventTypeUtility.CodegenGetterWCoerce(getter, typeof(double?), null, method, GetType(), classScope);
     method.Block
         .DeclareVar<FilterSpecLookupableAdvancedIndex>(
             "lookupable",
             NewInstance<FilterSpecLookupableAdvancedIndex>(
                 Constant(Expression),
                 ConstantNull(),
                 Typeof(ReturnType)))
         .SetProperty(Ref("lookupable"), "QuadTreeConfig", QuadTreeConfig.Make())
         .SetProperty(Ref("lookupable"), "X", toEval.Invoke(_x))
         .SetProperty(Ref("lookupable"), "Y", toEval.Invoke(_y))
         .SetProperty(Ref("lookupable"), "Width", toEval.Invoke(_width))
         .SetProperty(Ref("lookupable"), "Height", toEval.Invoke(_height))
         .SetProperty(Ref("lookupable"), "IndexType", Constant(IndexType))
         .Expression(
             ExprDotMethodChain(symbols.GetAddInitSvc(method))
                 .Get(EPStatementInitServicesConstants.FILTERSHAREDLOOKUPABLEREGISTERY)
                 .Add(
                     "RegisterLookupable",
                     symbols.GetAddEventType(method),
                     Ref("lookupable")))
         .MethodReturn(Ref("lookupable"));
     return method;
 }
예제 #5
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 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);
        }
예제 #7
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 override CodegenExpression Make(
     CodegenMethodScope parent,
     SAIFFInitializeSymbol symbols,
     CodegenClassScope classScope)
 {
     var method = parent.MakeChild(typeof(VariableTriggerWriteDesc), GetType(), classScope);
     method.Block
         .DeclareVar<VariableTriggerWriteDesc>("desc", NewInstance(typeof(VariableTriggerWriteDesc)))
         .SetProperty(
             Ref("desc"),
             "Type",
             EventTypeUtility.ResolveTypeCodegen(Type, symbols.GetAddInitSvc(method)))
         .SetProperty(
             Ref("desc"),
             "VariableName",
             Constant(VariableName))
         .SetProperty(
             Ref("desc"),
             "Writer",
             EventTypeUtility.CodegenWriter(
                 Type,
                 evaluationType,
                 getterType,
                 Writer,
                 method,
                 GetType(),
                 classScope))
         .SetProperty(
             Ref("desc"),
             "Getter",
             EventTypeUtility.CodegenGetterWCoerce(
                 getter,
                 getterType,
                 null,
                 method,
                 GetType(),
                 classScope))
         .MethodReturn(Ref("desc"));
     return LocalMethod(method);
 }
예제 #9
0
        protected override IList<CodegenExpression> AdditionalParams(
            CodegenMethod method,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var @params = new List<CodegenExpression>();
            @params.Add(Constant(indexedProp));
            @params.Add(Constant(coercionDesc.CoercionTypes[0]));
            
            var propertyType = eventType.GetPropertyType(indexedProp);
            var getterSPI = ((EventTypeSPI) eventType).GetGetterSPI(indexedProp);
            var getter = EventTypeUtility.CodegenGetterWCoerce(
                getterSPI,
                propertyType,
                coercionDesc.CoercionTypes[0],
                method,
                GetType(),
                classScope);
            @params.Add(getter);
            @params.Add(serde.Codegen(method, classScope, null));

            return @params;
        }