@@ -20,7 +20,7 @@ namespace Xtensive.Orm.Rse.Providers
2020 [ Serializable ]
2121 public class CompilableProviderVisitor : ProviderVisitor
2222 {
23- protected Func < Provider , Expression , Expression > translate ;
23+ protected Func < CompilableProvider , Expression , Expression > translate ;
2424
2525 /// <summary>
2626 /// Visits the compilable provider.
@@ -33,32 +33,26 @@ protected override CompilableProvider VisitTake(TakeProvider provider)
3333 {
3434 OnRecursionEntrance ( provider ) ;
3535 var source = VisitCompilable ( provider . Source ) ;
36- OnRecursionExit ( provider ) ;
37- if ( source == provider . Source )
38- return provider ;
39- return new TakeProvider ( source , provider . Count ) ;
36+ _ = OnRecursionExit ( provider ) ;
37+ return source == provider . Source ? provider : new TakeProvider ( source , provider . Count ) ;
4038 }
4139
4240 /// <inheritdoc/>
4341 protected override CompilableProvider VisitSkip ( SkipProvider provider )
4442 {
4543 OnRecursionEntrance ( provider ) ;
4644 var source = VisitCompilable ( provider . Source ) ;
47- OnRecursionExit ( provider ) ;
48- if ( source == provider . Source )
49- return provider ;
50- return new SkipProvider ( source , provider . Count ) ;
45+ _ = OnRecursionExit ( provider ) ;
46+ return source == provider . Source ? provider : new SkipProvider ( source , provider . Count ) ;
5147 }
5248
5349 /// <inheritdoc/>
5450 protected override CompilableProvider VisitPaging ( PagingProvider provider )
5551 {
5652 OnRecursionEntrance ( provider ) ;
5753 var source = VisitCompilable ( provider . Source ) ;
58- OnRecursionExit ( provider ) ;
59- if ( source == provider . Source )
60- return provider ;
61- return new PagingProvider ( source , provider ) ;
54+ _ = OnRecursionExit ( provider ) ;
55+ return source == provider . Source ? provider : new PagingProvider ( source , provider ) ;
6256 }
6357
6458 /// <inheritdoc/>
@@ -67,17 +61,17 @@ protected override CompilableProvider VisitSelect(SelectProvider provider)
6761 OnRecursionEntrance ( provider ) ;
6862 var source = VisitCompilable ( provider . Source ) ;
6963 var columnIndexes = ( int [ ] ) OnRecursionExit ( provider ) ;
70- if ( source == provider . Source )
71- return provider ;
72- return new SelectProvider ( source , columnIndexes ?? provider . ColumnIndexes ) ;
64+ return source == provider . Source
65+ ? provider
66+ : new SelectProvider ( source , columnIndexes ?? provider . ColumnIndexes ) ;
7367 }
7468
7569 /// <inheritdoc/>
7670 protected override CompilableProvider VisitTag ( TagProvider provider )
7771 {
7872 OnRecursionEntrance ( provider ) ;
7973 var source = VisitCompilable ( provider . Source ) ;
80- OnRecursionExit ( provider ) ;
74+ _ = OnRecursionExit ( provider ) ;
8175 return source == provider . Source ? provider : new TagProvider ( source , provider . Tag ) ;
8276 }
8377
@@ -86,10 +80,8 @@ protected override CompilableProvider VisitSeek(SeekProvider provider)
8680 {
8781 OnRecursionEntrance ( provider ) ;
8882 var source = VisitCompilable ( provider . Source ) ;
89- OnRecursionExit ( provider ) ;
90- if ( source == provider . Source )
91- return provider ;
92- return new SeekProvider ( source , provider . Key ) ;
83+ _ = OnRecursionExit ( provider ) ;
84+ return source == provider . Source ? provider : new SeekProvider ( source , provider . Key ) ;
9385 }
9486
9587 /// <inheritdoc/>
@@ -104,9 +96,9 @@ protected override CompilableProvider VisitSort(SortProvider provider)
10496 OnRecursionEntrance ( provider ) ;
10597 var source = VisitCompilable ( provider . Source ) ;
10698 var order = OnRecursionExit ( provider ) ;
107- if ( source == provider . Source )
108- return provider ;
109- return new SortProvider ( source , ( order == null ) ? provider . Order : ( DirectionCollection < int > ) order ) ;
99+ return source == provider . Source
100+ ? provider
101+ : new SortProvider ( source , ( order == null ) ? provider . Order : ( DirectionCollection < int > ) order ) ;
110102 }
111103
112104 /// <inheritdoc/>
@@ -116,30 +108,30 @@ protected override CompilableProvider VisitJoin(JoinProvider provider)
116108 var left = VisitCompilable ( provider . Left ) ;
117109 var right = VisitCompilable ( provider . Right ) ;
118110 var equalIndexes = OnRecursionExit ( provider ) ;
119- if ( left == provider . Left && right == provider . Right )
120- return provider ;
121- return new JoinProvider ( left , right , provider . JoinType ,
122- equalIndexes != null ? ( Pair < int > [ ] ) equalIndexes : provider . EqualIndexes ) ;
111+ return left == provider . Left && right == provider . Right
112+ ? provider
113+ : new JoinProvider ( left , right , provider . JoinType ,
114+ equalIndexes != null ? ( Pair < int > [ ] ) equalIndexes : provider . EqualIndexes ) ;
123115 }
124116
125117 /// <inheritdoc/>
126118 protected override CompilableProvider VisitFilter ( FilterProvider provider )
127119 {
128120 OnRecursionEntrance ( provider ) ;
129121 var source = VisitCompilable ( provider . Source ) ;
130- OnRecursionExit ( provider ) ;
122+ _ = OnRecursionExit ( provider ) ;
131123 var predicate = translate ( provider , provider . Predicate ) ;
132- if ( source == provider . Source && predicate == provider . Predicate )
133- return provider ;
134- return new FilterProvider ( source , ( Expression < Func < Tuple , bool > > ) predicate ) ;
124+ return source == provider . Source && predicate == provider . Predicate
125+ ? provider
126+ : new FilterProvider ( source , ( Expression < Func < Tuple , bool > > ) predicate ) ;
135127 }
136128
137129 /// <inheritdoc/>
138130 protected override CompilableProvider VisitDistinct ( DistinctProvider provider )
139131 {
140132 OnRecursionEntrance ( provider ) ;
141133 var source = VisitCompilable ( provider . Source ) ;
142- OnRecursionExit ( provider ) ;
134+ _ = OnRecursionExit ( provider ) ;
143135 return source == provider . Source ? provider : new DistinctProvider ( source ) ;
144136 }
145137
@@ -148,7 +140,7 @@ protected override CompilableProvider VisitCalculate(CalculateProvider provider)
148140 {
149141 OnRecursionEntrance ( provider ) ;
150142 var source = VisitCompilable ( provider . Source ) ;
151- OnRecursionExit ( provider ) ;
143+ _ = OnRecursionExit ( provider ) ;
152144 var translated = false ;
153145 var descriptors = new List < CalculatedColumnDescriptor > ( provider . CalculatedColumns . Length ) ;
154146 foreach ( var column in provider . CalculatedColumns ) {
@@ -158,19 +150,18 @@ protected override CompilableProvider VisitCalculate(CalculateProvider provider)
158150 var ccd = new CalculatedColumnDescriptor ( column . Name , column . Type , ( Expression < Func < Tuple , object > > ) expression ) ;
159151 descriptors . Add ( ccd ) ;
160152 }
161- if ( ! translated && source == provider . Source )
162- return provider ;
163- return new CalculateProvider ( source , descriptors . ToArray ( ) ) ;
153+ return ! translated && source == provider . Source
154+ ? provider
155+ : new CalculateProvider ( source , descriptors . ToArray ( ) ) ;
164156 }
165157
158+ /// <inheritdoc/>
166159 protected override CompilableProvider VisitRowNumber ( RowNumberProvider provider )
167160 {
168161 OnRecursionEntrance ( provider ) ;
169162 var source = VisitCompilable ( provider . Source ) ;
170- OnRecursionExit ( provider ) ;
171- if ( source == provider . Source )
172- return provider ;
173- return new RowNumberProvider ( source , provider . SystemColumn . Name ) ;
163+ _ = OnRecursionExit ( provider ) ;
164+ return source == provider . Source ? provider : new RowNumberProvider ( source , provider . SystemColumn . Name ) ;
174165 }
175166
176167
@@ -179,10 +170,8 @@ protected override CompilableProvider VisitAlias(AliasProvider provider)
179170 {
180171 OnRecursionEntrance ( provider ) ;
181172 var source = VisitCompilable ( provider . Source ) ;
182- OnRecursionExit ( provider ) ;
183- return source == provider . Source
184- ? provider
185- : new AliasProvider ( source , provider . Alias ) ;
173+ _ = OnRecursionExit ( provider ) ;
174+ return source == provider . Source ? provider : new AliasProvider ( source , provider . Alias ) ;
186175 }
187176
188177 /// <inheritdoc/>
@@ -205,37 +194,34 @@ protected override CompilableProvider VisitAggregate(AggregateProvider provider)
205194 /// <inheritdoc/>
206195 protected override CompilableProvider VisitStore ( StoreProvider provider )
207196 {
208- if ( ! ( provider . Source is CompilableProvider compilableSource ) )
209- return provider ;
197+ var compilableSource = provider . Source ;
210198 OnRecursionEntrance ( provider ) ;
211199 var source = VisitCompilable ( compilableSource ) ;
212- OnRecursionExit ( provider ) ;
213- return source == compilableSource
214- ? provider
215- : new StoreProvider ( source , provider . Name ) ;
200+ _ = OnRecursionExit ( provider ) ;
201+ return source == compilableSource ? provider : new StoreProvider ( source , provider . Name ) ;
216202 }
217203
218204 /// <inheritdoc/>
219205 protected override CompilableProvider VisitIndex ( IndexProvider provider )
220206 {
221207 OnRecursionEntrance ( provider ) ;
222- OnRecursionExit ( provider ) ;
208+ _ = OnRecursionExit ( provider ) ;
223209 return provider ;
224210 }
225211
226212 /// <inheritdoc/>
227213 protected override CompilableProvider VisitFreeText ( FreeTextProvider provider )
228214 {
229215 OnRecursionEntrance ( provider ) ;
230- OnRecursionExit ( provider ) ;
216+ _ = OnRecursionExit ( provider ) ;
231217 return provider ;
232218 }
233219
234220 /// <inheritdoc/>
235221 protected override CompilableProvider VisitContainsTable ( ContainsTableProvider provider )
236222 {
237223 OnRecursionEntrance ( provider ) ;
238- OnRecursionExit ( provider ) ;
224+ _ = OnRecursionExit ( provider ) ;
239225 return provider ;
240226 }
241227
@@ -246,17 +232,17 @@ protected override CompilableProvider VisitPredicateJoin(PredicateJoinProvider p
246232 var left = VisitCompilable ( provider . Left ) ;
247233 var right = VisitCompilable ( provider . Right ) ;
248234 var predicate = ( Expression < Func < Tuple , Tuple , bool > > ) OnRecursionExit ( provider ) ;
249- if ( left == provider . Left && right == provider . Right )
250- return provider ;
251- return new PredicateJoinProvider ( left , right , predicate ?? provider . Predicate , provider . JoinType ) ;
235+ return left == provider . Left && right == provider . Right
236+ ? provider
237+ : new PredicateJoinProvider ( left , right , predicate ?? provider . Predicate , provider . JoinType ) ;
252238 }
253239
254240 /// <inheritdoc/>
255241 protected override CompilableProvider VisitExistence ( ExistenceProvider provider )
256242 {
257243 OnRecursionEntrance ( provider ) ;
258244 var source = VisitCompilable ( provider . Source ) ;
259- OnRecursionExit ( provider ) ;
245+ _ = OnRecursionExit ( provider ) ;
260246 return source == provider . Source ? provider : new ExistenceProvider ( source , provider . ExistenceColumnName ) ;
261247 }
262248
@@ -266,10 +252,11 @@ protected override CompilableProvider VisitApply(ApplyProvider provider)
266252 OnRecursionEntrance ( provider ) ;
267253 var left = VisitCompilable ( provider . Left ) ;
268254 var right = VisitCompilable ( provider . Right ) ;
269- OnRecursionExit ( provider ) ;
270- if ( left == provider . Left && right == provider . Right )
271- return provider ;
272- return new ApplyProvider ( provider . ApplyParameter , left , right , provider . IsInlined , provider . SequenceType , provider . ApplyType ) ;
255+ _ = OnRecursionExit ( provider ) ;
256+ return left == provider . Left && right == provider . Right
257+ ? provider
258+ : new ApplyProvider ( provider . ApplyParameter , left , right ,
259+ provider . IsInlined , provider . SequenceType , provider . ApplyType ) ;
273260 }
274261
275262 /// <inheritdoc/>
@@ -278,10 +265,10 @@ protected override CompilableProvider VisitIntersect(IntersectProvider provider)
278265 OnRecursionEntrance ( provider ) ;
279266 var left = VisitCompilable ( provider . Left ) ;
280267 var right = VisitCompilable ( provider . Right ) ;
281- OnRecursionExit ( provider ) ;
282- if ( left == provider . Left && right == provider . Right )
283- return provider ;
284- return new IntersectProvider ( left , right ) ;
268+ _ = OnRecursionExit ( provider ) ;
269+ return left == provider . Left && right == provider . Right
270+ ? provider
271+ : new IntersectProvider ( left , right ) ;
285272 }
286273
287274 /// <inheritdoc/>
@@ -290,10 +277,10 @@ protected override CompilableProvider VisitExcept(ExceptProvider provider)
290277 OnRecursionEntrance ( provider ) ;
291278 var left = VisitCompilable ( provider . Left ) ;
292279 var right = VisitCompilable ( provider . Right ) ;
293- OnRecursionExit ( provider ) ;
294- if ( left == provider . Left && right == provider . Right )
295- return provider ;
296- return new ExceptProvider ( left , right ) ;
280+ _ = OnRecursionExit ( provider ) ;
281+ return left == provider . Left && right == provider . Right
282+ ? provider
283+ : new ExceptProvider ( left , right ) ;
297284 }
298285
299286 /// <inheritdoc/>
@@ -302,10 +289,10 @@ protected override CompilableProvider VisitConcat(ConcatProvider provider)
302289 OnRecursionEntrance ( provider ) ;
303290 var left = VisitCompilable ( provider . Left ) ;
304291 var right = VisitCompilable ( provider . Right ) ;
305- OnRecursionExit ( provider ) ;
306- if ( left == provider . Left && right == provider . Right )
307- return provider ;
308- return new ConcatProvider ( left , right ) ;
292+ _ = OnRecursionExit ( provider ) ;
293+ return left == provider . Left && right == provider . Right
294+ ? provider
295+ : new ConcatProvider ( left , right ) ;
309296 }
310297
311298 /// <inheritdoc/>
@@ -314,35 +301,31 @@ protected override CompilableProvider VisitUnion(UnionProvider provider)
314301 OnRecursionEntrance ( provider ) ;
315302 var left = VisitCompilable ( provider . Left ) ;
316303 var right = VisitCompilable ( provider . Right ) ;
317- OnRecursionExit ( provider ) ;
318- if ( left == provider . Left && right == provider . Right )
319- return provider ;
320- return new UnionProvider ( left , right ) ;
304+ _ = OnRecursionExit ( provider ) ;
305+ return left == provider . Left && right == provider . Right
306+ ? provider
307+ : new UnionProvider ( left , right ) ;
321308 }
322309
323310 /// <inheritdoc/>
324311 protected override CompilableProvider VisitLock ( LockProvider provider )
325312 {
326313 OnRecursionEntrance ( provider ) ;
327314 var source = VisitCompilable ( provider . Source ) ;
328- OnRecursionExit ( provider ) ;
315+ _ = OnRecursionExit ( provider ) ;
329316 return source == provider . Source ? provider : new LockProvider ( source , provider . LockMode , provider . LockBehavior ) ;
330317 }
331318
319+ /// <inheritdoc/>
332320 protected override CompilableProvider VisitInclude ( IncludeProvider provider )
333321 {
334322 OnRecursionEntrance ( provider ) ;
335323 var source = VisitCompilable ( provider . Source ) ;
336- OnRecursionExit ( provider ) ;
337- if ( source == provider . Source )
338- return provider ;
339- return new IncludeProvider ( source , provider . Algorithm , provider . IsInlined ,
340- provider . FilterDataSource , provider . ResultColumnName , provider . FilteredColumns ) ;
341- }
342-
343- private static Expression DefaultExpressionTranslator ( Provider p , Expression e )
344- {
345- return e ;
324+ _ = OnRecursionExit ( provider ) ;
325+ return source == provider . Source
326+ ? provider
327+ : new IncludeProvider ( source , provider . Algorithm , provider . IsInlined ,
328+ provider . FilterDataSource , provider . ResultColumnName , provider . FilteredColumns ) ;
346329 }
347330
348331 /// <summary>
@@ -360,6 +343,8 @@ protected virtual void OnRecursionEntrance(Provider provider)
360343 {
361344 }
362345
346+ private static Expression DefaultExpressionTranslator ( CompilableProvider p , Expression e ) => e ;
347+
363348 // Constructors
364349
365350 /// <inheritdoc/>
@@ -370,7 +355,7 @@ public CompilableProviderVisitor()
370355
371356 /// <inheritdoc/>
372357 /// <param name="expressionTranslator">Expression translator.</param>
373- public CompilableProviderVisitor ( Func < Provider , Expression , Expression > expressionTranslator )
358+ public CompilableProviderVisitor ( Func < CompilableProvider , Expression , Expression > expressionTranslator )
374359 {
375360 translate = expressionTranslator ;
376361 }
0 commit comments