public CodegenMethod InitializeCodegen( CodegenClassScope classScope, CodegenMethodScope parent, SAIFFInitializeSymbol symbols) { var method = parent.MakeChild(typeof(StatementAgentInstanceFactorySelect), GetType(), classScope); method.Block .DeclareVar<StatementAgentInstanceFactorySelect>( "saiff", NewInstance(typeof(StatementAgentInstanceFactorySelect))); // stream names method.Block.SetProperty(Ref("saiff"), "StreamNames", Constant(_streamNames)); // activators method.Block.DeclareVar<ViewableActivator[]>( "activators", NewArrayByLength(typeof(ViewableActivator), Constant(_viewableActivatorForges.Length))); for (var i = 0; i < _viewableActivatorForges.Length; i++) { method.Block.AssignArrayElement( "activators", Constant(i), _viewableActivatorForges[i].MakeCodegen(method, symbols, classScope)); } method.Block.SetProperty(Ref("saiff"), "ViewableActivators", Ref("activators")); // views method.Block.DeclareVar<ViewFactory[][]>( "viewFactories", NewArrayByLength(typeof(ViewFactory[]), Constant(_views.Length))); for (var i = 0; i < _views.Length; i++) { if (_views[i] != null) { var array = ViewFactoryForgeUtil.CodegenForgesWInit( _views[i], i, null, method, symbols, classScope); method.Block.AssignArrayElement("viewFactories", Constant(i), array); } } method.Block.SetProperty(Ref("saiff"), "ViewFactories", Ref("viewFactories")); // view delegate information ('prior' and 'prev') method.Block.DeclareVar<ViewResourceDelegateDesc[]>( "viewResourceDelegates", NewArrayByLength(typeof(ViewResourceDelegateDesc), Constant(_viewResourceDelegates.Length))); for (var i = 0; i < _viewResourceDelegates.Length; i++) { method.Block.AssignArrayElement( "viewResourceDelegates", Constant(i), _viewResourceDelegates[i].ToExpression()); } method.Block.SetProperty(Ref("saiff"), "ViewResourceDelegates", Ref("viewResourceDelegates")); // result set processor method.Block.DeclareVar( _resultSetProcessorProviderClassName, RSPFACTORYPROVIDER, NewInstanceInner(_resultSetProcessorProviderClassName, symbols.GetAddInitSvc(method), Ref(StmtClassForgeableAIFactoryProviderBase.MEMBERNAME_STATEMENT_FIELDS))) .SetProperty(Ref("saiff"), "ResultSetProcessorFactoryProvider", Ref(RSPFACTORYPROVIDER)); // where-clause evaluator if (_whereClauseForge != null) { var whereEval = CodegenEvaluator(_whereClauseForge, method, GetType(), classScope); method.Block.SetProperty(Ref("saiff"), "WhereClauseEvaluator", whereEval); if (classScope.IsInstrumented) { method.Block.SetProperty( Ref("saiff"), "WhereClauseEvaluatorTextForAudit", Constant(ExprNodeUtilityPrint.ToExpressionStringMinPrecedence(_whereClauseForge))); } } // joins if (_joinSetComposerPrototypeForge != null) { method.Block.SetProperty( Ref("saiff"), "JoinSetComposerPrototype", _joinSetComposerPrototypeForge.Make(method, symbols, classScope)); } // output process view method.Block.DeclareVar( _outputProcessViewProviderClassName, OPVFACTORYPROVIDER, NewInstanceInner(_outputProcessViewProviderClassName, symbols.GetAddInitSvc(method), Ref("statementFields"))) .SetProperty(Ref("saiff"), "OutputProcessViewFactoryProvider", Ref(OPVFACTORYPROVIDER)); // subselects if (!_subselects.IsEmpty()) { method.Block.SetProperty( Ref("saiff"), "Subselects", SubSelectFactoryForge.CodegenInitMap(_subselects, GetType(), method, symbols, classScope)); } // table-access if (!_tableAccesses.IsEmpty()) { method.Block.SetProperty( Ref("saiff"), "TableAccesses", ExprTableEvalStrategyUtil.CodegenInitMap(_tableAccesses, GetType(), method, symbols, classScope)); } // order-by with no output-limit method.Block.SetProperty( Ref("saiff"), "OrderByWithoutOutputRateLimit", Constant(_orderByWithoutOutputRateLimit)); // unidirectional join method.Block.SetProperty(Ref("saiff"), "IsUnidirectionalJoin", Constant(_unidirectionalJoin)); method.Block.MethodReturn(Ref("saiff")); return method; }