private StatisticsRepositoryFactory GetFactory( Requests.StatisticsRequest request) { var factory = new StatisticsRepositoryFactory( this.db, request, this.Tracer); return(factory); }
/* be prepared to return either a debug tracer, or the actual * results */ private StatisticsResultContainer GetStatisticsResultContainer( int[] years, int statisticsId, string group = null, string filter = null, int?areaYear = null, string debug = null) { using (DbConnection db = this.GetDbConnection()) { var request = new Requests.StatisticsRequest() { StatisticsId = statisticsId, Years = years, Group = group, Filter = filter, AreaYear = areaYear, }; var repofactory = new Factories.StatisticsRepositoryFactory( db, request); var repository = repofactory.GetRepository(); var tracer = repofactory.Tracer; // "true" is for backwards compatibility if (debug != null && debug == "noexec" || debug == "true") { return(new StatisticsResultContainer() { Tracer = tracer, Results = null }); } IEnumerable <Models.StatisticsResult> results; results = repository.FindAll(); /* Note: we are iterating the generator here, could be * memory-inefficient */ return(new StatisticsResultContainer() { Tracer = tracer, Results = results.ToList() }); } }
private StatisticsRepositoryFactory( DbConnection dbConnection, Requests.StatisticsRequest request, StatisticsRepositoryTracer tracer) { this.db = dbConnection; this.Request = request; this.Tracer = tracer.CreateChild(); this.Tracer.Request = this.Request; if (++this.Request.RecursionDepth > 15) { throw new Exception( "Chained repositories reached recursion limit"); } // a foolproof way of making sure we will only do this once this.SkipPrivacyLimits = request.SkipPrivacyLimits; this.Request.SkipPrivacyLimits = true; }
public StatisticsRepositoryFactory( DbConnection dbConnection, Requests.StatisticsRequest request) : this(dbConnection, request, new StatisticsRepositoryTracer()) { }