public CodegenMethod ProcessCodegen(
            CodegenExpression resultEventTypeOuter,
            CodegenExpression eventBeanFactory,
            CodegenMethodScope codegenMethodScope,
            SelectExprProcessorCodegenSymbol selectSymbol,
            ExprForgeCodegenSymbol exprSymbol,
            CodegenClassScope codegenClassScope)
        {
            // NOTE: Maintaining result-event-type as out own field as we may be an "inner" select-expr-processor
            var mType = codegenClassScope.AddDefaultFieldUnshared(
                true,
                typeof(EventType),
                EventTypeUtility.ResolveTypeCodegen(resultEventType, EPStatementInitServicesConstants.REF));
            var methodNode = codegenMethodScope.MakeChild(typeof(EventBean), GetType(), codegenClassScope);
            var refEPS = exprSymbol.GetAddEPS(methodNode);
            methodNode.Block
                .DeclareVar(resultEventType.UnderlyingType, "tuple", NewInstanceInner(resultEventType.Detail.UnderlyingClassName));
            for (var i = 0; i < streamNames.Length; i++) {
                var @event = ArrayAtIndex(refEPS, Constant(i));
                var field = resultEventType.Detail.FieldDescriptors.Get(streamNames[i]);
                var rhs = Cast(field.PropertyType, ExprDotUnderlying(@event));
                methodNode.Block.AssignRef(ExprDotName(Ref("tuple"), field.FieldName), rhs);
            }

            methodNode.Block.MethodReturn(ExprDotMethod(eventBeanFactory, "AdapterForTypedJson", Ref("tuple"), mType));
            return methodNode;
        }
        public CodegenMethod ProcessCodegen(
            CodegenExpression resultEventType,
            CodegenExpression eventBeanFactory,
            CodegenMethodScope codegenMethodScope,
            SelectExprProcessorCodegenSymbol selectSymbol,
            ExprForgeCodegenSymbol exprSymbol,
            CodegenClassScope codegenClassScope)
        {
            CodegenMethod methodNode = codegenMethodScope.MakeChild(
                typeof(EventBean),
                this.GetType(),
                codegenClassScope);
            CodegenBlock block = methodNode.Block
                .DeclareVar<object[]>(
                    "props",
                    NewArrayByLength(typeof(object), Constant(this.context.ExprForges.Length)));
            for (int i = 0; i < this.context.ExprForges.Length; i++) {
                CodegenExpression expression = CodegenLegoMayVoid.ExpressionMayVoid(
                    typeof(object),
                    this.context.ExprForges[i],
                    methodNode,
                    exprSymbol,
                    codegenClassScope);
                block.AssignArrayElement("props", Constant(i), expression);
            }

            block.MethodReturn(
                ExprDotMethod(eventBeanFactory, "AdapterForTypedObjectArray", Ref("props"), resultEventType));
            return methodNode;
        }
예제 #3
0
 public CodegenMethod ProcessCodegen(
     CodegenExpression resultEventTypeOuter,
     CodegenExpression eventBeanFactory,
     CodegenMethodScope codegenMethodScope,
     SelectExprProcessorCodegenSymbol selectSymbol,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     // NOTE: Maintaining result-event-type as out own field as we may be an "inner" select-expr-processor
     var mType = codegenClassScope.AddDefaultFieldUnshared(
         true,
         typeof(EventType),
         EventTypeUtility.ResolveTypeCodegen(_resultEventTypeAvro, EPStatementInitServicesConstants.REF));
     var schema = codegenClassScope.NamespaceScope.AddDefaultFieldUnshared(
         true,
         typeof(RecordSchema),
         CodegenExpressionBuilder.StaticMethod(
             typeof(AvroSchemaUtil),
             "ResolveRecordSchema",
             EventTypeUtility.ResolveTypeCodegen(_resultEventTypeAvro, EPStatementInitServicesConstants.REF)));
     var methodNode = codegenMethodScope.MakeChild(typeof(EventBean), GetType(), codegenClassScope);
     var refEPS = exprSymbol.GetAddEPS(methodNode);
     methodNode.Block.MethodReturn(
         CodegenExpressionBuilder.StaticMethod(
             typeof(SelectExprJoinWildcardProcessorAvro),
             "ProcessSelectExprJoinWildcardAvro",
             refEPS,
             schema,
             eventBeanFactory,
             mType));
     return methodNode;
 }
 public CodegenMethod ProcessCodegen(
     CodegenExpression resultEventTypeOuter,
     CodegenExpression eventBeanFactory,
     CodegenMethodScope codegenMethodScope,
     SelectExprProcessorCodegenSymbol selectSymbol,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     // NOTE: Maintaining result-event-type as out own field as we may be an "inner" select-expr-processor
     var mType = codegenClassScope.AddDefaultFieldUnshared(
         true,
         typeof(EventType),
         EventTypeUtility.ResolveTypeCodegen(ResultEventType, EPStatementInitServicesConstants.REF));
     var methodNode = codegenMethodScope.MakeChild(typeof(EventBean), GetType(), codegenClassScope);
     var refEPS = exprSymbol.GetAddEPS(methodNode);
     methodNode.Block
         .DeclareVar<object[]>("tuple", NewArrayByLength(typeof(object), Constant(streamNames.Length)))
         .StaticMethod(
             typeof(Array),
             "Copy",
             refEPS,
             Constant(0),
             Ref("tuple"),
             Constant(0),
             Constant(streamNames.Length))
         .MethodReturn(ExprDotMethod(eventBeanFactory, "AdapterForTypedObjectArray", Ref("tuple"), mType));
     return methodNode;
 }
예제 #5
0
        public CodegenMethod ProcessCodegen(
            CodegenExpression resultEventType,
            CodegenExpression eventBeanFactory,
            CodegenMethodScope codegenMethodScope,
            SelectExprProcessorCodegenSymbol selectSymbol,
            ExprForgeCodegenSymbol exprSymbol,
            CodegenClassScope codegenClassScope)
        {
            var methodNode = codegenMethodScope.MakeChild(
                typeof(EventBean),
                this.GetType(),
                codegenClassScope);
            var codegenPropsRef = Ref("props");

            methodNode.Block.DeclareVar<IDictionary<string, object>>(
                "props",
                NewInstance(typeof(HashMap<string, object>)));
            for (int i = 0; i < selectContext.ColumnNames.Length; i++) {
                var selectContextExprForge = selectContext.ExprForges[i];
                var expression = CodegenLegoMayVoid.ExpressionMayVoid(
                    typeof(object),
                    selectContextExprForge,
                    methodNode,
                    exprSymbol,
                    codegenClassScope);

                var codegenValue = Constant(selectContext.ColumnNames[i]);
                methodNode.Block.Expression(
                    ExprDotMethod(codegenPropsRef, "Put", codegenValue, expression));
            }

            methodNode.Block.MethodReturn(
                ExprDotMethod(eventBeanFactory, "AdapterForTypedMap", Ref("props"), resultEventType));
            return methodNode;
        }
예제 #6
0
            public CodegenMethod ProcessCodegen(
                CodegenExpression resultEventType,
                CodegenExpression eventBeanFactory,
                CodegenMethodScope codegenMethodScope,
                SelectExprProcessorCodegenSymbol selectSymbol,
                ExprForgeCodegenSymbol exprSymbol,
                CodegenClassScope codegenClassScope)
            {
                var methodNode = codegenMethodScope.MakeChild(typeof(EventBean), this.GetType(), codegenClassScope);
                var refEPS     = exprSymbol.GetAddEPS(methodNode);

                methodNode.Block
                .DeclareVar(resultType.UnderlyingType, "und", NewInstance(resultType.UnderlyingType))
                .DeclareVar(
                    sourceType.UnderlyingType,
                    "src",
                    CastUnderlying(sourceType.UnderlyingType, ArrayAtIndex(refEPS, Constant(underlyingStreamNumber))));
                foreach (var sourceFieldEntry in sourceType.Detail.FieldDescriptors)
                {
                    var targetField = resultType.Detail.FieldDescriptors.Get(sourceFieldEntry.Key);
                    methodNode.Block.AssignRef("und." + targetField.FieldName, Ref("src." + sourceFieldEntry.Value.FieldName));
                }

                methodNode.Block.MethodReturn(ExprDotMethod(eventBeanFactory, "AdapterForTypedJson", Ref("und"), resultEventType));
                return(methodNode);
            }
예제 #7
0
        public CodegenMethod ProcessCodegen(
            CodegenExpression resultEventTypeOuter,
            CodegenExpression eventBeanFactory,
            CodegenMethodScope codegenMethodScope,
            SelectExprProcessorCodegenSymbol selectSymbol,
            ExprForgeCodegenSymbol exprSymbol,
            CodegenClassScope codegenClassScope)
        {
            // NOTE: Maintaining result-event-type as out own field as we may be an "inner" select-expr-processor
            CodegenExpressionInstanceField mType = codegenClassScope.AddDefaultFieldUnshared(
                true,
                typeof(EventType),
                EventTypeUtility.ResolveTypeCodegen(resultEventType, EPStatementInitServicesConstants.REF));
            CodegenMethod methodNode = codegenMethodScope.MakeChild(
                typeof(EventBean),
                this.GetType(),
                codegenClassScope);
            CodegenExpressionRef refEPS = exprSymbol.GetAddEPS(methodNode);
            methodNode.Block.DeclareVar<IDictionary<string, object>>(
                "tuple", NewInstance(typeof(HashMap<string, object>)));
            for (int i = 0; i < streamNames.Length; i++) {
                methodNode.Block.Expression(
                    ExprDotMethod(Ref("tuple"), "Put", Constant(streamNames[i]), ArrayAtIndex(refEPS, Constant(i))));
            }

            methodNode.Block.MethodReturn(ExprDotMethod(eventBeanFactory, "AdapterForTypedMap", Ref("tuple"), mType));
            return methodNode;
        }
        public CodegenMethod ProcessCodegen(
            CodegenExpression resultEventType,
            CodegenExpression eventBeanFactory,
            CodegenMethodScope codegenMethodScope,
            SelectExprProcessorCodegenSymbol selectSymbol,
            ExprForgeCodegenSymbol exprSymbol,
            CodegenClassScope codegenClassScope)
        {
            CodegenMethod        methodNode = codegenMethodScope.MakeChild(typeof(EventBean), this.GetType(), codegenClassScope);
            CodegenExpressionRef refEPS     = exprSymbol.GetAddEPS(methodNode);

            methodNode.Block
            .DeclareVar(source.Detail.UnderlyingClassName, "src", CastUnderlying(source.Detail.UnderlyingClassName, ArrayAtIndex(refEPS, Constant(0))))
            .DeclareVar(target.Detail.UnderlyingClassName, "und", NewInstanceInner(target.Detail.UnderlyingClassName));
            foreach (var entryTarget in target.Detail.FieldDescriptors)
            {
                var src = source.Detail.FieldDescriptors.Get(entryTarget.Key);
                if (src == null)
                {
                    continue;
                }

                methodNode.Block.AssignRef("und." + entryTarget.Value.FieldName, Ref("src." + src.FieldName));
            }

            methodNode.Block.MethodReturn(ExprDotMethod(eventBeanFactory, "AdapterForTypedJson", Ref("und"), resultEventType));
            return(methodNode);
        }
예제 #9
0
 public abstract CodegenMethod ProcessCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenMethodScope codegenMethodScope,
     SelectExprProcessorCodegenSymbol selectSymbol,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope);
예제 #10
0
 protected abstract CodegenExpression ProcessSpecificCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenExpression props,
     CodegenMethod methodNode,
     SelectExprProcessorCodegenSymbol selectEnv,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope);
            public CodegenMethod ProcessCodegen(
                CodegenExpression resultEventType,
                CodegenExpression eventBeanFactory,
                CodegenMethodScope codegenMethodScope,
                SelectExprProcessorCodegenSymbol selectSymbol,
                ExprForgeCodegenSymbol exprSymbol,
                CodegenClassScope codegenClassScope)
            {
                var methodNode = codegenMethodScope.MakeChild(typeof(EventBean), GetType(), codegenClassScope);
                var manufacturerField = codegenClassScope.AddDefaultFieldUnshared(
                    true,
                    typeof(EventBeanManufacturer),
                    manufacturer.Make(methodNode.Block, codegenMethodScope, codegenClassScope));
                var refEPS = exprSymbol.GetAddEPS(methodNode);
                var block = methodNode.Block
                    .DeclareVar<ObjectArrayBackedEventBean>(
                        "theEvent",
                        Cast(
                            typeof(ObjectArrayBackedEventBean),
                            ArrayAtIndex(refEPS, Constant(underlyingStreamNumber))))
                    .DeclareVar<object[]>("props", NewArrayByLength(typeof(object), Constant(items.Length)));
                foreach (var item in items) {
                    if (item.OptionalFromIndex != -1) {
                        block.AssignArrayElement(
                            "props",
                            Constant(item.ToIndex),
                            ArrayAtIndex(
                                ExprDotName(Ref("theEvent"), "Properties"),
                                Constant(item.OptionalFromIndex)));
                    }
                    else {
                        CodegenExpression value;
                        if (item.OptionalWidener != null) {
                            value = item.Forge.EvaluateCodegen(
                                item.Forge.EvaluationType,
                                methodNode,
                                exprSymbol,
                                codegenClassScope);
                            value = item.OptionalWidener.WidenCodegen(value, methodNode, codegenClassScope);
                        }
                        else {
                            value = item.Forge.EvaluateCodegen(
                                typeof(object),
                                methodNode,
                                exprSymbol,
                                codegenClassScope);
                        }

                        block.AssignArrayElement("props", Constant(item.ToIndex), value);
                    }
                }

                block.MethodReturn(ExprDotMethod(manufacturerField, "Make", Ref("props")));
                return methodNode;
            }
 protected override CodegenExpression ProcessSpecificCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenExpression props,
     CodegenMethod methodNode,
     SelectExprProcessorCodegenSymbol selectEnv,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     var variantType = VariantEventTypeUtil.GetField(variantEventType, codegenClassScope);
     var innerType = codegenClassScope.AddDefaultFieldUnshared(
         true,
         typeof(EventType),
         EventTypeUtility.ResolveTypeCodegen(innerEventType, EPStatementInitServicesConstants.REF));
     CodegenExpression inner = ExprDotMethod(eventBeanFactory, "AdapterForTypedMap", props, innerType);
     return ExprDotMethod(variantType, "GetValueAddEventBean", inner);
 }
 public CodegenMethod ProcessCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenMethodScope codegenMethodScope,
     SelectExprProcessorCodegenSymbol selectSymbol,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     var methodNode = codegenMethodScope.MakeChild(typeof(EventBean), GetType(), codegenClassScope);
     var refEPS = exprSymbol.GetAddEPS(methodNode);
     var value = ExprDotName(
         Cast(typeof(ObjectArrayBackedEventBean), ArrayAtIndex(refEPS, Constant(underlyingStreamNumber))),
         "Properties");
     methodNode.Block.MethodReturn(
         ExprDotMethod(eventBeanFactory, "AdapterForTypedObjectArray", value, resultEventType));
     return methodNode;
 }
예제 #14
0
 protected override CodegenExpression ProcessSpecificCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenExpression props,
     CodegenMethod methodNode,
     SelectExprProcessorCodegenSymbol selectEnv,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     CodegenExpressionRef refEPS = exprSymbol.GetAddEPS(methodNode);
     return ExprDotMethod(
         eventBeanFactory,
         "AdapterForTypedWrapper",
         ArrayAtIndex(refEPS, Constant(0)),
         props,
         resultEventType);
 }
        public override CodegenMethod ProcessCodegen(
            CodegenExpression resultEventType,
            CodegenExpression eventBeanFactory,
            CodegenMethodScope codegenMethodScope,
            SelectExprProcessorCodegenSymbol selectSymbol,
            ExprForgeCodegenSymbol exprSymbol,
            CodegenClassScope codegenClassScope)
        {
            var size = ComputeSize();
            var methodNode = codegenMethodScope.MakeChild(typeof(EventBean), GetType(), codegenClassScope);
            var refEPS = exprSymbol.GetAddEPS(methodNode);

            var block = methodNode.Block
                .DeclareVar<object[]>("props", NewArrayByLength(typeof(object), Constant(size)));
            var count = 0;
            foreach (var forge in context.ExprForges) {
                block.AssignArrayElement(
                    Ref("props"),
                    Constant(count),
                    CodegenLegoMayVoid.ExpressionMayVoid(
                        typeof(object),
                        forge,
                        methodNode,
                        exprSymbol,
                        codegenClassScope));
                count++;
            }

            foreach (var element in namedStreams) {
                var theEvent = ArrayAtIndex(refEPS, Constant(element.StreamNumber));
                block.AssignArrayElement(Ref("props"), Constant(count), theEvent);
                count++;
            }

            if (isUsingWildcard && context.NumStreams > 1) {
                for (var i = 0; i < context.NumStreams; i++) {
                    block.AssignArrayElement(Ref("props"), Constant(count), ArrayAtIndex(refEPS, Constant(i)));
                    count++;
                }
            }

            block.MethodReturn(
                ProcessSpecificCodegen(resultEventType, eventBeanFactory, Ref("props"), codegenClassScope));
            return methodNode;
        }
예제 #16
0
 public CodegenMethod ProcessCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenMethodScope codegenMethodScope,
     SelectExprProcessorCodegenSymbol selectSymbol,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     var methodNode = codegenMethodScope.MakeChild(
         typeof(EventBean),
         this.GetType(),
         codegenClassScope);
     var refEPS = exprSymbol.GetAddEPS(methodNode);
     var type = VariantEventTypeUtil.GetField(variantEventType, codegenClassScope);
     methodNode.Block.MethodReturn(
         ExprDotMethod(type, "GetValueAddEventBean", ArrayAtIndex(refEPS, Constant(0))));
     return methodNode;
 }
예제 #17
0
 public CodegenMethod ProcessCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenMethodScope codegenMethodScope,
     SelectExprProcessorCodegenSymbol selectSymbol,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     CodegenMethod methodNode = codegenMethodScope.MakeChild(
         typeof(EventBean),
         this.GetType(),
         codegenClassScope);
     CodegenExpressionRef refEPS = exprSymbol.GetAddEPS(methodNode);
     CodegenExpression bean = ExprDotName(ArrayAtIndex(refEPS, Constant(streamNumber)), "Underlying");
     methodNode.Block.MethodReturn(
         ExprDotMethod(eventBeanFactory, "AdapterForTypedObject", bean, resultEventType));
     return methodNode;
 }
예제 #18
0
        public CodegenMethod ProcessCodegen(
            CodegenExpression resultEventType,
            CodegenExpression eventBeanFactory,
            CodegenMethodScope codegenMethodScope,
            SelectExprProcessorCodegenSymbol selectSymbol,
            ExprForgeCodegenSymbol exprSymbol,
            CodegenClassScope codegenClassScope)
        {
            CodegenMethod methodNode = codegenMethodScope.MakeChild(
                typeof(EventBean),
                this.GetType(),
                codegenClassScope);
            CodegenBlock block = methodNode.Block;
            if (this.context.ExprForges.Length == 0) {
                block.DeclareVar<IDictionary<string, object>>(
                    "props", StaticMethod(typeof(Collections), "GetEmptyMap", new[] { typeof(string), typeof(object) }));
            }
            else {
                block.DeclareVar<IDictionary<string, object>>(
                    "props", NewInstance(typeof(HashMap<string, object>)));
            }

            for (int i = 0; i < this.context.ColumnNames.Length; i++) {
                CodegenExpression expression = CodegenLegoMayVoid.ExpressionMayVoid(
                    typeof(object),
                    this.context.ExprForges[i],
                    methodNode,
                    exprSymbol,
                    codegenClassScope);
                block.Expression(
                    ExprDotMethod(Ref("props"), "Put", Constant(this.context.ColumnNames[i]), expression));
            }

            block.MethodReturn(
                ProcessSpecificCodegen(
                    resultEventType,
                    eventBeanFactory,
                    Ref("props"),
                    methodNode,
                    selectSymbol,
                    exprSymbol,
                    codegenClassScope));
            return methodNode;
        }
예제 #19
0
 protected override CodegenExpression ProcessSpecificCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenExpression props,
     CodegenMethod methodNode,
     SelectExprProcessorCodegenSymbol selectEnv,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     CodegenExpressionRef refEPS = exprSymbol.GetAddEPS(methodNode);
     return StaticMethod(
         typeof(SelectEvalInsertWildcardSSWrapper),
         "ProcessSelectExprSSWrapper",
         props,
         refEPS,
         Constant(context.ExprForges.Length == 0),
         eventBeanFactory,
         resultEventType);
 }
예제 #20
0
 protected override CodegenExpression ProcessSpecificCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenExpression props,
     CodegenMethod methodNode,
     SelectExprProcessorCodegenSymbol selectEnv,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     var type = VariantEventTypeUtil.GetField(variantEventType, codegenClassScope);
     var refEPS = exprSymbol.GetAddEPS(methodNode);
     return StaticMethod(
         typeof(SelectEvalInsertWildcardSSWrapperRevision),
         "SelectExprInsertWildcardSSWrapRevision",
         refEPS,
         evaluators == null ? Constant(0) : Constant(evaluators.Length),
         props,
         type);
 }
예제 #21
0
            public CodegenMethod ProcessCodegen(
                CodegenExpression resultEventType,
                CodegenExpression eventBeanFactory,
                CodegenMethodScope codegenMethodScope,
                SelectExprProcessorCodegenSymbol selectSymbol,
                ExprForgeCodegenSymbol exprSymbol,
                CodegenClassScope codegenClassScope)
            {
                var methodNode = codegenMethodScope.MakeChild(typeof(EventBean), this.GetType(), codegenClassScope);
                var refEPS     = exprSymbol.GetAddEPS(methodNode);
                var block      = methodNode.Block
                                 .DeclareVar(
                    sourceType.UnderlyingType,
                    "src",
                    CastUnderlying(sourceType.UnderlyingType, ArrayAtIndex(refEPS, Constant(underlyingStreamNumber))))
                                 .DeclareVar(resultType.UnderlyingType, "und", NewInstance(resultType.UnderlyingType));

                foreach (var item in items)
                {
                    if (item.OptionalFromField != null)
                    {
                        block.AssignRef("und." + item.ToField.FieldName, Ref("src." + item.OptionalFromField.FieldName));
                    }
                    else
                    {
                        CodegenExpression value;
                        if (item.OptionalWidener != null)
                        {
                            value = item.Forge.EvaluateCodegen(item.Forge.EvaluationType, methodNode, exprSymbol, codegenClassScope);
                            value = item.OptionalWidener.WidenCodegen(value, methodNode, codegenClassScope);
                        }
                        else
                        {
                            value = item.Forge.EvaluateCodegen(typeof(object), methodNode, exprSymbol, codegenClassScope);
                        }

                        block.AssignRef("und." + item.ToField.FieldName, value);
                    }
                }

                methodNode.Block.MethodReturn(ExprDotMethod(eventBeanFactory, "AdapterForTypedJson", Ref("und"), resultEventType));
                return(methodNode);
            }
 public CodegenMethod ProcessCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenMethodScope codegenMethodScope,
     SelectExprProcessorCodegenSymbol selectSymbol,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     CodegenMethod methodNode = codegenMethodScope.MakeChild(
         typeof(EventBean),
         this.GetType(),
         codegenClassScope);
     methodNode.Block.MethodReturn(
         ExprDotMethod(
             eventBeanFactory,
             "AdapterForTypedMap",
             StaticMethod(typeof(Collections), "GetEmptyMap", new[] { typeof(object), typeof(object) }),
             resultEventType));
     return methodNode;
 }
예제 #23
0
 public CodegenMethod ProcessCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenMethodScope codegenMethodScope,
     SelectExprProcessorCodegenSymbol selectSymbol,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     var methodNode = codegenMethodScope.MakeChild(typeof(EventBean), GetType(), codegenClassScope);
     var refEPS = exprSymbol.GetAddEPS(methodNode);
     var theEvent = CodegenExpressionBuilder.Cast(
         typeof(AvroGenericDataBackedEventBean),
         CodegenExpressionBuilder.ArrayAtIndex(
             refEPS,
             CodegenExpressionBuilder.Constant(_underlyingStreamNumber)));
     methodNode.Block.MethodReturn(
         CodegenExpressionBuilder.ExprDotMethod(
             eventBeanFactory,
             "AdapterForTypedAvro",
             CodegenExpressionBuilder.ExprDotName(theEvent, "Properties"),
             resultEventType));
     return methodNode;
 }
예제 #24
0
 protected override CodegenExpression ProcessSpecificCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenExpression props,
     CodegenMethod methodNode,
     SelectExprProcessorCodegenSymbol selectEnv,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     CodegenMethod inner = joinWildcardProcessorForge.ProcessCodegen(
         resultEventType,
         eventBeanFactory,
         methodNode,
         selectEnv,
         exprSymbol,
         codegenClassScope);
     return ExprDotMethod(
         eventBeanFactory,
         "AdapterForTypedWrapper",
         LocalMethod(inner),
         props,
         resultEventType);
 }
 protected override CodegenExpression ProcessSpecificCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenExpression props,
     CodegenMethod methodNode,
     SelectExprProcessorCodegenSymbol selectEnv,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     var innerType = codegenClassScope.AddDefaultFieldUnshared(
         true,
         typeof(EventType),
         EventTypeUtility.ResolveTypeCodegen(innerWrapperType, EPStatementInitServicesConstants.REF));
     var refEPS = exprSymbol.GetAddEPS(methodNode);
     return StaticMethod(
         this.GetType(),
         "WildcardNestedWrapper",
         ArrayAtIndex(refEPS, Constant(0)),
         innerType,
         resultEventType,
         eventBeanFactory,
         props);
 }
 protected override CodegenExpression ProcessSpecificCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenExpression props,
     CodegenMethod methodNode,
     SelectExprProcessorCodegenSymbol selectEnv,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     var type = VariantEventTypeUtil.GetField(variantEventType, codegenClassScope);
     var innerType = codegenClassScope.AddDefaultFieldUnshared(
         true,
         typeof(EventType),
         EventTypeUtility.ResolveTypeCodegen(wrappingEventType, EPStatementInitServicesConstants.REF));
     CodegenExpressionRef refEPS = exprSymbol.GetAddEPS(methodNode);
     CodegenExpression wrapped = ExprDotMethod(
         eventBeanFactory,
         "AdapterForTypedWrapper",
         ArrayAtIndex(refEPS, Constant(0)),
         Ref("props"),
         innerType);
     return ExprDotMethod(type, "GetValueAddEventBean", wrapped);
 }
 public CodegenMethod ProcessCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenMethodScope codegenMethodScope,
     SelectExprProcessorCodegenSymbol selectSymbol,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     var variantType = VariantEventTypeUtil.GetField(variantEventType, codegenClassScope);
     var methodNode = codegenMethodScope.MakeChild(
         typeof(EventBean),
         this.GetType(),
         codegenClassScope);
     var jw = joinWildcardProcessorForge.ProcessCodegen(
         resultEventType,
         eventBeanFactory,
         methodNode,
         selectSymbol,
         exprSymbol,
         codegenClassScope);
     methodNode.Block.MethodReturn(ExprDotMethod(variantType, "GetValueAddEventBean", LocalMethod(jw)));
     return methodNode;
 }
예제 #28
0
 public CodegenMethod ProcessCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenMethodScope codegenMethodScope,
     SelectExprProcessorCodegenSymbol selectSymbol,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     CodegenExpressionInstanceField eventToPublic =
         TableDeployTimeResolver.MakeTableEventToPublicField(table, codegenClassScope, this.GetType());
     CodegenMethod methodNode = codegenMethodScope.MakeChild(
         typeof(EventBean),
         this.GetType(),
         codegenClassScope);
     CodegenExpressionRef refEPS = exprSymbol.GetAddEPS(methodNode);
     CodegenExpression refIsNewData = exprSymbol.GetAddIsNewData(methodNode);
     CodegenExpressionRef refExprEvalCtx = exprSymbol.GetAddExprEvalCtx(methodNode);
     methodNode.Block
         .DeclareVar<EventBean>("@event", ArrayAtIndex(refEPS, Constant(0)))
         .IfRefNullReturnNull("@event")
         .MethodReturn(
             ExprDotMethod(eventToPublic, "Convert", Ref("@event"), refEPS, refIsNewData, refExprEvalCtx));
     return methodNode;
 }
예제 #29
0
 public CodegenMethod ProcessCodegen(
     CodegenExpression resultEventType,
     CodegenExpression eventBeanFactory,
     CodegenMethodScope codegenMethodScope,
     SelectExprProcessorCodegenSymbol selectSymbol,
     ExprForgeCodegenSymbol exprSymbol,
     CodegenClassScope codegenClassScope)
 {
     CodegenMethod methodNode = codegenMethodScope.MakeChild(
         typeof(EventBean),
         this.GetType(),
         codegenClassScope);
     ExprForge first = selectExprForgeContext.ExprForges[0];
     Type evaluationType = first.EvaluationType;
     methodNode.Block.MethodReturn(
         ProcessFirstColCodegen(
             evaluationType,
             first.EvaluateCodegen(evaluationType, methodNode, exprSymbol, codegenClassScope),
             resultEventType,
             eventBeanFactory,
             methodNode,
             codegenClassScope));
     return methodNode;
 }
예제 #30
0
            public CodegenMethod ProcessCodegen(
                CodegenExpression resultEventType,
                CodegenExpression eventBeanFactory,
                CodegenMethodScope codegenMethodScope,
                SelectExprProcessorCodegenSymbol selectSymbol,
                ExprForgeCodegenSymbol exprSymbol,
                CodegenClassScope codegenClassScope)
            {
                var schema = codegenClassScope.NamespaceScope.AddDefaultFieldUnshared(
                    true,
                    typeof(RecordSchema),
                    CodegenExpressionBuilder.StaticMethod(
                        typeof(AvroSchemaUtil),
                        "ResolveRecordSchema",
                        EventTypeUtility.ResolveTypeCodegen(ResultEventType, EPStatementInitServicesConstants.REF)));
                var methodNode = codegenMethodScope.MakeChild(typeof(EventBean), GetType(), codegenClassScope);
                var refEPS = exprSymbol.GetAddEPS(methodNode);
                var block = methodNode.Block
                    .DeclareVar<AvroGenericDataBackedEventBean>(
                        "theEvent",
                        CodegenExpressionBuilder.Cast(
                            typeof(AvroGenericDataBackedEventBean),
                            CodegenExpressionBuilder.ArrayAtIndex(
                                refEPS,
                                CodegenExpressionBuilder.Constant(_underlyingStreamNumber))))
                    .DeclareVar<GenericRecord>(
                        "source",
                        CodegenExpressionBuilder.ExprDotName(
                            CodegenExpressionBuilder.Ref("theEvent"),
                            "Properties"))
                    .DeclareVar<GenericRecord>(
                        "target",
                        CodegenExpressionBuilder.NewInstance(typeof(GenericRecord), schema));
                
                foreach (var item in _items) {
                    CodegenExpression value;
                    if (item.OptionalFromIndex != null) {
                        value = CodegenExpressionBuilder.StaticMethod(
                            typeof(GenericRecordExtensions),
                            "Get",
                            CodegenExpressionBuilder.Ref("source"),
                            CodegenExpressionBuilder.Constant(item.OptionalFromIndex.Name));
                    }
                    else {
                        if (item.OptionalWidener != null) {
                            value = item.Forge.EvaluateCodegen(
                                item.Forge.EvaluationType,
                                methodNode,
                                exprSymbol,
                                codegenClassScope);
                            value = item.OptionalWidener.WidenCodegen(value, methodNode, codegenClassScope);
                        }
                        else {
                            value = item.Forge.EvaluateCodegen(
                                typeof(object),
                                methodNode,
                                exprSymbol,
                                codegenClassScope);
                        }
                    }

                    block.StaticMethod(
                        typeof(GenericRecordExtensions),
                        "Put",
                        CodegenExpressionBuilder.Ref("target"),
                        CodegenExpressionBuilder.Constant(item.ToIndex.Name),
                        value);
                }

                block.MethodReturn(
                    CodegenExpressionBuilder.ExprDotMethod(
                        eventBeanFactory,
                        "AdapterForTypedAvro",
                        CodegenExpressionBuilder.Ref("target"),
                        resultEventType));
                return methodNode;
            }