public CodegenExpression Make( CodegenMethodScope parent, SAIFFInitializeSymbol symbols, CodegenClassScope classScope) { var method = parent.MakeChild(typeof(PollResultIndexingStrategyHash), GetType(), classScope); var propertyGetters = EventTypeUtility.GetGetters(eventType, propertyNames); var propertyTypes = EventTypeUtility.GetPropertyTypes(eventType, propertyNames); var valueGetter = EventTypeUtility.CodegenGetterMayMultiKeyWCoerce( eventType, propertyGetters, propertyTypes, coercionTypes, method, GetType(), classScope); method.Block .DeclareVar<PollResultIndexingStrategyHash>( "strat", NewInstance(typeof(PollResultIndexingStrategyHash))) .SetProperty(Ref("strat"), "StreamNum", Constant(streamNum)) .SetProperty(Ref("strat"), "PropertyNames", Constant(propertyNames)) .SetProperty(Ref("strat"), "ValueGetter", valueGetter) .ExprDotMethod(Ref("strat"), "Init") .MethodReturn(Ref("strat")); return LocalMethod(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(PollResultIndexingStrategyComposite), GetType(), classScope); var hashGetter = ConstantNull(); if (optHashPropertyNames != null) { var propertyGetters = EventTypeUtility.GetGetters(eventType, optHashPropertyNames); var propertyTypes = EventTypeUtility.GetPropertyTypes(eventType, optHashPropertyNames); hashGetter = EventTypeUtility.CodegenGetterMayMultiKeyWCoerce( eventType, propertyGetters, propertyTypes, optHashCoercedTypes, method, GetType(), classScope); } method.Block.DeclareVar<EventPropertyValueGetter[]>( "rangeGetters", NewArrayByLength(typeof(EventPropertyValueGetter), Constant(rangeProps.Length))); for (var i = 0; i < rangeProps.Length; i++) { var propertyType = eventType.GetPropertyType(rangeProps[i]); var getterSPI = ((EventTypeSPI) eventType).GetGetterSPI(rangeProps[i]); var getter = EventTypeUtility.CodegenGetterWCoerce( getterSPI, propertyType, rangeTypes[i], method, GetType(), classScope); method.Block.AssignArrayElement(Ref("rangeGetters"), Constant(i), getter); } method.Block .DeclareVar<PollResultIndexingStrategyComposite>( "strat", NewInstance(typeof(PollResultIndexingStrategyComposite))) .SetProperty(Ref("strat"), "StreamNum", Constant(streamNum)) .SetProperty(Ref("strat"), "OptionalKeyedProps", Constant(optHashPropertyNames)) .SetProperty(Ref("strat"), "OptKeyCoercedTypes", Constant(optHashCoercedTypes)) .SetProperty(Ref("strat"), "HashGetter", hashGetter) .SetProperty(Ref("strat"), "RangeProps", Constant(rangeProps)) .SetProperty(Ref("strat"), "OptRangeCoercedTypes", Constant(rangeTypes)) .SetProperty(Ref("strat"), "RangeGetters", Ref("rangeGetters")) .ExprDotMethod(Ref("strat"), "Init") .MethodReturn(Ref("strat")); return LocalMethod(method); }