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); }
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"))); }