Skip to content

Commit

Permalink
(NuGet#9) Optimize queries when using extra options
Browse files Browse the repository at this point in the history
In order to make the most optimal oData queries, we need to ensure that
we are only asking for the information that meets our needs.  For
example, when using the command line options for --by-id-only, or
--by-tag-only, or --id-starts-with, we should add this information into
the oData query that is sent out.

This commit adds this into the queries (it will require an additionl
change into the chocolatey/choco codebase to make use of it), and makes
the resulting queries similar to what is sent out in 1.x of choco.exe.
  • Loading branch information
gep13 committed Mar 15, 2023
1 parent 8eabdbb commit 62126f0
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 14 deletions.
55 changes: 41 additions & 14 deletions src/NuGet.Core/NuGet.Protocol/LegacyFeed/V2FeedQueryBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ public class V2FeedQueryBuilder
private const string SearchEndpointFormat = "/Search(){0}?{1}{2}searchTerm='{3}'&targetFramework='{4}'&includePrerelease={5}&$skip={6}&$top={7}&" + SemVerLevel;
private const string CountQueryString = "/$count";
private const string ExactFilterFormat = "tolower(Id)%20eq%20'{0}'";
private const string ByIdOnlyFormat = "substringof('{0}',tolower(Id))";
private const string ByTagOnlyFormat = "substringof('{0}',Tags)";
private const string IdStartsWithFormat = "startswith(tolower(Id),'chocolatey')";

//////////////////////////////////////////////////////////
// End - Chocolatey Specific Modification
Expand Down Expand Up @@ -119,14 +122,7 @@ public string BuildSearchUri(

var orderBy = BuildOrderBy(filters.OrderBy);

var filter = BuildPropertyFilter(filters.Filter);
if (filter != null)
{
filter = string.Format(
CultureInfo.InvariantCulture,
FilterFormat,
filter);
}
var filter = BuildFilter(searchTerm, filters, includePropertyClauses: false);

var uri = string.Format(
CultureInfo.InvariantCulture,
Expand Down Expand Up @@ -192,7 +188,7 @@ public string BuildGetPackagesUri(
// Start - Chocolatey Specific Modification
//////////////////////////////////////////////////////////

var filterParameter = BuildFilter(searchTerm, filters.Filter, filters.ExactPackageId);
var filterParameter = BuildFilter(searchTerm, filters, includePropertyClauses: true);

string orderByParameter = null;
string skipParameter = null;
Expand Down Expand Up @@ -289,7 +285,7 @@ private string BuildSkip(int? skip)
//////////////////////////////////////////////////////////
// Start - Chocolatey Specific Modification
//////////////////////////////////////////////////////////
private string BuildFilter(string searchTerm, SearchFilterType? searchFilterType, bool isExact)
private string BuildFilter(string searchTerm, SearchFilter searchFilter, bool includePropertyClauses)
//////////////////////////////////////////////////////////
// End - Chocolatey Specific Modification
//////////////////////////////////////////////////////////
Expand All @@ -299,11 +295,11 @@ private string BuildFilter(string searchTerm, SearchFilterType? searchFilterType
//////////////////////////////////////////////////////////
// Start - Chocolatey Specific Modification
//////////////////////////////////////////////////////////
BuildFieldSearchFilter(searchTerm, isExact),
BuildFieldSearchFilter(searchTerm, searchFilter, includePropertyClauses),
//////////////////////////////////////////////////////////
// End - Chocolatey Specific Modification
//////////////////////////////////////////////////////////
BuildPropertyFilter(searchFilterType)
BuildPropertyFilter(searchFilter.Filter)
}.AsEnumerable();

pieces = pieces.Where(p => p != null);
Expand Down Expand Up @@ -391,7 +387,7 @@ private string BuildPropertyFilter(SearchFilterType? searchFilterType)
//////////////////////////////////////////////////////////
// Start - Chocolatey Specific Modification
//////////////////////////////////////////////////////////
private string BuildFieldSearchFilter(string searchTerm, bool isExact)
private string BuildFieldSearchFilter(string searchTerm, SearchFilter searchFilter, bool includePropertyClauses)
//////////////////////////////////////////////////////////
// End - Chocolatey Specific Modification
//////////////////////////////////////////////////////////
Expand All @@ -405,11 +401,42 @@ private string BuildFieldSearchFilter(string searchTerm, bool isExact)
// Start - Chocolatey Specific Modification
//////////////////////////////////////////////////////////

if (isExact)
if (searchFilter.ExactPackageId)
{
return string.Format(CultureInfo.InvariantCulture, ExactFilterFormat, searchTerm);
}

var idSearchFilters = new List<string>();

if (searchFilter.IdStartsWith)
{
idSearchFilters.Add(string.Format(CultureInfo.InvariantCulture, IdStartsWithFormat, searchTerm));
}
else if (searchFilter.ByIdOnly)
{
idSearchFilters.Add(string.Format(CultureInfo.InvariantCulture, ByIdOnlyFormat, searchTerm));
}

if (searchFilter.ByTagOnly)
{
idSearchFilters.Add(string.Format(CultureInfo.InvariantCulture, ByTagOnlyFormat, searchTerm));
}

if (idSearchFilters.Count == 1)
{
return idSearchFilters[0];
}
else if (idSearchFilters.Count > 1)
{
var idFilter = idSearchFilters.Aggregate((a, b) => string.Format(CultureInfo.InvariantCulture, AndFormat, a, b));
return idFilter;
}

if (!includePropertyClauses)
{
return string.Empty;
}

//////////////////////////////////////////////////////////
// End - Chocolatey Specific Modification
//////////////////////////////////////////////////////////
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,14 @@ NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetada
NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetadata.ReleaseNotes.set -> void
NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetadata.VersionDownloadCount.get -> int?
NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetadata.VersionDownloadCount.set -> void
NuGet.Protocol.Core.Types.SearchFilter.ByIdOnly.get -> bool
NuGet.Protocol.Core.Types.SearchFilter.ByIdOnly.set -> void
NuGet.Protocol.Core.Types.SearchFilter.ByTagOnly.get -> bool
NuGet.Protocol.Core.Types.SearchFilter.ByTagOnly.set -> void
NuGet.Protocol.Core.Types.SearchFilter.ExactPackageId.get -> bool
NuGet.Protocol.Core.Types.SearchFilter.ExactPackageId.set -> void
NuGet.Protocol.Core.Types.SearchFilter.IdStartsWith.get -> bool
NuGet.Protocol.Core.Types.SearchFilter.IdStartsWith.set -> void
NuGet.Protocol.Core.Types.SearchOrderBy.DownloadCount = 1 -> NuGet.Protocol.Core.Types.SearchOrderBy
NuGet.Protocol.Core.Types.SearchOrderBy.DownloadCountAndVersion = 3 -> NuGet.Protocol.Core.Types.SearchOrderBy
NuGet.Protocol.Core.Types.SearchOrderBy.Version = 2 -> NuGet.Protocol.Core.Types.SearchOrderBy
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,14 @@ NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetada
NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetadata.ReleaseNotes.set -> void
NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetadata.VersionDownloadCount.get -> int?
NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetadata.VersionDownloadCount.set -> void
NuGet.Protocol.Core.Types.SearchFilter.ByIdOnly.get -> bool
NuGet.Protocol.Core.Types.SearchFilter.ByIdOnly.set -> void
NuGet.Protocol.Core.Types.SearchFilter.ByTagOnly.get -> bool
NuGet.Protocol.Core.Types.SearchFilter.ByTagOnly.set -> void
NuGet.Protocol.Core.Types.SearchFilter.ExactPackageId.get -> bool
NuGet.Protocol.Core.Types.SearchFilter.ExactPackageId.set -> void
NuGet.Protocol.Core.Types.SearchFilter.IdStartsWith.get -> bool
NuGet.Protocol.Core.Types.SearchFilter.IdStartsWith.set -> void
NuGet.Protocol.Core.Types.SearchOrderBy.DownloadCount = 1 -> NuGet.Protocol.Core.Types.SearchOrderBy
NuGet.Protocol.Core.Types.SearchOrderBy.DownloadCountAndVersion = 3 -> NuGet.Protocol.Core.Types.SearchOrderBy
NuGet.Protocol.Core.Types.SearchOrderBy.Version = 2 -> NuGet.Protocol.Core.Types.SearchOrderBy
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,14 @@ NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetada
NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetadata.ReleaseNotes.set -> void
NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetadata.VersionDownloadCount.get -> int?
NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetadata.VersionDownloadCount.set -> void
NuGet.Protocol.Core.Types.SearchFilter.ByIdOnly.get -> bool
NuGet.Protocol.Core.Types.SearchFilter.ByIdOnly.set -> void
NuGet.Protocol.Core.Types.SearchFilter.ByTagOnly.get -> bool
NuGet.Protocol.Core.Types.SearchFilter.ByTagOnly.set -> void
NuGet.Protocol.Core.Types.SearchFilter.ExactPackageId.get -> bool
NuGet.Protocol.Core.Types.SearchFilter.ExactPackageId.set -> void
NuGet.Protocol.Core.Types.SearchFilter.IdStartsWith.get -> bool
NuGet.Protocol.Core.Types.SearchFilter.IdStartsWith.set -> void
NuGet.Protocol.Core.Types.SearchOrderBy.DownloadCount = 1 -> NuGet.Protocol.Core.Types.SearchOrderBy
NuGet.Protocol.Core.Types.SearchOrderBy.DownloadCountAndVersion = 3 -> NuGet.Protocol.Core.Types.SearchOrderBy
NuGet.Protocol.Core.Types.SearchOrderBy.Version = 2 -> NuGet.Protocol.Core.Types.SearchOrderBy
Expand Down
6 changes: 6 additions & 0 deletions src/NuGet.Core/NuGet.Protocol/SearchFilter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,12 @@ public SearchFilter(bool includePrerelease, SearchFilterType? filter)
/// </summary>
public bool ExactPackageId { get; set; } = false;

public bool ByIdOnly { get; set; } = false;

public bool ByTagOnly { get; set; } = false;

public bool IdStartsWith { get; set; } = false;

//////////////////////////////////////////////////////////
// End - Chocolatey Specific Modification
//////////////////////////////////////////////////////////
Expand Down

0 comments on commit 62126f0

Please sign in to comment.