public static async Task <List <Lite <T> > > AutocompleteAsync <T>(this IQueryable <Lite <T> > query, string subString, int count, CancellationToken token)
            where T : Entity
        {
            using (ExecutionMode.UserInterface())
            {
                List <Lite <T> > results = new List <Lite <T> >();

                if (PrimaryKey.TryParse(subString, typeof(T), out PrimaryKey id))
                {
                    Lite <T> entity = await query.SingleOrDefaultAsync(e => e.Id == id, token);

                    if (entity != null)
                    {
                        results.Add(entity);
                    }

                    if (results.Count >= count)
                    {
                        return(results);
                    }
                }

                var parts = subString.Trim('\'', '"').SplitNoEmpty(' ');

                var list = await query.Where(a => a.ToString().ContainsAll(parts))
                           .OrderBy(a => a.ToString().Length)
                           .Take(count - results.Count)
                           .ToListAsync(token);

                results.AddRange(list);

                return(results);
            }
        }
Example #2
0
        public Func <T, bool> GetInMemoryFilter <T>(bool userInterface)
            where T : Entity
        {
            using (userInterface ? ExecutionMode.UserInterface() : null)
            {
                EntityEvents <T> ee = (EntityEvents <T>)entityEvents.TryGetC(typeof(T));
                if (ee == null)
                {
                    return(a => true);
                }

                Func <T, bool> result = null;
                foreach (var item in ee.OnFilterQuery().NotNull())
                {
                    if (item.InMemoryFunction == null)
                    {
                        throw new InvalidOperationException("FilterQueryResult with InDatabaseExpresson '{0}' has no equivalent InMemoryFunction"
                                                            .FormatWith(item.InDatabaseExpresson.ToString()));
                    }

                    result = CombineFunc(result, item.InMemoryFunction);
                }

                if (result == null)
                {
                    return(a => true);
                }

                return(result);
            }
        }
        public static List <Lite <T> > Autocomplete <T>(this IEnumerable <Lite <T> > collection, string subString, int count)
            where T : Entity
        {
            using (ExecutionMode.UserInterface())
            {
                List <Lite <T> > results = new List <Lite <T> >();

                if (PrimaryKey.TryParse(subString, typeof(T), out PrimaryKey id))
                {
                    Lite <T> entity = collection.SingleOrDefaultEx(e => e.Id == id);

                    if (entity != null)
                    {
                        results.Add(entity);
                    }

                    if (results.Count >= count)
                    {
                        return(results);
                    }
                }

                var parts = subString.Trim('\'', '"').SplitNoEmpty(' ');

                var list = collection.Where(a => a.ToString().ContainsAll(parts))
                           .OrderBy(a => a.ToString().Length)
                           .Take(count - results.Count);

                results.AddRange(list);

                return(results);
            }
        }
Example #4
0
        public static async Task <List <T> > AutocompleteUntypedAsync <T>(this IQueryable <T> query, Expression <Func <T, Lite <Entity> > > entitySelector, string subString, int count, Type type, CancellationToken token)
        {
            using (ExecutionMode.UserInterface())
            {
                List <T> results = new List <T>();

                if (TryParsePrimaryKey(subString, type, out PrimaryKey id))
                {
                    T entity = await query.SingleOrDefaultAsync(r => entitySelector.Evaluate(r).Id == id);

                    if (entity != null)
                    {
                        results.Add(entity);
                    }

                    if (results.Count >= count)
                    {
                        return(results);
                    }
                }

                var parts = subString.Trim().SplitNoEmpty(' ');

                var list = await query.Where(r => entitySelector.Evaluate(r).ToString() !.ContainsAll(parts))
                           .OrderBy(r => entitySelector.Evaluate(r).ToString() !.Length)
                           .Take(count - results.Count)
                           .ToListAsync();

                results.AddRange(list);

                return(results);
            }
        }
        public static List <Lite <Entity> > AutocompleteUntyped(this IQueryable <Lite <Entity> > query, string subString, int count, Type type)
        {
            using (ExecutionMode.UserInterface())
            {
                List <Lite <Entity> > results = new List <Lite <Entity> >();

                if (PrimaryKey.TryParse(subString, type, out PrimaryKey id))
                {
                    Lite <Entity> entity = query.SingleOrDefaultEx(e => e.Id == id);

                    if (entity != null)
                    {
                        results.Add(entity);
                    }

                    if (results.Count >= count)
                    {
                        return(results);
                    }
                }

                var parts = subString.Trim('\'', '"').SplitNoEmpty(' ');

                results.AddRange(query.Where(a => a.ToString().ContainsAll(parts))
                                 .OrderBy(a => a.ToString().Length)
                                 .Take(count - results.Count));

                return(results);
            }
        }
Example #6
0
        public static List <Lite <T> > Autocomplete <T>(this IQueryable <Lite <T> > query, string subString, int count)
            where T : Entity
        {
            using (ExecutionMode.UserInterface())
            {
                List <Lite <T> > results = new List <Lite <T> >();

                if (TryParsePrimaryKey(subString, typeof(T), out PrimaryKey id))
                {
                    Lite <T>?entity = query.SingleOrDefaultEx(e => e.Id == id);

                    if (entity != null)
                    {
                        results.Add(entity);
                    }

                    if (results.Count >= count)
                    {
                        return(results);
                    }
                }

                var parts = subString.SplitParts();

                results.AddRange(query.Where(a => a.ToString() !.ContainsAllParts(parts))
                                 .OrderBy(a => a.ToString() !.Length)
                                 .Take(count - results.Count));

                return(results);
            }
        }
Example #7
0
        static ResultTable ExecuteChart <T>(ChartRequest request, DynamicQueryCore <T> dq)
        {
            List <Column> columns = request.Columns.Where(c => c.Token != null).Select(t => t.CreateColumn()).ToList();

            var multiplications = request.Multiplications;;

            using (ExecutionMode.UserInterface())
            {
                if (!request.GroupResults)
                {
                    return(dq.ExecuteQuery(new QueryRequest
                    {
                        QueryName = request.QueryName,
                        Columns = columns,
                        Filters = request.Filters,
                        Orders = request.Orders,
                        Pagination = new Pagination.All(),
                    }));
                }
                else
                {
                    return(dq.ExecuteQueryGroup(new QueryGroupRequest
                    {
                        QueryName = request.QueryName,
                        Columns = columns,
                        Filters = request.Filters,
                        Orders = request.Orders
                    }));
                }
            }
        }
Example #8
0
 static ResultTable ExecuteChart <T>(ChartRequestModel request, DynamicQueryCore <T> dq)
 {
     using (ExecutionMode.UserInterface())
     {
         return(dq.ExecuteQuery(new QueryRequest
         {
             GroupResults = request.HasAggregates(),
             QueryName = request.QueryName,
             Columns = request.GetQueryColumns(),
             Filters = request.Filters,
             Orders = request.GetQueryOrders(),
             Pagination = new Pagination.All(),
         }));
     }
 }
Example #9
0
 static async Task <ResultTable> ExecuteChartAsync <T>(ChartRequestModel request, DynamicQueryCore <T> dq, CancellationToken token)
 {
     using (ExecutionMode.UserInterface())
     {
         return(await dq.ExecuteQueryAsync(new QueryRequest
         {
             GroupResults = request.HasAggregates(),
             QueryName = request.QueryName,
             Columns = request.GetQueryColumns(),
             Filters = request.Filters,
             Orders = request.GetQueryOrders(),
             Pagination = new Pagination.All(),
         }, token));
     }
 }
        public static async Task <List <Lite <Entity> > > FindLiteLikeAsync(Implementations implementations, string subString, int count, CancellationToken cancellationToken)
        {
            if (implementations.IsByAll)
            {
                throw new InvalidOperationException("ImplementedByAll not supported for FindLiteLike");
            }

            try
            {
                using (ExecutionMode.UserInterface())
                    return(await FindLiteLikeAsync(implementations.Types, subString, count, cancellationToken));
            }
            catch (Exception e)
            {
                e.Data["implementations"] = implementations.ToString();
                throw;
            }
        }
        public static List <Lite <Entity> > FindAllLite(Implementations implementations)
        {
            if (implementations.IsByAll)
            {
                throw new InvalidOperationException("ImplementedByAll is not supported for RetrieveAllLite");
            }

            try
            {
                using (ExecutionMode.UserInterface())
                    return(implementations.Types.SelectMany(type => Database.RetrieveAllLite(type)).ToList());
            }
            catch (Exception e)
            {
                e.Data["implementations"] = implementations.ToString();
                throw;
            }
        }
Example #12
0
        async Task <T> ExecuteAsync <T>(ExecuteType executeType, object queryName, BaseQueryRequest request, Func <DynamicQueryBucket, Task <T> > executor)
        {
            using (ExecutionMode.UserInterface())
                using (HeavyProfiler.Log(executeType.ToString(), () => QueryUtils.GetKey(queryName)))
                {
                    try
                    {
                        var qb = GetQuery(queryName);

                        using (Disposable.Combine(QueryExecuted, f => f(executeType, queryName, request)))
                        {
                            return(await executor(qb));
                        }
                    }
                    catch (Exception e)
                    {
                        e.Data["QueryName"] = queryName;
                        throw;
                    }
                }
        }
Example #13
0
        static async Task <ResultTable> ExecuteChartAsync <T>(ChartRequestModel request, DynamicQueryCore <T> dq, CancellationToken token)
        {
            using (ExecutionMode.UserInterface())
            {
                var result = await dq.ExecuteQueryAsync(new QueryRequest
                {
                    GroupResults = request.HasAggregates(),
                    QueryName    = request.QueryName,
                    Columns      = request.GetQueryColumns(),
                    Filters      = request.Filters,
                    Orders       = request.GetQueryOrders(),
                    Pagination   = request.MaxRows.HasValue ? new Pagination.Firsts(request.MaxRows.Value + 1) : new Pagination.All(),
                }, token);


                if (request.MaxRows.HasValue && result.Rows.Length == request.MaxRows.Value)
                {
                    throw new InvalidOperationException($"The chart request for ${request.QueryName} exceeded the max rows ({request.MaxRows})");
                }

                return(result);
            }
        }
        public static async Task <List <Lite <Entity> > > FindAllLiteAsync(Implementations implementations, CancellationToken token)
        {
            if (implementations.IsByAll)
            {
                throw new InvalidOperationException("ImplementedByAll is not supported for RetrieveAllLite");
            }

            try
            {
                using (ExecutionMode.UserInterface())
                {
                    var tasks = implementations.Types.Select(type => Database.RetrieveAllLiteAsync(type, token)).ToList();

                    var list = await Task.WhenAll(tasks);

                    return(list.SelectMany(li => li).ToList());
                }
            }
            catch (Exception e)
            {
                e.Data["implementations"] = implementations.ToString();
                throw;
            }
        }