@@ -22,8 +22,6 @@ namespace Xtensive.Orm.Providers
2222 /// </summary>
2323 public abstract class DomainHandler : DomainBoundHandler
2424 {
25- private static readonly OrderingCorrector OrderingCorrector = new OrderingCorrector ( ResolveOrderingDescriptor ) ;
26-
2725 private Dictionary < Type , IMemberCompilerProvider > memberCompilerProviders ;
2826
2927 /// <summary>
@@ -93,16 +91,20 @@ protected virtual IPreCompiler CreatePreCompiler(CompilerConfiguration configura
9391 {
9492 var providerInfo = Handlers . ProviderInfo ;
9593
96- var applyCorrector = new ApplyProviderCorrector (
97- ! providerInfo . Supports ( ProviderFeatures . Apply ) ) ;
98- var skipTakeCorrector = new SkipTakeCorrector (
99- providerInfo . Supports ( ProviderFeatures . NativeTake ) ,
100- providerInfo . Supports ( ProviderFeatures . NativeSkip ) ) ;
94+ var applyCorrector = providerInfo . Supports ( ProviderFeatures . Apply )
95+ ? ApplyProviderCorrector . SilentCorrector
96+ : ApplyProviderCorrector . ExceptionThrowingCorrector ;
97+
98+ var skipTakeCorrector = ( providerInfo . Supports ( ProviderFeatures . NativeTake | ProviderFeatures . NativeSkip ) )
99+ ? SkipTakeCorrector . FullPaginationSupportCorrector
100+ : new SkipTakeCorrector ( providerInfo . Supports ( ProviderFeatures . NativeTake ) ,
101+ providerInfo . Supports ( ProviderFeatures . NativeSkip ) ) ;
102+
101103 return new CompositePreCompiler (
102104 applyCorrector ,
103105 skipTakeCorrector ,
104106 RedundantColumnOptimizer . Instance ,
105- OrderingCorrector ) ;
107+ OrderingCorrector . DefaultInstance ) ;
106108 }
107109
108110 /// <summary>
@@ -194,29 +196,6 @@ private void BuildQueryPreprocessors()
194196 QueryPreprocessors = ordered ?? throw new InvalidOperationException ( Strings . ExCyclicDependencyInQueryPreprocessorGraphIsDetected ) ;
195197 }
196198
197- private static ProviderOrderingDescriptor ResolveOrderingDescriptor ( CompilableProvider provider )
198- {
199- var isOrderSensitive = provider . Type is ProviderType . Skip
200- or ProviderType . Take
201- or ProviderType . Seek
202- or ProviderType . Paging
203- or ProviderType . RowNumber ;
204- var preservesOrder = provider . Type is ProviderType . Skip
205- or ProviderType . Take
206- or ProviderType . Seek
207- or ProviderType . Paging
208- or ProviderType . RowNumber
209- or ProviderType . Distinct
210- or ProviderType . Alias ;
211- var isOrderBreaker = provider . Type is ProviderType . Except
212- or ProviderType . Intersect
213- or ProviderType . Union
214- or ProviderType . Concat
215- or ProviderType . Existence ;
216- var isSorter = provider . Type is ProviderType . Sort or ProviderType . Index ;
217- return new ProviderOrderingDescriptor ( isOrderSensitive , preservesOrder , isOrderBreaker , isSorter ) ;
218- }
219-
220199 #endregion
221200
222201
0 commit comments