Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/AutoQueryable/Core/Clauses/ClauseValueManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@ public ClauseValueManager(ISelectClauseHandler selectClauseHandler, IOrderByClau
public int? Page { get; set; }
public int? PageSize { get; set; }
public IEnumerable<string> WrapWith { get; set; }
/// <inheritdoc />
/// <summary>
/// Return all values without pagination
/// </summary>
public bool ReturnAllValues { get; set; }

public void SetDefaults(Type type)
{
Expand Down
4 changes: 4 additions & 0 deletions src/AutoQueryable/Core/Clauses/IClauseValueManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ public interface IClauseValueManager
int? Take { get; set; }
int? Top { get; set; }
IEnumerable<string> WrapWith { get; set; }
/// <summary>
/// Return all items without pagination
/// </summary>
bool ReturnAllValues { get; set; }
void SetDefaults(Type type);
}
}
37 changes: 31 additions & 6 deletions src/AutoQueryable/Core/Models/AutoQueryHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -80,20 +80,45 @@ private void _getClauses<T>(IAutoQueryableProfile profile) where T : class
// Set the defaults to start with, then fill/overwrite with the query string values
ClauseValueManager.SetDefaults(typeof(T));

if(ClauseValueManager.Top != null && ClauseValueManager.Top == 0)
{
// Setting ReturnAllValues to true because Top is 0
ClauseValueManager.ReturnAllValues = true;
}
if (ClauseValueManager.PageSize != null)
{
ClauseValueManager.Top = ClauseValueManager.PageSize;
if(ClauseValueManager.PageSize == 0)
{
// Setting ReturnAllValues to true because PageSize is 0
ClauseValueManager.ReturnAllValues = true;
}
else
{
ClauseValueManager.Top = ClauseValueManager.PageSize;
}
}

if (ClauseValueManager.Page != null)
{
//this.Logger.Information("Overwriting 'skip' clause value because 'page' is set");
// Calculate skip from page if page query param was set
ClauseValueManager.Top = ClauseValueManager.Top ?? profile.DefaultToTake;
ClauseValueManager.Skip = (ClauseValueManager.Page - 1) * ClauseValueManager.Top;
if(ClauseValueManager.Page == 0)
{
// Setting ReturnAllValues to true because Page is 0
ClauseValueManager.ReturnAllValues = true;
}
else
{
// Calculate skip from page if page query param was set
ClauseValueManager.Top = ClauseValueManager.Top ?? profile.DefaultToTake;
// Overwriting 'skip' clause value because 'page' is set
ClauseValueManager.Skip = (ClauseValueManager.Page - 1) * ClauseValueManager.Top;
}
}


if(ClauseValueManager.WrapWith.Any() && ClauseValueManager.WrapWith.Contains("none"))
{
// Setting ReturnAllValues to true because WrapWith contains 'none'
ClauseValueManager.ReturnAllValues = true;
}

if (ClauseValueManager.OrderBy == null && profile.DefaultOrderBy != null)
{
Expand Down
2 changes: 1 addition & 1 deletion src/AutoQueryable/Extensions/QueryableExtension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public static dynamic ToAutoQueryListResult<TEntity>(this IQueryable<TEntity> qu
{
TotalCount = context.TotalCountQuery?.Count() ?? result.Count,
RowCount = result.Count,
Result = result
Values = result
};
}
//private static dynamic _getWrappedResult(QueryResult queryResult, IAutoQueryableContext context)
Expand Down
16 changes: 9 additions & 7 deletions src/AutoQueryable/Helpers/QueryBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,17 +68,19 @@ private static IQueryable<T> _handlePaging<T>(IClauseValueManager clauseValueMan
}
query = query.Skip(clauseValueManager.Skip.Value);
}
// Top or DefaultToTake = 0 => return ALL values
// ReturnAllValues or DefaultToTake = 0 => return ALL values
if(clauseValueManager.ReturnAllValues || profile == null || profile.DefaultToTake == 0)
{
return query;
}

if (clauseValueManager.Top.HasValue)
{
if (clauseValueManager.Top != 0 && (profile == null || profile.DefaultToTake != 0))
if (profile?.MaxToTake != null && clauseValueManager.Top > profile.MaxToTake)
{
if (profile?.MaxToTake != null && clauseValueManager.Top > profile.MaxToTake)
{
clauseValueManager.Top = profile.MaxToTake.Value;
}
query = query.Take(clauseValueManager.Top.Value);
clauseValueManager.Top = profile.MaxToTake.Value;
}
query = query.Take(clauseValueManager.Top.Value);
}
else if (profile?.MaxToTake != null)
{
Expand Down
4 changes: 2 additions & 2 deletions src/AutoQueryable/Models/PagedResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ namespace AutoQueryable.Models
{
public class PagedResult<T> : IPagedResult<T>
{
public ICollection<T> Result { get; set; }
public ICollection<T> Values { get; set; }
public string NextLink { get; set; }
public int RowCount { get; set; }
public int TotalCount { get; set; }

}
public interface IPagedResult<T>
{
ICollection<T> Result { get; set; }
ICollection<T> Values { get; set; }
string NextLink { get; set; }
int RowCount { get; set; }
int TotalCount { get; set; }
Expand Down