protected internal static void ProcessOutputLimitedLastAllNonBufferedCodegen( string methodName, ResultSetProcessorRowForAllForge forge, CodegenClassScope classScope, CodegenMethod method, CodegenInstanceAux instance) { var factory = classScope.AddOrGetDefaultFieldSharable(ResultSetProcessorHelperFactoryField.INSTANCE); if (forge.OutputLimitSpec.DisplayLimit == OutputLimitLimitType.ALL) { instance.AddMember(NAME_OUTPUTALLHELPER, typeof(ResultSetProcessorRowForAllOutputAllHelper)); instance.ServiceCtor.Block.AssignRef( NAME_OUTPUTALLHELPER, ExprDotMethod(factory, "MakeRSRowForAllOutputAll", Ref("this"), MEMBER_AGENTINSTANCECONTEXT)); method.Block.ExprDotMethod( Member(NAME_OUTPUTALLHELPER), methodName, REF_NEWDATA, REF_OLDDATA, REF_ISSYNTHESIZE); } else if (forge.OutputLimitSpec.DisplayLimit == OutputLimitLimitType.LAST) { instance.AddMember(NAME_OUTPUTLASTHELPER, typeof(ResultSetProcessorRowForAllOutputLastHelper)); instance.ServiceCtor.Block.AssignRef( NAME_OUTPUTLASTHELPER, ExprDotMethod(factory, "MakeRSRowForAllOutputLast", Ref("this"), MEMBER_AGENTINSTANCECONTEXT)); method.Block.ExprDotMethod( Member(NAME_OUTPUTLASTHELPER), methodName, REF_NEWDATA, REF_OLDDATA, REF_ISSYNTHESIZE); } }
private static void ProcessOutputLimitedLastAllNonBufferedCodegen( ResultSetProcessorSimpleForge forge, string methodName, CodegenClassScope classScope, CodegenMethod method, CodegenInstanceAux instance) { var factory = classScope.AddOrGetDefaultFieldSharable(ResultSetProcessorHelperFactoryField.INSTANCE); CodegenExpression eventTypes = classScope.AddDefaultFieldUnshared( true, typeof(EventType[]), EventTypeUtility.ResolveTypeArrayCodegen(forge.EventTypes, EPStatementInitServicesConstants.REF)); if (forge.IsOutputAll) { instance.AddMember(NAME_OUTPUTALLHELPER, typeof(ResultSetProcessorSimpleOutputAllHelper)); instance.ServiceCtor.Block.AssignRef( NAME_OUTPUTALLHELPER, ExprDotMethod(factory, "MakeRSSimpleOutputAll", Ref("this"), MEMBER_AGENTINSTANCECONTEXT, eventTypes)); method.Block.ExprDotMethod(Member(NAME_OUTPUTALLHELPER), methodName, REF_NEWDATA, REF_OLDDATA); } else if (forge.IsOutputLast) { instance.AddMember(NAME_OUTPUTLASTHELPER, typeof(ResultSetProcessorSimpleOutputLastHelper)); instance.ServiceCtor.Block.AssignRef( NAME_OUTPUTLASTHELPER, ExprDotMethod( factory, "MakeRSSimpleOutputLast", Ref("this"), MEMBER_AGENTINSTANCECONTEXT, eventTypes)); method.Block.ExprDotMethod(Member(NAME_OUTPUTLASTHELPER), methodName, REF_NEWDATA, REF_OLDDATA); } }
public void InstanceCodegen( CodegenInstanceAux instance, CodegenClassScope classScope, CodegenCtor factoryCtor, IList<CodegenTypedParam> factoryMembers) { instance.Properties.AddProperty( typeof(SelectExprProcessor), "SelectExprProcessor", GetType(), classScope, propertyNode => propertyNode.GetterBlock.BlockReturn(MEMBER_SELECTEXPRPROCESSOR)); instance.Properties.AddProperty( typeof(AggregationService), "AggregationService", GetType(), classScope, propertyNode => propertyNode.GetterBlock.BlockReturn(MEMBER_AGGREGATIONSVC)); instance.Methods.AddMethod( typeof(ExprEvaluatorContext), "GetAgentInstanceContext", EmptyList<CodegenNamedParam>.Instance, GetType(), classScope, node => node.Block.ReturnMethodOrBlock(MEMBER_AGENTINSTANCECONTEXT)); instance.Properties.AddProperty( typeof(bool), "HasHavingClause", GetType(), classScope, propertyNode => propertyNode.GetterBlock.BlockReturn(Constant(OptionalHavingNode != null))); instance.Properties.AddProperty( typeof(bool), "IsSelectRStream", typeof(ResultSetProcessorRowForAll), classScope, propertyNode => propertyNode.GetterBlock.BlockReturn(Constant(IsSelectRStream))); ResultSetProcessorUtil.EvaluateHavingClauseCodegen(OptionalHavingNode, classScope, instance); GenerateGroupKeySingle = ResultSetProcessorGroupedUtil.GenerateGroupKeySingleCodegen(GroupKeyNodeExpressions, multiKeyClassRef, classScope, instance); GenerateGroupKeyArrayView = ResultSetProcessorGroupedUtil.GenerateGroupKeyArrayViewCodegen(GenerateGroupKeySingle, classScope, instance); GenerateGroupKeyArrayJoin = ResultSetProcessorGroupedUtil.GenerateGroupKeyArrayJoinCodegen(GenerateGroupKeySingle, classScope, instance); ResultSetProcessorRowPerGroupImpl.GenerateOutputBatchedNoSortWMapCodegen(this, classScope, instance); ResultSetProcessorRowPerGroupImpl.GenerateOutputBatchedArrFromEnumeratorCodegen(this, classScope, instance); ResultSetProcessorRowPerGroupImpl.RemovedAggregationGroupKeyCodegen(classScope, instance); if (unboundedProcessor) { var factory = classScope.AddOrGetDefaultFieldSharable(ResultSetProcessorHelperFactoryField.INSTANCE); instance.AddMember(NAME_GROUPREPS, typeof(ResultSetProcessorRowPerGroupUnboundHelper)); CodegenExpression groupKeySerde = MultiKeyClassRef.GetExprMKSerde(classScope.NamespaceScope.InitMethod, classScope); var eventType = classScope.AddDefaultFieldUnshared( true, typeof(EventType), EventTypeUtility.ResolveTypeCodegen(typesPerStream[0], EPStatementInitServicesConstants.REF)); instance.ServiceCtor.Block .AssignRef( NAME_GROUPREPS, ExprDotMethod( factory, "MakeRSRowPerGroupUnboundGroupRep", Constant(groupKeyTypes), groupKeySerde, eventType, MEMBER_AGENTINSTANCECONTEXT)) .ExprDotMethod(MEMBER_AGGREGATIONSVC, "SetRemovedCallback", Member(NAME_GROUPREPS)); } else { instance.ServiceCtor.Block .ExprDotMethod(MEMBER_AGGREGATIONSVC, "SetRemovedCallback", Ref("this")); } }
protected internal static void ProcessViewResultUnboundCodegen( ResultSetProcessorRowPerGroupRollupForge forge, CodegenClassScope classScope, CodegenMethod method, CodegenInstanceAux instance) { var factory = classScope.AddOrGetDefaultFieldSharable(ResultSetProcessorHelperFactoryField.INSTANCE); CodegenExpression eventTypes = classScope.AddDefaultFieldUnshared( true, typeof(EventType[]), EventTypeUtility.ResolveTypeArrayCodegen(forge.EventTypes, EPStatementInitServicesConstants.REF)); instance.AddMember(NAME_UNBOUNDHELPER, typeof(ResultSetProcessorRowPerGroupRollupUnboundHelper)); instance.ServiceCtor.Block.AssignRef( NAME_UNBOUNDHELPER, ExprDotMethod( factory, "MakeRSRowPerGroupRollupSnapshotUnbound", MEMBER_AGENTINSTANCECONTEXT, Ref("this"), Constant(forge.GroupKeyTypes), Constant(forge.NumStreams), eventTypes)); var generateGroupKeysView = GenerateGroupKeysViewCodegen(forge, classScope, instance); var generateOutputEventsView = GenerateOutputEventsViewCodegen(forge, classScope, instance); method.Block .DeclareVar<object[][]>( "newDataMultiKey", LocalMethod( generateGroupKeysView, REF_NEWDATA, ExprDotName(Ref(NAME_UNBOUNDHELPER), "Buffer"), ConstantTrue())) .DeclareVar<object[][]>( "oldDataMultiKey", LocalMethod( generateGroupKeysView, REF_OLDDATA, ExprDotName(Ref(NAME_UNBOUNDHELPER), "Buffer"), ConstantFalse())) .DeclareVar<EventBean[]>( "selectOldEvents", forge.IsSelectRStream ? LocalMethod( generateOutputEventsView, ExprDotName(Ref(NAME_UNBOUNDHELPER), "Buffer"), ConstantFalse(), REF_ISSYNTHESIZE) : ConstantNull()) .DeclareVar<EventBean[]>("eventsPerStream", NewArrayByLength(typeof(EventBean), Constant(1))) .StaticMethod( typeof(ResultSetProcessorGroupedUtil), METHOD_APPLYAGGVIEWRESULTKEYEDVIEW, MEMBER_AGGREGATIONSVC, MEMBER_AGENTINSTANCECONTEXT, REF_NEWDATA, Ref("newDataMultiKey"), REF_OLDDATA, Ref("oldDataMultiKey"), Ref("eventsPerStream")) .DeclareVar<EventBean[]>( "selectNewEvents", LocalMethod( generateOutputEventsView, ExprDotName(Ref(NAME_UNBOUNDHELPER), "Buffer"), ConstantTrue(), REF_ISSYNTHESIZE)) .MethodReturn( StaticMethod( typeof(ResultSetProcessorUtil), METHOD_TOPAIRNULLIFALLNULL, Ref("selectNewEvents"), Ref("selectOldEvents"))); }