public IFromTableExecutor GetFromTableExecutor(ExecuteFromTableStage executeFromTableStage)
 {
     if (!executors.TryGetValue(executeFromTableStage.EntityType, out var executor))
     {
         var t = typeof(DefaultFromTableExecutor <>).MakeGenericType(executeFromTableStage.EntityType);
         executor = (IFromTableExecutor)Activator.CreateInstance(t);
         executors.TryAdd(executeFromTableStage.EntityType, executor);
     }
     return(executor);
 }
 protected Expression <Func <Entity, bool> > GetWhereLambda(ExecuteFromTableStage stage)
 {
     return(Expression.Lambda <Func <Entity, bool> >(stage.WhereExpression, stage.ParameterExpression));
 }
        protected Expression <Func <Entity, Entity> > GetSelectLambda(ExecuteFromTableStage stage)
        {
            var lambda = Expression.Lambda <Func <Entity, Entity> >(stage.SelectExpression, stage.ParameterExpression);

            return(lambda);
        }
 public abstract ValueTask <IQueryable <Entity> > GetTable(ISqlTableResolver tableResolver, ExecuteFromTableStage executeFromTableStage, object additionalData);
 public async ValueTask <IQueryable> Execute(ISqlTableResolver tableResolver, ExecuteFromTableStage executeFromTableStage, object additionalData)
 {
     return(await GetTable(tableResolver, executeFromTableStage, additionalData));
 }
Exemple #6
0
        public ValueTask <IQueryable> Visit(ExecuteFromTableStage executeFromTableStage)
        {
            var fromTableExecutor = _fromTableExecutorFactory.GetFromTableExecutor(executeFromTableStage);

            return(fromTableExecutor.Execute(_tableResolver, executeFromTableStage, data));
        }
Exemple #7
0
        public override async ValueTask <IQueryable <Entity> > GetTable(ISqlTableResolver tableResolver, ExecuteFromTableStage executeFromTableStage, object additionalData)
        {
            QueryOptions queryOptions = new QueryOptions(
                executeFromTableStage.ParameterExpression,
                executeFromTableStage.SelectExpression,
                executeFromTableStage.WhereExpression,
                executeFromTableStage.Limit,
                executeFromTableStage.Offset,
                executeFromTableStage.ContainsFullTextSearch,
                executeFromTableStage.Parameters);

            var queryable = (IQueryable <Entity>) await tableResolver.ResolveTableName(executeFromTableStage.TableName, additionalData, queryOptions);

            //Check that we are not using any in memory queryable, since this select will only cost extra operations
            //without any gain
            if (!((queryable is EnumerableQuery) || (queryable is Array)) && queryOptions.TryGetSelectExpression <Entity>(out var select))
            {
                queryable = queryable.Select(select);
            }

            if (queryOptions.TryGetWhereExpression <Entity>(out var where))
            {
                queryable = queryable.Where(where);
            }

            if (queryOptions.TryGetOffset(out var offset))
            {
                queryable = queryable.Skip(offset);
            }

            if (queryOptions.TryGetLimit(out var limit))
            {
                queryable = queryable.Take(limit);
            }

            return(queryable);
        }