public QueryExecutor( ISqlTableResolver tableResolver, IFromTableExecutorFactory fromTableExecutorFactory, IWhereExecutorFactory whereExecutorFactory, IGroupByExecutorFactory groupByExecutorFactory, ISelectExecutorFactory selectExecutorFactory, IOrderByExecutorFactory orderByExecutorFactory, IOffsetExecutorFactory offsetExecutorFactory, IDistinctExecutorFactory distinctExecutorFactory, IAggregateFunctionExecutorFactory aggregateFunctionExecutorFactory ) { Debug.Assert(tableResolver != null); Debug.Assert(fromTableExecutorFactory != null); Debug.Assert(whereExecutorFactory != null); Debug.Assert(groupByExecutorFactory != null); Debug.Assert(selectExecutorFactory != null); Debug.Assert(orderByExecutorFactory != null); Debug.Assert(offsetExecutorFactory != null); Debug.Assert(distinctExecutorFactory != null); Debug.Assert(aggregateFunctionExecutorFactory != null); _tableResolver = tableResolver; _fromTableExecutorFactory = fromTableExecutorFactory; _whereExecutorFactory = whereExecutorFactory; _groupByExecutorFactory = groupByExecutorFactory; _selectExecutorFactory = selectExecutorFactory; _orderByExecutorFactory = orderByExecutorFactory; _offsetExecutorFactory = offsetExecutorFactory; _distinctExecutorFactory = distinctExecutorFactory; _aggregateFunctionExecutorFactory = aggregateFunctionExecutorFactory; }
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); }
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)); }