@@ -24,6 +24,7 @@ namespace Microsoft.Azure.Cosmos.Routing
2424
2525 internal class PartitionRoutingHelper
2626 {
27+ private static readonly bool IsLengthAwareComparisonEnabled = ConfigurationManager . IsLengthAwareRangeComparatorEnabled ( ) ;
2728 public static IReadOnlyList < Range < string > > GetProvidedPartitionKeyRanges (
2829 string querySpecJsonString ,
2930 bool enableCrossPartitionQuery ,
@@ -233,15 +234,14 @@ await routingMapProvider.TryGetRangeByEffectivePartitionKeyAsync(
233234 return new ResolvedRangeInfo ( lastPartitionKeyRange , suppliedTokens ) ;
234235 }
235236
236- bool isLengthAwareComparisonEnabled = ConfigurationManager . IsLengthAwareRangeComparatorEnabled ( ) ;
237237 bool useLengthAwareComparison = false ;
238238 // Enable length-aware comparison for provided partition EPK ranges only when the container uses a hierarchical partition key (MultiHash).
239- if ( isLengthAwareComparisonEnabled && partitionKeyDefinition != null && partitionKeyDefinition . Kind == PartitionKind . MultiHash && partitionKeyDefinition . Paths . Count > 1 )
239+ if ( IsLengthAwareComparisonEnabled && partitionKeyDefinition != null && partitionKeyDefinition . Kind == PartitionKind . MultiHash && partitionKeyDefinition . Paths . Count > 1 )
240240 {
241241 useLengthAwareComparison = true ;
242242 }
243243
244- IComparer < Range < string > > minComparer = this . GetComparer ( isMinComparer : true , useLengthAwareComparison ) ;
244+ ( IComparer < Range < string > > minComparer , _ ) = this . GetComparers ( useLengthAwareComparison ) ;
245245
246246 Range < string > minimumRange = PartitionRoutingHelper . Min (
247247 providedPartitionKeyRanges ,
@@ -362,13 +362,13 @@ public virtual async Task<bool> TryAddPartitionKeyRangeToContinuationTokenAsync(
362362 // We only need to get the next range if we have to
363363 if ( string . IsNullOrEmpty ( backendResponseHeaders [ HttpConstants . HttpHeaders . Continuation ] ) )
364364 {
365- bool isLengthAwareComparisonEnabled = ConfigurationManager . IsLengthAwareRangeComparatorEnabled ( ) ;
366365 bool useLengthAwareComparison = false ;
367366 // Enable length-aware comparison for provided partition EPK ranges only when the container uses a hierarchical partition key (MultiHash).
368- if ( isLengthAwareComparisonEnabled && partitionKeyDefinition != null && partitionKeyDefinition . Kind == PartitionKind . MultiHash && partitionKeyDefinition . Paths . Count > 1 )
367+ if ( IsLengthAwareComparisonEnabled && partitionKeyDefinition != null && partitionKeyDefinition . Kind == PartitionKind . MultiHash && partitionKeyDefinition . Paths . Count > 1 )
369368 {
370369 useLengthAwareComparison = true ;
371370 }
371+ ( IComparer < Range < string > > minComparer , IComparer < Range < string > > maxComparer ) = this . GetComparers ( useLengthAwareComparison ) ;
372372
373373 if ( direction == RntdbEnumerationDirection . Reverse )
374374 {
@@ -379,14 +379,14 @@ public virtual async Task<bool> TryAddPartitionKeyRangeToContinuationTokenAsync(
379379 trace , partitionKeyDefinition ,
380380 false ) ) . ToList ( ) ,
381381 currentRange ,
382- this . GetComparer ( isMinComparer : true , useLengthAwareComparison : useLengthAwareComparison ) ) ;
382+ minComparer ) ;
383383 }
384384 else
385385 {
386386 Range < string > nextProvidedRange = PartitionRoutingHelper . MinAfter (
387387 providedPartitionKeyRanges ,
388388 currentRange . ToRange ( ) ,
389- this . GetComparer ( isMinComparer : false , useLengthAwareComparison : useLengthAwareComparison ) ) ;
389+ maxComparer ) ;
390390
391391 if ( nextProvidedRange == null )
392392 {
@@ -592,11 +592,12 @@ private static PartitionKeyRange MinBefore(IReadOnlyList<PartitionKeyRange> valu
592592 return min ;
593593 }
594594
595- private IComparer < Range < string > > GetComparer ( bool isMinComparer , bool useLengthAwareComparison )
595+ private ( IComparer < Range < string > > minComparer , IComparer < Range < string > > maxComparer ) GetComparers ( bool useLengthAwareComparison )
596596 {
597- return isMinComparer
598- ? ( useLengthAwareComparison ? Range < string > . LengthAwareMinComparer . Instance : Range < string > . MinComparer . Instance )
599- : ( useLengthAwareComparison ? Range < string > . LengthAwareMaxComparer . Instance : Range < string > . MaxComparer . Instance ) ;
597+ return (
598+ useLengthAwareComparison ? Range < string > . LengthAwareMinComparer . Instance : Range < string > . MinComparer . Instance ,
599+ useLengthAwareComparison ? Range < string > . LengthAwareMaxComparer . Instance : Range < string > . MaxComparer . Instance
600+ ) ;
600601 }
601602
602603 public readonly struct ResolvedRangeInfo
0 commit comments