/// <summary> /// Given a list of view specifications obtained from by parsing this method instantiates a list of view /// factories. The view factories are not yet aware of each other after leaving this method (so not yet /// chained logically). They are simply instantiated and assigned view parameters. /// </summary> /// <param name="streamNum">is the stream number</param> /// <param name="viewSpecList">is the view definition</param> /// <param name="statementContext">is statement service context and statement info</param> /// <returns>list of view factories</returns> /// <throws>ViewProcessingException if the factory cannot be creates such as for invalid view spec</throws> public static IList <ViewFactory> InstantiateFactories(int streamNum, IList <ViewSpec> viewSpecList, StatementContext statementContext) { IList <ViewFactory> factoryChain = new List <ViewFactory>(); int viewNum = 0; foreach (ViewSpec spec in viewSpecList) { // Create the new view factory var viewFactory = statementContext.ViewResolutionService.Create(spec.ObjectNamespace, spec.ObjectName); var audit = AuditEnum.VIEW.GetAudit(statementContext.Annotations); if (audit != null) { viewFactory = (ViewFactory)ViewFactoryProxy.NewInstance(statementContext.EngineURI, statementContext.StatementName, viewFactory, spec.ObjectName); } factoryChain.Add(viewFactory); // Set view factory parameters try { ViewFactoryContext context = new ViewFactoryContext(statementContext, streamNum, viewNum, spec.ObjectNamespace, spec.ObjectName); viewFactory.SetViewParameters(context, spec.ObjectParameters); } catch (ViewParameterException e) { throw new ViewProcessingException(string.Format("Error in view '{0}{1}{2}', {3}", spec.ObjectNamespace, ':', spec.ObjectName, e.Message), e); } viewNum++; } return(factoryChain); }
/// <summary> /// Given a list of view specifications obtained from by parsing this method instantiates a list of view factories. /// The view factories are not yet aware of each other after leaving this method (so not yet chained logically). /// They are simply instantiated and assigned view parameters. /// </summary> /// <param name="streamNum">is the stream number</param> /// <param name="viewSpecList">is the view definition</param> /// <param name="statementContext">is statement service context and statement INFO</param> /// <param name="isSubquery">subquery indicator</param> /// <param name="subqueryNumber">for subqueries</param> /// <exception cref="ViewProcessingException">if the factory cannot be creates such as for invalid view spec</exception> /// <returns>list of view factories</returns> public static IList <ViewFactory> InstantiateFactories( int streamNum, IList <ViewSpec> viewSpecList, StatementContext statementContext, bool isSubquery, int subqueryNumber) { var factoryChain = new List <ViewFactory>(); var grouped = false; foreach (var spec in viewSpecList) { // Create the new view factory var viewFactory = statementContext.ViewResolutionService.Create( statementContext.Container, spec.ObjectNamespace, spec.ObjectName); var audit = AuditEnum.VIEW.GetAudit(statementContext.Annotations); if (audit != null) { viewFactory = ViewFactoryProxy.NewInstance( statementContext.EngineURI, statementContext.StatementName, viewFactory, spec.ObjectName); } factoryChain.Add(viewFactory); // Set view factory parameters try { var context = new ViewFactoryContext( statementContext, streamNum, spec.ObjectNamespace, spec.ObjectName, isSubquery, subqueryNumber, grouped); viewFactory.SetViewParameters(context, spec.ObjectParameters); } catch (ViewParameterException e) { throw new ViewProcessingException( "Error in view '" + spec.ObjectName + "', " + e.Message, e); } if (viewFactory is GroupByViewFactoryMarker) { grouped = true; } if (viewFactory is MergeViewFactoryMarker) { grouped = false; } } return(factoryChain); }