Exemplo n.º 1
0
 public void SortWGroupKeysCodegen(
     CodegenMethod method,
     CodegenClassScope classScope,
     CodegenNamedMethods namedMethods)
 {
     OrderByProcessorImpl.SortWGroupKeysCodegen(this, method, classScope, namedMethods);
 }
 public void GetSortKeyCodegen(
     CodegenMethod method,
     CodegenClassScope classScope,
     CodegenNamedMethods namedMethods)
 {
     OrderByProcessorImpl.GetSortKeyCodegen(orderByProcessorForge, method, classScope, namedMethods);
 }
        protected internal static void SortWGroupKeysCodegen(
            OrderByProcessorOrderedLimitForge forge,
            CodegenMethod method,
            CodegenClassScope classScope,
            CodegenNamedMethods namedMethods)
        {
            var sortWGroupKeys = method.MakeChild(typeof(EventBean[]), typeof(OrderByProcessorOrderedLimit), classScope)
                .AddParam(SORTWGROUPKEYS_PARAMS);
            OrderByProcessorImpl.SortWGroupKeysCodegen(
                forge.OrderByProcessorForge,
                sortWGroupKeys,
                classScope,
                namedMethods);

            method.Block.DeclareVar<EventBean[]>(
                    "sorted",
                    LocalMethod(
                        sortWGroupKeys,
                        REF_OUTGOINGEVENTS,
                        REF_GENERATINGEVENTS,
                        REF_ORDERGROUPBYKEYS,
                        ExprForgeCodegenNames.REF_ISNEWDATA,
                        REF_EXPREVALCONTEXT,
                        MEMBER_AGGREGATIONSVC))
                .MethodReturn(ExprDotMethod(REF_ROWLIMITPROCESSOR, "DetermineLimitAndApply", Ref("sorted")));
        }
        public void GetSortKeyRollupCodegen(
            CodegenMethod method,
            CodegenClassScope classScope,
            CodegenNamedMethods namedMethods)
        {
            if (orderByProcessorForge.OrderByRollup == null) {
                method.Block.MethodThrowUnsupported();
                return;
            }

            OrderByProcessorImpl.GetSortKeyRollupCodegen(orderByProcessorForge, method, classScope, namedMethods);
        }
Exemplo n.º 5
0
        public void SortRollupCodegen(
            CodegenMethod method,
            CodegenClassScope classScope,
            CodegenNamedMethods namedMethods)
        {
            if (OrderByRollup == null) {
                method.Block.MethodThrowUnsupported();
                return;
            }

            OrderByProcessorImpl.SortRollupCodegen(this, method, classScope, namedMethods);
        }
        protected internal static void SortPlainCodegenCodegen(
            OrderByProcessorOrderedLimitForge forge,
            CodegenMethod method,
            CodegenClassScope classScope,
            CodegenNamedMethods namedMethods)
        {
            var limit1 = EqualsIdentity(ExprDotName(REF_ROWLIMITPROCESSOR, "CurrentRowLimit"), Constant(1));
            var offset0 = EqualsIdentity(ExprDotName(REF_ROWLIMITPROCESSOR, "CurrentOffset"), Constant(0));
            var haveOutgoing = And(
                NotEqualsNull(REF_OUTGOINGEVENTS),
                Relational(ArrayLength(REF_OUTGOINGEVENTS), GT, Constant(1)));
            var determineLocalMinMax = OrderByProcessorImpl.DetermineLocalMinMaxCodegen(
                forge.OrderByProcessorForge,
                classScope,
                namedMethods);

            var sortPlain = method.MakeChild(typeof(EventBean[]), typeof(OrderByProcessorOrderedLimit), classScope)
                .AddParam(SORTPLAIN_PARAMS);
            OrderByProcessorImpl.SortPlainCodegen(forge.OrderByProcessorForge, sortPlain, classScope, namedMethods);

            method.Block.ExprDotMethod(REF_ROWLIMITPROCESSOR, "DetermineCurrentLimit")
                .IfCondition(And(limit1, offset0, haveOutgoing))
                .DeclareVar<EventBean>(
                    "minmax",
                    LocalMethod(
                        determineLocalMinMax,
                        REF_OUTGOINGEVENTS,
                        REF_GENERATINGEVENTS,
                        ExprForgeCodegenNames.REF_ISNEWDATA,
                        REF_EXPREVALCONTEXT,
                        MEMBER_AGGREGATIONSVC))
                .BlockReturn(NewArrayWithInit(typeof(EventBean), Ref("minmax")))
                .DeclareVar<EventBean[]>(
                    "sorted",
                    LocalMethod(
                        sortPlain,
                        REF_OUTGOINGEVENTS,
                        REF_GENERATINGEVENTS,
                        ExprForgeCodegenNames.REF_ISNEWDATA,
                        REF_EXPREVALCONTEXT,
                        MEMBER_AGGREGATIONSVC))
                .MethodReturn(ExprDotMethod(REF_ROWLIMITPROCESSOR, "ApplyLimit", Ref("sorted")));
        }
 public static void SortRollupCodegen(
     OrderByProcessorOrderedLimitForge forge,
     CodegenMethod method,
     CodegenClassScope classScope,
     CodegenNamedMethods namedMethods)
 {
     var sortRollup = method.MakeChild(typeof(EventBean[]), typeof(OrderByProcessorOrderedLimit), classScope)
         .AddParam(SORTROLLUP_PARAMS);
     OrderByProcessorImpl.SortRollupCodegen(forge.OrderByProcessorForge, sortRollup, classScope, namedMethods);
     method.Block.DeclareVar<EventBean[]>(
             "sorted",
             LocalMethod(
                 sortRollup,
                 REF_OUTGOINGEVENTS,
                 REF_ORDERCURRENTGENERATORS,
                 ExprForgeCodegenNames.REF_ISNEWDATA,
                 MEMBER_AGENTINSTANCECONTEXT,
                 MEMBER_AGGREGATIONSVC))
         .MethodReturn(ExprDotMethod(REF_ROWLIMITPROCESSOR, "DetermineLimitAndApply", Ref("sorted")));
 }
        protected internal static void SortTwoKeysCodegen(
            OrderByProcessorOrderedLimitForge forge,
            CodegenMethod method,
            CodegenClassScope classScope,
            CodegenNamedMethods namedMethods)
        {
            var sortTwoKeys = method.MakeChild(typeof(EventBean[]), typeof(OrderByProcessorOrderedLimit), classScope)
                .AddParam(SORTTWOKEYS_PARAMS);
            OrderByProcessorImpl.SortTwoKeysCodegen(forge.OrderByProcessorForge, sortTwoKeys, classScope, namedMethods);

            method.Block.DeclareVar<EventBean[]>(
                    "sorted",
                    LocalMethod(
                        sortTwoKeys,
                        REF_ORDERFIRSTEVENT,
                        REF_ORDERFIRSTSORTKEY,
                        REF_ORDERSECONDEVENT,
                        REF_ORDERSECONDSORTKEY))
                .MethodReturn(ExprDotMethod(REF_ROWLIMITPROCESSOR, "DetermineLimitAndApply", Ref("sorted")));
        }