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); }
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)); }
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); }
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); }
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); }