Пример #1
0
 public abstract void InlineInitializeOnTriggerBase(
     CodegenExpressionRef saiff,
     CodegenMethod method,
     SAIFFInitializeSymbol symbols,
     CodegenClassScope classScope);
Пример #2
0
 public void RowReadMethodCodegen(
     CodegenMethod method,
     int level)
 {
 }
Пример #3
0
 public override void ClearCodegen(
     CodegenMethod method,
     CodegenClassScope classScope)
 {
     method.Block.ExprDotMethod(state, "Clear");
 }
Пример #4
0
 public void AcceptCodegen(
     CodegenMethod method,
     CodegenClassScope classScope)
 {
     method.Block.ExprDotMethod(REF_AGGVISITOR, "VisitAggregations", Constant(1), REF_ROW);
 }
Пример #5
0
 public void AcceptGroupDetailCodegen(
     CodegenMethod method,
     CodegenClassScope classScope)
 {
     // not implemented
 }
Пример #6
0
            public static CodegenExpression Codegen(
                PointIntersectsRectangleForge forge,
                CodegenMethodScope codegenMethodScope,
                ExprForgeCodegenSymbol exprSymbol,
                CodegenClassScope codegenClassScope)
            {
                CodegenMethod methodNode = codegenMethodScope.MakeChild(
                    typeof(bool?),
                    typeof(SettingsApplicationDotMethodRectangeIntersectsRectangle.RectangleIntersectsRectangleEvaluator
                           ),
                    codegenClassScope);

                CodegenBlock block = methodNode.Block;

                CodegenLegoCast.AsDoubleNullReturnNull(
                    block,
                    "px",
                    forge.pxEval,
                    methodNode,
                    exprSymbol,
                    codegenClassScope);
                CodegenLegoCast.AsDoubleNullReturnNull(
                    block,
                    "py",
                    forge.pyEval,
                    methodNode,
                    exprSymbol,
                    codegenClassScope);
                CodegenLegoCast.AsDoubleNullReturnNull(
                    block,
                    "x",
                    forge.xEval,
                    methodNode,
                    exprSymbol,
                    codegenClassScope);
                CodegenLegoCast.AsDoubleNullReturnNull(
                    block,
                    "y",
                    forge.yEval,
                    methodNode,
                    exprSymbol,
                    codegenClassScope);
                CodegenLegoCast.AsDoubleNullReturnNull(
                    block,
                    "width",
                    forge.widthEval,
                    methodNode,
                    exprSymbol,
                    codegenClassScope);
                CodegenLegoCast.AsDoubleNullReturnNull(
                    block,
                    "height",
                    forge.heightEval,
                    methodNode,
                    exprSymbol,
                    codegenClassScope);
                block.MethodReturn(
                    CodegenExpressionBuilder.StaticMethod(
                        typeof(BoundingBox),
                        "ContainsPoint",
                        CodegenExpressionBuilder.Ref("x"),
                        CodegenExpressionBuilder.Ref("y"),
                        CodegenExpressionBuilder.Ref("width"),
                        CodegenExpressionBuilder.Ref("height"),
                        CodegenExpressionBuilder.Ref("px"),
                        CodegenExpressionBuilder.Ref("py")));
                return(CodegenExpressionBuilder.LocalMethod(methodNode));
            }
Пример #7
0
 public void SetRemovedCallbackCodegen(CodegenMethod method)
 {
     // no code
 }
Пример #8
0
 public static CodegenLocalMethodBuilder LocalMethodBuild(CodegenMethod methodNode)
 {
     return new CodegenLocalMethodBuilder(methodNode);
 }
Пример #9
0
 public static CodegenExpressionLocalMethod LocalMethod(
     CodegenMethod methodNode,
     params CodegenExpression[] parameters)
 {
     return new CodegenExpressionLocalMethod(methodNode, parameters);
 }
Пример #10
0
        public static CodegenExpression MakePatternDeltaLambda(
            ExprNode parameter,
            MatchedEventConvertorForge convertor,
            TimeAbacus timeAbacus,
            CodegenMethod method,
            CodegenClassScope classScope)
        {
            var computeDelta = new CodegenExpressionLambda(method.Block)
                .WithParam<MatchedEventMap>("beginState")
                .WithParam<PatternAgentInstanceContext>("context");
            var compute = NewInstance<PatternDeltaCompute>(computeDelta);

            //var compute = NewAnonymousClass(method.Block, typeof(PatternDeltaCompute));
            //var computeDelta = CodegenMethod.MakeMethod(typeof(long), typeof(PatternDeltaComputeUtil), classScope)
            //    .AddParam(
            //        CodegenNamedParam.From(
            //            typeof(MatchedEventMap),
            //            "beginState",
            //            typeof(PatternAgentInstanceContext),
            //            "context"));
            //compute.AddMethod("ComputeDelta", computeDelta);

            if (parameter is ExprTimePeriod) {
                var timePeriod = (ExprTimePeriod) parameter;
                var time = ExprDotName(Ref("context"), "Time");
                if (timePeriod.IsConstantResult) {
                    var delta = classScope.AddDefaultFieldUnshared<TimePeriodCompute>(
                        true,
                        timePeriod.TimePeriodComputeForge.MakeEvaluator(
                            classScope.NamespaceScope.InitMethod,
                            classScope));
                    computeDelta.Block
                        .ReturnMethodOrBlock(
                            ExprDotMethod(
                                delta,
                                "DeltaAdd",
                                time,
                                ConstantNull(),
                                ConstantTrue(),
                                ExprDotMethod(Ref("context"), "GetAgentInstanceContext")));
                }
                else {
                    var delta = classScope.AddDefaultFieldUnshared<TimePeriodCompute>(
                        true,
                        timePeriod.TimePeriodComputeForge.MakeEvaluator(
                            classScope.NamespaceScope.InitMethod,
                            classScope));
                    computeDelta.Block
                        .DeclareVar<EventBean[]>(
                            "events",
                            LocalMethod(
                                convertor.Make(method, classScope),
                                //convertor.Make(computeDelta, classScope),
                                Ref("beginState")))
                        .ReturnMethodOrBlock(
                            ExprDotMethod(
                                delta,
                                "DeltaAdd",
                                time,
                                Ref("events"),
                                ConstantTrue(),
                                ExprDotMethod(Ref("context"), "GetAgentInstanceContext")));
                }
            }
            else {
                var eval = CodegenLegoMethodExpression.CodegenExpression(parameter.Forge, method, classScope, true);
                CodegenExpression events;
                if (parameter.Forge.ForgeConstantType.IsConstant) {
                    events = ConstantNull();
                }
                else {
                    events = LocalMethod(
                        convertor.Make(method, classScope),
                        //convertor.Make(computeDelta, classScope),
                        Ref("beginState"));
                }

                computeDelta.Block
                    .DeclareVar<EventBean[]>("events", events)
                    .DeclareVar(
                        parameter.Forge.EvaluationType.GetBoxedType(),
                        "result",
                        LocalMethod(
                            eval,
                            Ref("events"),
                            ConstantTrue(),
                            ExprDotMethod(Ref("context"), "GetAgentInstanceContext")));
                if (parameter.Forge.EvaluationType.CanBeNull()) {
                    computeDelta.Block
                        .IfRefNull("result")
                        .BlockThrow(
                            NewInstance<EPException>(Constant("Null value returned for guard expression")));
                }

                computeDelta.Block.ReturnMethodOrBlock(
                    timeAbacus.DeltaForSecondsDoubleCodegen(Ref("result"), classScope));
            }

            return compute;
        }
Пример #11
0
        public CodegenExpression EventBeanGetCodegen(
            CodegenExpression beanExpression,
            CodegenMethodScope parent,
            CodegenClassScope classScope)
        {
            var serializers = classScope.AddDefaultFieldUnshared(
                true,
                typeof(Serializer[]),
                StaticMethod(
                    typeof(SerializerFactory),
                    "GetSerializers",
                    Constant(ExprNodeUtilityQuery.GetExprResultTypes(nodes))));

            CodegenMethod method = parent.MakeChild(typeof(object), this.GetType(), classScope)
                .AddParam(typeof(EventBean), "eventBean");
            method.Block
                .DeclareVar<EventBean[]>("events", NewArrayWithInit(typeof(EventBean), Ref("eventBean")));

            // method to return object-array from expressions
            ExprForgeCodegenSymbol exprSymbol = new ExprForgeCodegenSymbol(true, null);
            CodegenMethod exprMethod = method
                .MakeChildWithScope(typeof(object), typeof(CodegenLegoMethodExpression), exprSymbol, classScope)
                .AddParam(ExprForgeCodegenNames.PARAMS);
            CodegenExpression[] expressions = new CodegenExpression[nodes.Length];
            for (int i = 0; i < nodes.Length; i++) {
                expressions[i] = nodes[i]
                    .Forge.EvaluateCodegen(
                        nodes[i].Forge.EvaluationType,
                        exprMethod,
                        exprSymbol,
                        classScope);
            }

            exprSymbol.DerivedSymbolsCodegen(method, exprMethod.Block, classScope);

            if (nodes.Length == 1) {
                exprMethod.Block.MethodReturn(expressions[0]);
            }
            else {
                exprMethod.Block.DeclareVar<object[]>(
                    "values",
                    NewArrayByLength(typeof(object), Constant(nodes.Length)));
                for (int i = 0; i < nodes.Length; i++) {
                    CodegenExpression result = expressions[i];
                    exprMethod.Block.AssignArrayElement("values", Constant(i), result);
                }

                exprMethod.Block.MethodReturn(Ref("values"));
            }

            method.Block
                .DeclareVar<object>(
                    "values",
                    LocalMethod(exprMethod, Ref("events"), ConstantTrue(), ConstantNull()))
                .MethodReturn(
                    StaticMethod(
                        typeof(ContextControllerHashedGetterCRC32SerializedForge),
                        "SerializeAndCRC32Hash",
                        Ref("values"),
                        Constant(granularity),
                        serializers));

            return LocalMethod(method, beanExpression);
        }
Пример #12
0
        private static void RecursiveAdd(
            CodegenMethod methodNode,
            IDictionary<string, Type> currentSymbols,
            CodegenClassMethods classMethods,
            CodegenClassProperties classProperties,
            bool isStatic)
        {
            ISet<string> namesPassed = GetNamesPassed(methodNode);
            methodNode.DeepParameters = namesPassed;

            IList<CodegenNamedParam> paramset = new List<CodegenNamedParam>(
                namesPassed.Count + methodNode.LocalParams.Count);

            // add local params
            foreach (var named in methodNode.LocalParams) {
                paramset.Add(named);
            }

            // add pass-thru for those methods that do not have their own scope
            if (methodNode.OptionalSymbolProvider == null) {
                foreach (var nameX in namesPassed) {
                    var symbolType = currentSymbols.Get(nameX);
                    if (symbolType == null) {
                        throw new IllegalStateException(
                            "Failed to find named parameter '" +
                            nameX +
                            "' for method from " +
                            methodNode.AdditionalDebugInfo);
                    }

                    paramset.Add(new CodegenNamedParam(symbolType, nameX));
                }
            }
            else {
                currentSymbols = new Dictionary<string, Type>();
                methodNode.OptionalSymbolProvider.Provide(currentSymbols);
            }

            var name = "M" + classMethods.PrivateMethods.Count;
            var footprint = new CodegenMethodFootprint(
                methodNode.ReturnType,
                methodNode.ReturnTypeName,
                paramset,
                methodNode.AdditionalDebugInfo);
            var method = new CodegenMethodWGraph(
                name,
                footprint,
                methodNode.Block,
                false,
                methodNode.IsOverride,
                isStatic);

            methodNode.AssignedMethod = method;
            classMethods.PrivateMethods.Add(method);

            foreach (var child in methodNode.Children) {
                RecursiveAdd(
                    child,
                    currentSymbols,
                    classMethods,
                    classProperties,
                    isStatic);
            }
        }
Пример #13
0
 private static ISet<string> GetNamesPassed(CodegenMethod node)
 {
     var names = new SortedSet<string>();
     RecursiveGetNamesPassed(node, names);
     return names;
 }
Пример #14
0
 public abstract void ForEachBlock(
     CodegenBlock block,
     CodegenMethod methodNode,
     ExprForgeCodegenSymbol scope,
     CodegenClassScope codegenClassScope);
Пример #15
0
 protected override void ClearWODistinct(
     CodegenMethod method,
     CodegenClassScope classScope)
 {
     method.Block.Apply(GetClear());
 }
 public void ClearCodegen(
     CodegenMethod method,
     CodegenClassScope classScope)
 {
     method.Block.AssignRef(state, ExprDotMethod(spec, "MakeAggState"));
 }
        public CodegenExpression EventBeanGetCodegen(
            CodegenExpression beanExpression,
            CodegenMethodScope parent,
            CodegenClassScope classScope)
        {
            CodegenMethod method = parent.MakeChild(typeof(object), this.GetType(), classScope)
                .AddParam(typeof(EventBean), "eventBean");
            method.Block.DeclareVar<EventBean[]>("events", NewArrayWithInit(typeof(EventBean), Ref("eventBean")));

            // method to evaluate expressions and compute hash
            ExprForgeCodegenSymbol exprSymbol = new ExprForgeCodegenSymbol(true, true);
            CodegenMethod exprMethod = method
                .MakeChildWithScope(
                    reflectionMethod.ReturnType,
                    typeof(CodegenLegoMethodExpression),
                    exprSymbol,
                    classScope)
                .AddParam(ExprForgeCodegenNames.PARAMS);

            // generate args
            StaticMethodCodegenArgDesc[] args = AllArgumentExpressions(
                nodes,
                reflectionMethod,
                exprMethod,
                exprSymbol,
                classScope);
            AppendArgExpressions(args, exprMethod.Block);

            // try block
            CodegenBlock tryBlock = exprMethod.Block.TryCatch();
            CodegenExpression invoke = CodegenInvokeExpression(null, reflectionMethod, args, classScope);
            tryBlock.BlockReturn(invoke);

            // exception handling
            AppendCatch(
                tryBlock,
                reflectionMethod,
                statementName,
                reflectionMethod.DeclaringType.CleanName(),
                true,
                args);

            exprMethod.Block.MethodReturn(Constant(0));

            method.Block.DeclareVar(
                reflectionMethod.ReturnType,
                "result",
                LocalMethod(exprMethod, Ref("events"), ConstantTrue(), ConstantNull()));
            if (reflectionMethod.ReturnType.CanBeNull()) {
                method.Block.IfRefNull("result").BlockReturn(Constant(0));
            }

            method.Block.DeclareVar<int>(
                    "value",
                    SimpleNumberCoercerFactory.GetCoercer(reflectionMethod.ReturnType, typeof(int?))
                        .CoerceCodegen(Ref("result"), reflectionMethod.ReturnType))
                .IfCondition(Relational(Ref("value"), CodegenExpressionRelational.CodegenRelational.GE, Constant(0)))
                .BlockReturn(Op(Ref("value"), "%", Constant(granularity)))
                .MethodReturn(Op(Op(Ref("value"), "%", Constant(granularity)), "*", Constant(-1)));
            return LocalMethod(method, beanExpression);
        }
Пример #18
0
 public void ClearCodegen(
     CodegenMethod method,
     CodegenClassScope classScope)
 {
     method.Block.MethodThrowUnsupported();
 }
Пример #19
0
 public void StopMethodCodegen(
     AggregationServiceFactoryForgeWMethodGen forge,
     CodegenMethod method)
 {
     // no code
 }
Пример #20
0
        private static CodegenExpression MakeAnnotation(
            Attribute annotation,
            CodegenMethod parent,
            CodegenClassScope codegenClassScope)
        {
            if (annotation == null) {
                return ConstantNull();
            }

            if (annotation is NameAttribute name) {
                return NewInstance<AnnotationName>(
                    Constant(name.Value));
            }

            if (annotation is PriorityAttribute priority) {
                return NewInstance<AnnotationPriority>(
                    Constant(priority.Value));
            }

            if (annotation is TagAttribute tag) {
                return NewInstance<AnnotationTag>(
                    Constant(tag.Name),
                    Constant(tag.Value));
            }

            if (annotation is DropAttribute) {
                return NewInstance<AnnotationDrop>();
            }

            if (annotation is DescriptionAttribute description) {
                return NewInstance<AnnotationDescription>(
                    Constant(description.Value));
            }

            if (annotation is HintAttribute hint) {
                return NewInstance<AnnotationHint>(
                    Constant(hint.Value),
                    Constant(hint.Applies),
                    Constant(hint.Model));
            }

            if (annotation is NoLockAttribute) {
                return NewInstance<AnnotationNoLock>();
            }

            if (annotation is AuditAttribute audit) {
                return NewInstance<AnnotationAudit>(Constant(audit.Value));
            }

            if (annotation is EventRepresentationAttribute anno) {
                return NewInstance<AnnotationEventRepresentation>(
                    EnumValue(
                        anno.Value.GetType(),
                        anno.Value.GetName()));
            }

            if (annotation is IterableUnboundAttribute) {
                return NewInstance<AnnotationIterableUnbound>();
            }

            if (annotation is HookAttribute hook) {
                return NewInstance<AnnotationHook>(
                    EnumValue(typeof(HookType), hook.HookType.GetName()),
                    Constant(hook.Hook));
            }

            if (annotation is AvroSchemaFieldAttribute field) {
                return NewInstance<AvroSchemaFieldHook>(
                    Constant(field.Name),
                    Constant(field.Schema));
            }

            if (annotation is PrivateAttribute) {
                return NewInstance<AnnotationPrivate>();
            }

            if (annotation is ProtectedAttribute) {
                return NewInstance<AnnotationProtected>();
            }

            if (annotation is PublicAttribute) {
                return NewInstance<AnnotationPublic>();
            }

            if (annotation is BusEventTypeAttribute) {
                return NewInstance<AnnotationBusEventType>();
            }

            if (annotation is JsonSchemaAttribute jsonSchema) {
                return NewInstance<AnnotationJsonSchema>(Constant(jsonSchema.Dynamic), Constant(jsonSchema.ClassName));
            }

            if (annotation is JsonSchemaFieldAttribute jsonSchemaField) {
                return NewInstance<AnnotationJsonSchemaField>(Constant(jsonSchemaField.Name), Constant(jsonSchemaField.Adapter));
            }

            if (annotation is XMLSchemaAttribute xmlSchema) {
                return AnnotationXMLSchema.ToExpression(xmlSchema, parent, codegenClassScope);
            }

            if (annotation is XMLSchemaNamespacePrefixAttribute schemaNamespacePrefix) {
                return AnnotationXMLSchemaNamespacePrefix.ToExpression(schemaNamespacePrefix, parent, codegenClassScope);
            }

            if (annotation is XMLSchemaFieldAttribute xmlSchemaField) {
                return AnnotationXMLSchemaField.ToExpression(xmlSchemaField, parent, codegenClassScope);
            }
            
            if (annotation.GetType().Namespace == RootNamespace) {
                throw new IllegalStateException(
                    "Unrecognized annotation residing in the '" +
                    RootNamespace +
                    " namespace having type" +
                    annotation.GetType().Name);
            }

            // application-provided annotation
            if (annotation is CustomAttribute) {
                return ((CustomAttribute) annotation).MakeCodegenExpression(
                    parent,
                    codegenClassScope);
            }

            if (annotation is IProxyTargetAccessor proxyTargetAccessor) {
                var interceptor = (EPLAnnotationInvocationHandler) proxyTargetAccessor.GetInterceptors()[0];
                var methodNode = parent.MakeChild(typeof(Attribute), typeof(AnnotationUtil), codegenClassScope);

                methodNode.Block.DeclareVar(
                    interceptor.AnnotationClass,
                    "annotation",
                    NewInstance(interceptor.AnnotationClass));

                //var annotationType = CodegenMethod.MakeMethod(
                //    typeof(Type), typeof(AnnotationUtil), codegenClassScope);
                //clazz.AddMethod("annotationType", annotationType);
                //annotationType.Block.MethodReturn(Clazz(interceptor.AnnotationClass));

                foreach (var property in interceptor.AnnotationClass.GetProperties())
                {
                    if (!property.CanWrite) {
                        continue;
                    }

                    CodegenExpression valueExpression;

                    var value = interceptor.Attributes.Get(property.Name);
                    if (value == null)
                    {
                        valueExpression = ConstantNull();
                    }
                    else if (property.PropertyType == typeof(Type))
                    {
                        valueExpression = Clazz((Type) value);
                    }
                    else if (property.PropertyType.IsArray && property.PropertyType.GetElementType().IsAttribute())
                    {
                        valueExpression = LocalMethod(
                            MakeAnnotations(
                                property.PropertyType, (Attribute[]) value, methodNode, codegenClassScope));
                    }
                    else if (!property.PropertyType.IsAttribute())
                    {
                        valueExpression = Constant(value);
                    }
                    else
                    {
                        valueExpression = FlexCast(
                            property.PropertyType, 
                            MakeAnnotation((Attribute) value, methodNode, codegenClassScope));
                    }

                    methodNode.Block.SetProperty(
                        Ref("annotation"), property.Name, valueExpression);
                }

                methodNode.Block.MethodReturn(Ref("annotation"));
                return LocalMethod(methodNode);
            }

            throw new IllegalStateException(
                "Unrecognized annotation having type " + annotation.GetType().FullName);
        }
Пример #21
0
 public void ClearResultsCodegen(
     CodegenMethod method,
     CodegenClassScope classScope)
 {
     method.Block.ExprDotMethod(REF_ROW, "Clear");
 }
Пример #22
0
 protected abstract void InlineInitializeOnTriggerSpecific(
     CodegenExpressionRef saiff,
     CodegenMethod method,
     SAIFFInitializeSymbol symbols,
     CodegenClassScope classScope);
Пример #23
0
 public void GetGroupKeyCodegen(
     CodegenMethod method,
     CodegenClassScope classScope)
 {
     method.Block.MethodReturn(ConstantNull());
 }
Пример #24
0
 public void ClearMethodCodegen(
     CodegenClassScope classScope,
     CodegenMethod method)
 {
     ResultSetProcessorRowForAllImpl.ClearCodegen(method);
 }
Пример #25
0
 public void RowWriteMethodCodegen(
     CodegenMethod method,
     int level)
 {
 }
Пример #26
0
 protected override void ClearWODistinct(
     CodegenMethod method,
     CodegenClassScope classScope)
 {
     method.Block.AssignRef(currentMinMax, ConstantNull());
 }
Пример #27
0
 public override void GetValueCodegen(
     CodegenMethod method,
     CodegenClassScope classScope)
 {
     method.Block.MethodReturn(StaticMethod(typeof(AggregatorAvedev), "ComputeAvedev", valueSet, sum));
 }
Пример #28
0
 public override void GetValueCodegen(
     CodegenMethod method,
     CodegenClassScope classScope)
 {
     method.Block.MethodReturn(currentMinMax);
 }
Пример #29
0
 public override void InitBlock(CodegenBlock block, CodegenMethod methodNode, ExprForgeCodegenSymbol scope, CodegenClassScope codegenClassScope)
 {
     block.DeclareVar <int>("rowcount", Constant(0));
 }
 public void GetValueCodegen(
     CodegenMethod method,
     CodegenClassScope classScope)
 {
     method.Block.MethodReturn(ExprDotMethod(builder, "ToString"));
 }