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())
 {
 }