Skip to content

Commit 0c182a0

Browse files
authored
Improve Azure Table search (loic-sharma#372)
1 parent 61d330a commit 0c182a0

File tree

1 file changed

+33
-18
lines changed

1 file changed

+33
-18
lines changed

src/BaGet.Azure/TableSearchService.cs

+33-18
Original file line numberDiff line numberDiff line change
@@ -129,41 +129,46 @@ public Task IndexAsync(Package package, CancellationToken cancellationToken = de
129129
results.Last().Add(result);
130130
}
131131
}
132-
while (token != null && results.Count <= take + skip);
132+
while (token != null && results.Count < take + skip);
133133

134-
return results.Skip(skip).ToList();
134+
return results.Skip(skip).Take(take).ToList();
135135
}
136136

137137
private string GenerateSearchFilter(string searchText, bool includePrerelease, bool includeSemVer2)
138138
{
139-
// Filter to rows where the "searchText" prefix matches on the partition key.
140-
var prefix = searchText?.TrimEnd().Split(separator: null).Last() ?? string.Empty;
139+
var result = "";
141140

142-
var prefixLower = prefix;
143-
var prefixUpper = prefix + "~";
141+
if (!string.IsNullOrWhiteSpace(searchText))
142+
{
143+
// Filter to rows where the "searchText" prefix matches on the partition key.
144+
var prefix = searchText?.TrimEnd().Split(separator: null).Last() ?? string.Empty;
145+
146+
var prefixLower = prefix;
147+
var prefixUpper = prefix + "~";
144148

145-
var partitionLowerFilter = TableQuery.GenerateFilterCondition(
146-
"PartitionKey",
147-
QueryComparisons.GreaterThanOrEqual,
148-
prefixLower);
149+
var partitionLowerFilter = TableQuery.GenerateFilterCondition(
150+
"PartitionKey",
151+
QueryComparisons.GreaterThanOrEqual,
152+
prefixLower);
149153

150-
var partitionUpperFilter = TableQuery.GenerateFilterCondition(
151-
"PartitionKey",
152-
QueryComparisons.LessThanOrEqual,
153-
prefixUpper);
154+
var partitionUpperFilter = TableQuery.GenerateFilterCondition(
155+
"PartitionKey",
156+
QueryComparisons.LessThanOrEqual,
157+
prefixUpper);
154158

155-
var partitionFilter = GenerateAnd(partitionLowerFilter, partitionUpperFilter);
159+
result = GenerateAnd(partitionLowerFilter, partitionUpperFilter);
160+
}
156161

157162
// Filter to rows that are listed.
158-
var result = GenerateAnd(
159-
partitionFilter,
163+
result = GenerateAnd(
164+
result,
160165
GenerateIsTrue(nameof(TablePackageService.PackageEntity.Listed)));
161166

162167
if (!includePrerelease)
163168
{
164169
result = GenerateAnd(
165170
result,
166-
GenerateIsTrue(nameof(TablePackageService.PackageEntity.IsPrerelease)));
171+
GenerateIsFalse(nameof(TablePackageService.PackageEntity.IsPrerelease)));
167172
}
168173

169174
if (!includeSemVer2)
@@ -180,6 +185,8 @@ private string GenerateSearchFilter(string searchText, bool includePrerelease, b
180185

181186
string GenerateAnd(string left, string right)
182187
{
188+
if (string.IsNullOrEmpty(left)) return right;
189+
183190
return TableQuery.CombineFilters(left, TableOperators.And, right);
184191
}
185192

@@ -190,6 +197,14 @@ string GenerateIsTrue(string propertyName)
190197
QueryComparisons.Equal,
191198
givenValue: true);
192199
}
200+
201+
string GenerateIsFalse(string propertyName)
202+
{
203+
return TableQuery.GenerateFilterConditionForBool(
204+
propertyName,
205+
QueryComparisons.Equal,
206+
givenValue: false);
207+
}
193208
}
194209

195210
private string ToAutocompleteResult(IReadOnlyList<TablePackageService.PackageEntity> packages)

0 commit comments

Comments
 (0)