@@ -261,7 +261,7 @@ private <T> Optional<Predicate<T>> createDateTermPredicate(final ExpressionTerm
261
261
private <T > Optional <Predicate <T >> createNumericTermPredicate (final ExpressionTerm term ,
262
262
final ValueFunctionFactory <T > valueFunctionFactory ,
263
263
final WordListProvider wordListProvider ) {
264
- final Function <T , BigDecimal > numExtractor = valueFunctionFactory .createNumberExtractor ();
264
+ final Function <T , Double > numExtractor = valueFunctionFactory .createNumberExtractor ();
265
265
return switch (term .getCondition ()) {
266
266
case EQUALS -> NumericEquals .create (term , numExtractor );
267
267
case NOT_EQUALS -> NotPredicate .create (NumericEquals .create (term , numExtractor ));
@@ -281,10 +281,10 @@ private <T> Optional<Predicate<T>> createNumericTermPredicate(final ExpressionTe
281
281
}
282
282
283
283
284
- private static BigDecimal getTermNumber (final ExpressionTerm term ,
285
- final String value ) {
284
+ private static Double getTermNumber (final ExpressionTerm term ,
285
+ final String value ) {
286
286
try {
287
- return new BigDecimal (value );
287
+ return new BigDecimal (value ). doubleValue () ;
288
288
} catch (final NumberFormatException e ) {
289
289
throw new MatchException (
290
290
"Expected a numeric value for field \" " + term .getField () +
@@ -321,10 +321,10 @@ private static long getTermDate(final ExpressionTerm term,
321
321
}
322
322
}
323
323
324
- private static BigDecimal [] getTermNumbers (final ExpressionTerm term ,
325
- final Object value ) {
324
+ private static Double [] getTermNumbers (final ExpressionTerm term ,
325
+ final Object value ) {
326
326
final String [] values = value .toString ().split (DELIMITER );
327
- final BigDecimal [] numbers = new BigDecimal [values .length ];
327
+ final Double [] numbers = new Double [values .length ];
328
328
for (int i = 0 ; i < values .length ; i ++) {
329
329
numbers [i ] = getTermNumber (term , values [i ].trim ());
330
330
}
@@ -364,7 +364,7 @@ public interface ValueFunctionFactory<T> {
364
364
365
365
Function <T , Long > createDateExtractor ();
366
366
367
- Function <T , BigDecimal > createNumberExtractor ();
367
+ Function <T , Double > createNumberExtractor ();
368
368
369
369
FieldType getFieldType ();
370
370
}
@@ -474,11 +474,11 @@ public boolean test(final T values) {
474
474
475
475
private abstract static class NumericExpressionTermPredicate <T > extends ExpressionTermPredicate <T > {
476
476
477
- final BigDecimal termNum ;
478
- final Function <T , BigDecimal > extractionFunction ;
477
+ final Double termNum ;
478
+ final Function <T , Double > extractionFunction ;
479
479
480
480
private NumericExpressionTermPredicate (final ExpressionTerm term ,
481
- final Function <T , BigDecimal > extractionFunction ) {
481
+ final Function <T , Double > extractionFunction ) {
482
482
super (term );
483
483
termNum = getTermNumber (term , term .getValue ());
484
484
this .extractionFunction = extractionFunction ;
@@ -496,123 +496,127 @@ private static <T> Optional<Predicate<T>> ifValue(final ExpressionTerm term,
496
496
private static class NumericEquals <T > extends NumericExpressionTermPredicate <T > {
497
497
498
498
private NumericEquals (final ExpressionTerm term ,
499
- final Function <T , BigDecimal > extractionFunction ) {
499
+ final Function <T , Double > extractionFunction ) {
500
500
super (term , extractionFunction );
501
501
}
502
502
503
503
private static <T > Optional <Predicate <T >> create (final ExpressionTerm term ,
504
- final Function <T , BigDecimal > extractionFunction ) {
504
+ final Function <T , Double > extractionFunction ) {
505
505
return ifValue (term , () -> new NumericEquals <>(term , extractionFunction ));
506
506
}
507
507
508
508
@ Override
509
509
public boolean test (final T values ) {
510
- final BigDecimal val = extractionFunction .apply (values );
511
- return Objects .equals (val , termNum );
510
+ try {
511
+ final Double val = extractionFunction .apply (values );
512
+ return Objects .equals (val , termNum );
513
+ } catch (final RuntimeException e ) {
514
+ return false ;
515
+ }
512
516
}
513
517
}
514
518
515
519
private static class NumericGreaterThan <T > extends NumericExpressionTermPredicate <T > {
516
520
517
521
private NumericGreaterThan (final ExpressionTerm term ,
518
- final Function <T , BigDecimal > extractionFunction ) {
522
+ final Function <T , Double > extractionFunction ) {
519
523
super (term , extractionFunction );
520
524
}
521
525
522
526
private static <T > Optional <Predicate <T >> create (final ExpressionTerm term ,
523
- final Function <T , BigDecimal > extractionFunction ) {
527
+ final Function <T , Double > extractionFunction ) {
524
528
return ifValue (term , () -> new NumericGreaterThan <>(term , extractionFunction ));
525
529
}
526
530
527
531
@ Override
528
532
public boolean test (final T values ) {
529
- final BigDecimal val = extractionFunction .apply (values );
530
- int compVal = CompareUtil .compareBigDecimal (val , termNum );
533
+ final Double val = extractionFunction .apply (values );
534
+ int compVal = CompareUtil .compareDouble (val , termNum );
531
535
return compVal > 0 ;
532
536
}
533
537
}
534
538
535
539
private static class NumericGreaterThanOrEqualTo <T > extends NumericExpressionTermPredicate <T > {
536
540
537
541
private NumericGreaterThanOrEqualTo (final ExpressionTerm term ,
538
- final Function <T , BigDecimal > extractionFunction ) {
542
+ final Function <T , Double > extractionFunction ) {
539
543
super (term , extractionFunction );
540
544
}
541
545
542
546
private static <T > Optional <Predicate <T >> create (final ExpressionTerm term ,
543
- final Function <T , BigDecimal > extractionFunction ) {
547
+ final Function <T , Double > extractionFunction ) {
544
548
return ifValue (term , () -> new NumericGreaterThanOrEqualTo <>(term , extractionFunction ));
545
549
}
546
550
547
551
@ Override
548
552
public boolean test (final T values ) {
549
- final BigDecimal val = extractionFunction .apply (values );
550
- int compVal = CompareUtil .compareBigDecimal (val , termNum );
553
+ final Double val = extractionFunction .apply (values );
554
+ int compVal = CompareUtil .compareDouble (val , termNum );
551
555
return compVal >= 0 ;
552
556
}
553
557
}
554
558
555
559
private static class NumericLessThan <T > extends NumericExpressionTermPredicate <T > {
556
560
557
561
private NumericLessThan (final ExpressionTerm term ,
558
- final Function <T , BigDecimal > extractionFunction ) {
562
+ final Function <T , Double > extractionFunction ) {
559
563
super (term , extractionFunction );
560
564
}
561
565
562
566
private static <T > Optional <Predicate <T >> create (final ExpressionTerm term ,
563
- final Function <T , BigDecimal > extractionFunction ) {
567
+ final Function <T , Double > extractionFunction ) {
564
568
return ifValue (term , () -> new NumericLessThan <>(term , extractionFunction ));
565
569
}
566
570
567
571
@ Override
568
572
public boolean test (final T values ) {
569
- final BigDecimal val = extractionFunction .apply (values );
570
- int compVal = CompareUtil .compareBigDecimal (val , termNum );
573
+ final Double val = extractionFunction .apply (values );
574
+ int compVal = CompareUtil .compareDouble (val , termNum );
571
575
return compVal < 0 ;
572
576
}
573
577
}
574
578
575
579
private static class NumericLessThanOrEqualTo <T > extends NumericExpressionTermPredicate <T > {
576
580
577
581
private NumericLessThanOrEqualTo (final ExpressionTerm term ,
578
- final Function <T , BigDecimal > extractionFunction ) {
582
+ final Function <T , Double > extractionFunction ) {
579
583
super (term , extractionFunction );
580
584
}
581
585
582
586
private static <T > Optional <Predicate <T >> create (final ExpressionTerm term ,
583
- final Function <T , BigDecimal > extractionFunction ) {
587
+ final Function <T , Double > extractionFunction ) {
584
588
return ifValue (term , () -> new NumericLessThanOrEqualTo <>(term , extractionFunction ));
585
589
}
586
590
587
591
@ Override
588
592
public boolean test (final T values ) {
589
- final BigDecimal val = extractionFunction .apply (values );
590
- int compVal = CompareUtil .compareBigDecimal (val , termNum );
593
+ final Double val = extractionFunction .apply (values );
594
+ int compVal = CompareUtil .compareDouble (val , termNum );
591
595
return compVal <= 0 ;
592
596
}
593
597
}
594
598
595
599
private static class NumericBetween <T > extends ExpressionTermPredicate <T > {
596
600
597
- private final BigDecimal [] between ;
598
- private final Function <T , BigDecimal > extractionFunction ;
601
+ private final Double [] between ;
602
+ private final Function <T , Double > extractionFunction ;
599
603
600
604
private NumericBetween (final ExpressionTerm term ,
601
- final Function <T , BigDecimal > extractionFunction ,
602
- final BigDecimal [] between ) {
605
+ final Function <T , Double > extractionFunction ,
606
+ final Double [] between ) {
603
607
super (term );
604
608
this .between = between ;
605
609
this .extractionFunction = extractionFunction ;
606
610
}
607
611
608
612
private static <T > Optional <Predicate <T >> create (final ExpressionTerm term ,
609
- final Function <T , BigDecimal > extractionFunction ) {
613
+ final Function <T , Double > extractionFunction ) {
610
614
return ifValue (term , () -> {
611
- final BigDecimal [] between = getTermNumbers (term , term .getValue ());
615
+ final Double [] between = getTermNumbers (term , term .getValue ());
612
616
if (between .length != 2 ) {
613
617
throw new MatchException ("2 numbers needed for between query" );
614
618
}
615
- if (CompareUtil .compareBigDecimal (between [0 ], between [1 ]) >= 0 ) {
619
+ if (CompareUtil .compareDouble (between [0 ], between [1 ]) >= 0 ) {
616
620
throw new MatchException ("From number must be lower than to number" );
617
621
}
618
622
return new NumericBetween <>(term , extractionFunction , between );
@@ -621,28 +625,28 @@ private static <T> Optional<Predicate<T>> create(final ExpressionTerm term,
621
625
622
626
@ Override
623
627
public boolean test (final T values ) {
624
- final BigDecimal val = extractionFunction .apply (values );
625
- return CompareUtil .compareBigDecimal (val , between [0 ]) >= 0
626
- && CompareUtil .compareBigDecimal (val , between [1 ]) <= 0 ;
628
+ final Double val = extractionFunction .apply (values );
629
+ return CompareUtil .compareDouble (val , between [0 ]) >= 0
630
+ && CompareUtil .compareDouble (val , between [1 ]) <= 0 ;
627
631
}
628
632
}
629
633
630
634
private static class NumericIn <T > extends ExpressionTermPredicate <T > {
631
635
632
- private final BigDecimal [] in ;
633
- private final Function <T , BigDecimal > extractionFunction ;
636
+ private final Double [] in ;
637
+ private final Function <T , Double > extractionFunction ;
634
638
635
639
private NumericIn (final ExpressionTerm term ,
636
- final Function <T , BigDecimal > extractionFunction ,
637
- final BigDecimal [] in ) {
640
+ final Function <T , Double > extractionFunction ,
641
+ final Double [] in ) {
638
642
super (term );
639
643
this .in = in ;
640
644
this .extractionFunction = extractionFunction ;
641
645
}
642
646
643
647
private static <T > Optional <Predicate <T >> create (final ExpressionTerm term ,
644
- final Function <T , BigDecimal > extractionFunction ) {
645
- final BigDecimal [] in = getTermNumbers (term , term .getValue ());
648
+ final Function <T , Double > extractionFunction ) {
649
+ final Double [] in = getTermNumbers (term , term .getValue ());
646
650
// If there are no terms then always a false match.
647
651
if (in .length == 0 ) {
648
652
return Optional .of (values -> false );
@@ -652,8 +656,8 @@ private static <T> Optional<Predicate<T>> create(final ExpressionTerm term,
652
656
653
657
@ Override
654
658
public boolean test (final T values ) {
655
- final BigDecimal val = extractionFunction .apply (values );
656
- for (final BigDecimal n : in ) {
659
+ final Double val = extractionFunction .apply (values );
660
+ for (final Double n : in ) {
657
661
if (Objects .equals (n , val )) {
658
662
return true ;
659
663
}
@@ -664,19 +668,19 @@ public boolean test(final T values) {
664
668
665
669
private static class NumericInDictionary <T > extends ExpressionTermPredicate <T > {
666
670
667
- private final Function <T , BigDecimal > extractionFunction ;
668
- private final BigDecimal [] in ;
671
+ private final Function <T , Double > extractionFunction ;
672
+ private final Double [] in ;
669
673
670
674
private NumericInDictionary (final ExpressionTerm term ,
671
- final Function <T , BigDecimal > extractionFunction ,
672
- final BigDecimal [] in ) {
675
+ final Function <T , Double > extractionFunction ,
676
+ final Double [] in ) {
673
677
super (term );
674
678
this .extractionFunction = extractionFunction ;
675
679
this .in = in ;
676
680
}
677
681
678
682
private static <T > Optional <Predicate <T >> create (final ExpressionTerm term ,
679
- final Function <T , BigDecimal > extractionFunction ,
683
+ final Function <T , Double > extractionFunction ,
680
684
final WordListProvider wordListProvider ) {
681
685
final String [] words ;
682
686
if (term .getDocRef () != null ) {
@@ -688,7 +692,7 @@ private static <T> Optional<Predicate<T>> create(final ExpressionTerm term,
688
692
return Optional .of (values -> false );
689
693
}
690
694
691
- final BigDecimal [] in = new BigDecimal [words .length ];
695
+ final Double [] in = new Double [words .length ];
692
696
for (int i = 0 ; i < words .length ; i ++) {
693
697
final String word = words [i ];
694
698
in [i ] = getTermNumber (term , word );
@@ -698,8 +702,8 @@ private static <T> Optional<Predicate<T>> create(final ExpressionTerm term,
698
702
699
703
@ Override
700
704
public boolean test (final T values ) {
701
- final BigDecimal val = extractionFunction .apply (values );
702
- for (final BigDecimal n : in ) {
705
+ final Double val = extractionFunction .apply (values );
706
+ for (final Double n : in ) {
703
707
if (Objects .equals (n , val )) {
704
708
return true ;
705
709
}
0 commit comments