Esempio n. 1
0
        private static object ExecuteAllDimensions(MethodCallExpression methodExpression, Type returnType, DatastoreService dsService)
        {
            if (methodExpression.Arguments.Count < 1)
            {
                throw new InvalidOperationException("Missing arguments for the AllDimensions expression.");
            }

            // This comes from IDatastoreQueryable<TSourceType, TResultType>
            var sourceType = GetGenericArgument(returnType, 0);

            var parser = new DatastoreExpressionParser();

            parser.Visit(methodExpression.Arguments[0]);

            var dataQuery = BuildDataQueryFromParser(parser);

            dataQuery.IncludeDimensions    = true;
            dataQuery.IncludeAllDimensions = false;
            dataQuery.IncludeRecords       = false;
            dataQuery.ExcludeCount         = true;
            var results = dsService.Query(dataQuery);

            var allDimensions = new List <DimensionItem>();

            foreach (var d in results.DimensionList)
            {
                allDimensions.Add((DimensionItem)((ICloneable)d).Clone());
            }

            var dimensionStore = Activator.CreateInstance(
                typeof(DimensionStore <>).MakeGenericType(sourceType),
                new object[] { allDimensions, results.Query.NonParsedFieldList });

            return(dimensionStore);
        }
Esempio n. 2
0
        private static object ExecuteAggregateSum(MethodCallExpression methodExpression, Type returnType, DatastoreService dsService)
        {
            if (methodExpression.Arguments.Count < 1)
            {
                throw new InvalidOperationException("Missing arguments for the Aggregate expression.");
            }

            var dataQuery = GetAggregateParser(methodExpression);
            var results   = dsService.Query(dataQuery);

            return(BuildItemFromDerivedFields2(results, returnType));
        }
Esempio n. 3
0
        private static object ExecuteCount(MethodCallExpression methodExpression, Type returnType, DatastoreService dsService)
        {
            if (methodExpression.Arguments.Count < 1)
            {
                throw new InvalidOperationException("Missing arguments for the Count expression.");
            }

            var parser = new DatastoreExpressionParser();

            parser.Visit(methodExpression.Arguments[0]);

            var dataQuery = BuildDataQueryFromParser(parser);

            dataQuery.IncludeDimensions    = false;
            dataQuery.IncludeAllDimensions = false;
            dataQuery.IncludeRecords       = false;
            dataQuery.ExcludeCount         = false;

            var result = dsService.Query(dataQuery);

            return(result.TotalRecordCount);
        }
Esempio n. 4
0
        private static object ExecuteItems2(MethodCallExpression methodExpression, Type returnType, DatastoreService dsService)
        {
            if (methodExpression.Arguments.Count < 1)
            {
                throw new InvalidOperationException("Missing arguments for the Items expression.");
            }

            var parser = new DatastoreExpressionParser();

            parser.Visit(methodExpression.Arguments[0]);

            var dataQuery = BuildDataQueryFromParser(parser);

            dataQuery.IncludeDimensions    = false;
            dataQuery.IncludeAllDimensions = false;
            dataQuery.IncludeRecords       = true;

            var itemType = GetGenericArgument(returnType, 0);
            var dsItems  = Activator.CreateInstance(typeof(DatastoreItems <>).MakeGenericType(itemType));
            var results  = dsService.Query(dataQuery);

            SetResultItems(dsItems, itemType, dataQuery, results, parser.SelectExpression);
            return(dsItems);
        }
Esempio n. 5
0
        private static object ExecuteResults(MethodCallExpression methodExpression, Type returnType, DatastoreService dsService)
        {
            if (methodExpression.Arguments.Count < 1)
            {
                throw new InvalidOperationException("Missing arguments for the Results expression.");
            }

            var parser = new DatastoreExpressionParser();

            parser.Visit(methodExpression.Arguments[0]);

            var dataQuery  = BuildDataQueryFromParser(parser);
            var results    = dsService.Query(dataQuery);
            var sourceType = GetGenericArgument(returnType, 0);

            #region Create the dimensions
            var dimensions = new List <DimensionItem>();
            foreach (var d in results.DimensionList)
            {
                dimensions.Add((DimensionItem)((ICloneable)d).Clone());
            }

            var dimensionStore = Activator.CreateInstance(
                typeof(DimensionStore <>).MakeGenericType(sourceType),
                new object[] { dimensions, results.Query.NonParsedFieldList });
            #endregion

            #region Create the ALL dimensions
            var allDimensions = new List <DimensionItem>();
            foreach (var d in results.AllDimensionList)
            {
                allDimensions.Add((DimensionItem)((ICloneable)d).Clone());
            }

            var allDimensionStore = Activator.CreateInstance(
                typeof(DimensionStore <>).MakeGenericType(sourceType),
                new object[] { allDimensions, results.Query.NonParsedFieldList });
            #endregion

            #region Create the APPLIED dimensions
            var appliedDimensions = new List <DimensionItem>();
            foreach (var d in results.AppliedDimensionList)
            {
                appliedDimensions.Add((DimensionItem)((ICloneable)d).Clone());
            }

            var appliedDimensionstore = Activator.CreateInstance(
                typeof(DimensionStore <>).MakeGenericType(sourceType),
                new object[] { appliedDimensions, results.Query.NonParsedFieldList });
            #endregion

            var dsResults = Activator.CreateInstance(typeof(DatastoreResults <>).MakeGenericType(sourceType));
            SetProperty(dsResults, "DimensionStore", dimensionStore);
            SetProperty(dsResults, "AppliedDimensionList", appliedDimensionstore);
            SetProperty(dsResults, "AppliedFieldFilterList", results.Query.FieldFilters ?? new List <IFieldFilter>());
            SetProperty(dsResults, "AllDimensions", allDimensionStore);
            SetProperty(dsResults, "DerivedFieldList", results.DerivedFieldList?.ToList());
            SetResultItems(dsResults, sourceType, dataQuery, results, parser.SelectExpression);

            var diag = new ResultDiagnostics
            {
                CacheHit     = results.CacheHit,
                ComputeTime  = results.ComputeTime,
                LockTime     = results.LockTime,
                DataVersion  = results.DataVersion,
                VersionHash  = results.VersionHash,
                RepositoryId = dsService.RepositoryId,
            };
            SetProperty(dsResults, "Diagnostics", diag);

            SetProperty(dsResults, "Query", ((ICloneable)results.Query).Clone());

            return(dsResults);
        }