@@ -57,6 +57,7 @@ public class Optimizer extends DefaultExpressionVisitor {
57
57
58
58
private final XQueryContext context ;
59
59
private final List <QueryRewriter > rewriters ;
60
+ private final FindOptimizable findOptimizable = new FindOptimizable ();
60
61
61
62
private int predicates = 0 ;
62
63
@@ -98,15 +99,16 @@ public void visitLocationStep(final LocationStep locationStep) {
98
99
// walk through the predicates attached to the current location step.
99
100
// try to find a predicate containing an expression which is an instance
100
101
// of Optimizable.
101
- final FindOptimizable find = new FindOptimizable ();
102
102
for (final Predicate pred : preds ) {
103
- pred .accept (find );
104
- @ Nullable final Optimizable [] list = find .getOptimizables ();
103
+ pred .accept (findOptimizable );
104
+ @ Nullable final Optimizable [] list = findOptimizable .getOptimizables ();
105
105
if (canOptimize (list )) {
106
106
optimize = true ;
107
+ }
108
+ findOptimizable .reset ();
109
+ if (optimize ) {
107
110
break ;
108
111
}
109
- find .reset ();
110
112
}
111
113
}
112
114
@@ -214,16 +216,19 @@ private boolean hasOptimizable(final List<Predicate> preds) {
214
216
// walk through the predicates attached to the current location step.
215
217
// try to find a predicate containing an expression which is an instance
216
218
// of Optimizable.
217
- final FindOptimizable find = new FindOptimizable () ;
219
+ boolean optimizable = false ;
218
220
for (final Predicate pred : preds ) {
219
- pred .accept (find );
220
- @ Nullable final Optimizable [] list = find .getOptimizables ();
221
+ pred .accept (findOptimizable );
222
+ @ Nullable final Optimizable [] list = findOptimizable .getOptimizables ();
221
223
if (canOptimize (list )) {
222
- return true ;
224
+ optimizable = true ;
225
+ }
226
+ findOptimizable .reset ();
227
+ if (optimizable ) {
228
+ break ;
223
229
}
224
- find .reset ();
225
230
}
226
- return false ;
231
+ return optimizable ;
227
232
}
228
233
229
234
@ Override
@@ -433,7 +438,7 @@ private void addOptimizable(final Optimizable optimizable) {
433
438
* Clears the known {@link #optimizables}.
434
439
*/
435
440
public void reset () {
436
- optimizables = null ;
441
+ this . optimizables = null ;
437
442
}
438
443
}
439
444
0 commit comments