internal static CodegenExpression MakeAggregationService( int subqueryNumber, AggregationServiceForgeDesc aggregationServiceForgeDesc, CodegenClassScope classScope, CodegenMethodScope parent, SAIFFInitializeSymbol symbols) { if (aggregationServiceForgeDesc == null) { return(ConstantNull()); } AggregationClassNames aggregationClassNames = new AggregationClassNames(CodegenNamespaceScopeNames.ClassPostfixAggregationForSubquery(subqueryNumber)); AggregationServiceFactoryMakeResult aggResult = AggregationServiceFactoryCompiler.MakeInnerClassesAndInit( false, aggregationServiceForgeDesc.AggregationServiceFactoryForge, parent, classScope, classScope.OutermostClassName, aggregationClassNames); classScope.AddInnerClasses(aggResult.InnerClasses); return(LocalMethod(aggResult.InitMethod, symbols.GetAddInitSvc(parent))); }
public CodegenMethod InitializeCodegen( CodegenMethodScope parent, SAIFFInitializeSymbol symbols, CodegenClassScope classScope) { // add aggregation row+factory+serde as inner classes var aggregationClassNames = new AggregationClassNames(); var inners = AggregationServiceFactoryCompiler.MakeTable( AggregationCodegenRowLevelDesc.FromTopOnly(_plan.AggDesc), GetType(), classScope, aggregationClassNames, _className); classScope.AddInnerClasses(inners); var method = parent.MakeChild(typeof(StatementAgentInstanceFactoryCreateTable), GetType(), classScope); CodegenExpression primaryKeyGetter = MultiKeyCodegen.CodegenGetterMayMultiKey( _plan.InternalEventType, _plan.PrimaryKeyGetters, _plan.PrimaryKeyTypes, null, _plan.PrimaryKeyMultikeyClasses, method, classScope); CodegenExpression fafTransform = MultiKeyCodegen.CodegenMultiKeyFromArrayTransform( _plan.PrimaryKeyMultikeyClasses, method, classScope); CodegenExpression intoTableTransform = MultiKeyCodegen.CodegenMultiKeyFromMultiKeyTransform( _plan.PrimaryKeyMultikeyClasses, method, classScope); var propertyForgeEval = DataInputOutputSerdeForgeExtensions.CodegenArray( _plan.InternalEventTypePropertySerdes, method, classScope, ExprDotName(symbols.GetAddInitSvc(method), EPStatementInitServicesConstants.EVENTTYPERESOLVER)); method.Block .DeclareVar<StatementAgentInstanceFactoryCreateTable>("saiff", NewInstance(typeof(StatementAgentInstanceFactoryCreateTable))) .SetProperty(Ref("saiff"), "TableName", Constant(_tableName)) .SetProperty(Ref("saiff"), "PublicEventType", EventTypeUtility.ResolveTypeCodegen(_plan.PublicEventType, symbols.GetAddInitSvc(method))) .SetProperty(Ref("saiff"), "EventToPublic", MakeEventToPublic(method, symbols, classScope)) .SetProperty(Ref("saiff"), "AggregationRowFactory", NewInstanceInner(aggregationClassNames.RowFactoryTop, Ref("this"))) .SetProperty(Ref("saiff"), "AggregationSerde", NewInstanceInner(aggregationClassNames.RowSerdeTop, Ref("this"))) .SetProperty(Ref("saiff"), "PrimaryKeyGetter", primaryKeyGetter) .SetProperty(Ref("saiff"), "PrimaryKeySerde", _plan.PrimaryKeyMultikeyClasses.GetExprMKSerde(method, classScope)) .SetProperty(Ref("saiff"), "PropertyForges", propertyForgeEval) .SetProperty(Ref("saiff"), "PrimaryKeyObjectArrayTransform", fafTransform) .SetProperty(Ref("saiff"), "PrimaryKeyIntoTableTransform", intoTableTransform) .ExprDotMethod(symbols.GetAddInitSvc(method), "AddReadyCallback", Ref("saiff")) .MethodReturn(Ref("saiff")); return method; }
public CodegenMethod InitializeCodegen( CodegenMethodScope parent, SAIFFInitializeSymbol symbols, CodegenClassScope classScope) { // add aggregation row+factory+serde as inner classes var aggregationClassNames = new AggregationClassNames(); var inners = AggregationServiceFactoryCompiler.MakeTable( AggregationCodegenRowLevelDesc.FromTopOnly(plan.AggDesc), GetType(), classScope, aggregationClassNames, className); classScope.AddInnerClasses(inners); var method = parent.MakeChild(typeof(StatementAgentInstanceFactoryCreateTable), GetType(), classScope); var primaryKeyGetter = ConstantNull(); if (plan.PrimaryKeyGetters != null) { primaryKeyGetter = EventTypeUtility.CodegenGetterMayMultiKeyWCoerce( plan.InternalEventType, plan.PrimaryKeyGetters, plan.PrimaryKeyTypes, null, method, GetType(), classScope); } method.Block .DeclareVar<StatementAgentInstanceFactoryCreateTable>( "saiff", NewInstance(typeof(StatementAgentInstanceFactoryCreateTable))) .SetProperty(Ref("saiff"), "TableName", Constant(tableName)) .SetProperty( Ref("saiff"), "PublicEventType", EventTypeUtility.ResolveTypeCodegen(plan.PublicEventType, symbols.GetAddInitSvc(method))) .SetProperty(Ref("saiff"), "EventToPublic", MakeEventToPublic(method, symbols, classScope)) .SetProperty( Ref("saiff"), "AggregationRowFactory", NewInstance(aggregationClassNames.RowFactoryTop, Ref("this"))) .SetProperty( Ref("saiff"), "AggregationSerde", NewInstance(aggregationClassNames.RowSerdeTop, Ref("this"))) .SetProperty(Ref("saiff"), "PrimaryKeyGetter", primaryKeyGetter) .ExprDotMethod(symbols.GetAddInitSvc(method), "AddReadyCallback", Ref("saiff")) .MethodReturn(Ref("saiff")); return method; }
public CodegenExpression Make( CodegenMethodScope parent, SAIFFInitializeSymbol symbols, CodegenClassScope classScope) { var method = parent.MakeChild(typeof(RowRecogDesc), GetType(), classScope); var desc = Ref("desc"); CodegenExpression init = symbols.GetAddInitSvc(method); var startStateNums = new int[_startStates.Length]; for (var i = 0; i < _startStates.Length; i++) { startStateNums[i] = _startStates[i].NodeNumFlat; } var aggregationServiceFactories = ConstantNull(); if (_aggregationServices != null) { var initAggsSvcs = new CodegenExpression[_aggregationServices.Length]; for (var i = 0; i < _aggregationServices.Length; i++) { initAggsSvcs[i] = ConstantNull(); if (_aggregationServices[i] != null) { var aggSvc = _aggregationServices[i]; var aggregationClassNames = new AggregationClassNames("_mra" + i); var result = AggregationServiceFactoryCompiler.MakeInnerClassesAndInit( false, aggSvc.AggregationServiceFactoryForge, method, classScope, classScope.OutermostClassName, aggregationClassNames); classScope.AddInnerClasses(result.InnerClasses); initAggsSvcs[i] = LocalMethod(result.InitMethod, symbols.GetAddInitSvc(parent)); } } aggregationServiceFactories = NewArrayWithInit(typeof(AggregationServiceFactory), initAggsSvcs); } method.Block .DeclareVar<RowRecogDesc>(desc.Ref, NewInstance(typeof(RowRecogDesc))) .SetProperty(desc, "ParentEventType", EventTypeUtility.ResolveTypeCodegen(_parentEventType, init)) .SetProperty(desc, "RowEventType", EventTypeUtility.ResolveTypeCodegen(RowEventType, init)) .SetProperty(desc, "CompositeEventType", EventTypeUtility.ResolveTypeCodegen(_compositeEventType, init)) .SetProperty( desc, "MultimatchEventType", _multimatchEventType == null ? ConstantNull() : EventTypeUtility.ResolveTypeCodegen(_multimatchEventType, init)) .SetProperty(desc, "MultimatchStreamNumToVariable", Constant(_multimatchStreamNumToVariable)) .SetProperty(desc, "MultimatchVariableToStreamNum", Constant(_multimatchVariableToStreamNum)) .SetProperty( desc, "PartitionEvalMayNull", MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(_partitionBy, null, _partitionByMultiKey, method, classScope)) .SetProperty( desc, "PartitionEvalTypes", _partitionBy == null ? ConstantNull() : Constant(ExprNodeUtilityQuery.GetExprResultTypes(_partitionBy))) .SetProperty(desc, "PartitionEvalSerde", _partitionBy == null ? ConstantNull() : _partitionByMultiKey.GetExprMKSerde(method, classScope)) .SetProperty(desc, "VariableStreams", MakeVariableStreams(method, symbols, classScope)) .SetProperty(desc, "HasInterval", Constant(_hasInterval)) .SetProperty(desc, "IsIterateOnly", Constant(_iterateOnly)) .SetProperty(desc, "IsUnbound", Constant(_unbound)) .SetProperty(desc, "IsOrTerminated", Constant(_orTerminated)) .SetProperty(desc, "IsCollectMultimatches", Constant(_collectMultimatches)) .SetProperty(desc, "IsDefineAsksMultimatches", Constant(_defineAsksMultimatches)) .SetProperty(desc, "NumEventsEventsPerStreamDefine", Constant(_numEventsEventsPerStreamDefine)) .SetProperty(desc, "MultimatchVariablesArray", Constant(_multimatchVariablesArray)) .SetProperty(desc, "StatesOrdered", MakeStates(method, symbols, classScope)) .SetProperty(desc, "NextStatesPerState", MakeNextStates(method, classScope)) .SetProperty(desc, "StartStates", Constant(startStateNums)) .SetProperty(desc, "IsAllMatches", Constant(_allMatches)) .SetProperty(desc, "Skip", Constant(_skip)) .SetProperty( desc, "ColumnEvaluators", ExprNodeUtilityCodegen.CodegenEvaluators(_columnEvaluators, method, GetType(), classScope)) .SetProperty(desc, "ColumnNames", Constant(_columnNames)) .SetProperty( desc, "IntervalCompute", _intervalCompute == null ? ConstantNull() : _intervalCompute.MakeEvaluator(method, classScope)) .SetProperty(desc, "PreviousRandomAccessIndexes", Constant(_previousRandomAccessIndexes)) .SetProperty(desc, "AggregationServiceFactories", aggregationServiceFactories) .SetProperty( desc, "AggregationResultFutureAssignables", _aggregationServices == null ? ConstantNull() : MakeAggAssignables(method, classScope)) .MethodReturn(desc); return LocalMethod(method); }