@@ -23,6 +23,7 @@ import org.apache.spark.sql.types._
23
23
24
24
import scala .collection .mutable
25
25
import scala .collection .mutable .ArrayBuffer
26
+ import scala .util .control .Breaks ._
26
27
27
28
object CriticalPointType extends Enumeration {
28
29
type CriticalPointType = Value
@@ -502,20 +503,23 @@ object RangeCriticalPoint {
502
503
var newLimit = limit
503
504
var cmp = 0
504
505
var prevEq = eq
505
- while (incr * (newLimit - prevEq) >= 0 ) {
506
- if (incr * (newLimit - prevEq) < threshold) {
507
- // linear search
508
- mid = prevEq + incr
509
- while (incr * (newLimit - mid) > 0 && cmp == 0 ) {
510
- prevEq = mid
511
- mid = mid + incr
506
+ breakable {
507
+ while (incr * (newLimit - prevEq) >= 0 ) {
508
+ if (incr * (newLimit - prevEq) < threshold) {
509
+ // linear search
510
+ mid = prevEq + incr
511
+ while (incr * (newLimit - mid) > 0 && cmp == 0 ) {
512
+ prevEq = mid
513
+ mid = mid + incr
514
+ cmp = comp(src, tgt(mid))
515
+ }
516
+ break
517
+ } else {
518
+ mid = (prevEq + newLimit) / 2
512
519
cmp = comp(src, tgt(mid))
520
+ if (cmp == 0 ) prevEq = mid
521
+ else newLimit = mid
513
522
}
514
- } else {
515
- mid = (prevEq + newLimit) / 2
516
- cmp = comp(src, tgt(mid))
517
- if (cmp == 0 ) prevEq = mid
518
- else newLimit = mid
519
523
}
520
524
}
521
525
prevEq
@@ -577,7 +581,7 @@ object RangeCriticalPoint {
577
581
} else {
578
582
prevSmaller = binarySearchEquality(mid, prevLarger, src, tgt, threshold, comp)
579
583
}
580
- right = left // break the outer loop
584
+ right = left - 1 // break the outer loop
581
585
} else if (cmp < 0 ) {
582
586
prevLarger = mid
583
587
right = mid - 1
0 commit comments