Skip to content

Commit f9cbacb

Browse files
authored
Split up Painless Fields API conversion tests (#78345)
This change has three small parts. * Refactors the tests to have a base test class that contains predefined fields for each relevant type conversion. This base test class allows availability of predefined fields for any new fields added outside of core. * Splits the conversions test cases into a one to one matching for each possible conversion where we do field type to other field type, and if possible, the reverse as well within a single test. * Fixes a bug where we relied on the delegating method values for get long and get double, but in some cases this was giving non-converted data.
1 parent 57267f4 commit f9cbacb

File tree

12 files changed

+723
-308
lines changed

12 files changed

+723
-308
lines changed

server/src/main/java/org/elasticsearch/index/fielddata/ScriptDocValues.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -681,12 +681,12 @@ public final String getValue() {
681681

682682
@Override
683683
public long getLongValue() {
684-
return StringField.toLong(get(0));
684+
return Long.parseLong(get(0));
685685
}
686686

687687
@Override
688688
public double getDoubleValue() {
689-
return StringField.toDouble(get(0));
689+
return Double.parseDouble(get(0));
690690
}
691691

692692
@Override

server/src/main/java/org/elasticsearch/script/field/BigIntegerField.java

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
package org.elasticsearch.script.field;
1010

11-
import java.math.BigInteger;
1211
import java.util.List;
1312
import java.util.stream.Collectors;
1413

@@ -21,10 +20,10 @@ public class BigIntegerField extends Field<java.math.BigInteger> {
2120
* Longs and Doubles are wrapped as BigIntegers.
2221
* Strings are parsed as either Longs or Doubles and wrapped in a BigInteger.
2322
*/
24-
public static final Converter<BigInteger, BigIntegerField> BigInteger;
23+
public static final Converter<java.math.BigInteger, BigIntegerField> BigInteger;
2524

2625
static {
27-
BigInteger = new Converter<BigInteger, BigIntegerField>() {
26+
BigInteger = new Converter<java.math.BigInteger, BigIntegerField>() {
2827
@Override
2928
public BigIntegerField convert(Field<?> sourceField) {
3029
if (sourceField instanceof LongField) {
@@ -60,52 +59,42 @@ public Class<BigIntegerField> getFieldClass() {
6059
}
6160

6261
@Override
63-
public Class<BigInteger> getTargetClass() {
64-
return BigInteger.class;
62+
public Class<java.math.BigInteger> getTargetClass() {
63+
return java.math.BigInteger.class;
6564
}
6665
};
6766
}
6867

6968
/* ---- Conversion Helpers To Other Fields ---- */
7069

7170
public static LongField toLongField(BigIntegerField sourceField) {
72-
FieldValues<BigInteger> fv = sourceField.getFieldValues();
73-
return new LongField(sourceField.getName(), new DelegatingFieldValues<Long, BigInteger>(fv) {
71+
FieldValues<java.math.BigInteger> fv = sourceField.getFieldValues();
72+
return new LongField(sourceField.getName(), new DelegatingFieldValues<Long, java.math.BigInteger>(fv) {
7473
@Override
7574
public List<Long> getValues() {
76-
return values.getValues().stream().map(BigIntegerField::toLong).collect(Collectors.toList());
75+
return values.getValues().stream().map(java.math.BigInteger::longValue).collect(Collectors.toList());
7776
}
7877

7978
@Override
8079
public Long getNonPrimitiveValue() {
81-
return toLong(values.getNonPrimitiveValue());
80+
return values.getNonPrimitiveValue().longValue();
8281
}
8382

8483
@Override
8584
public long getLongValue() {
86-
return toLong(values.getNonPrimitiveValue());
85+
return values.getLongValue();
8786
}
8887

8988
@Override
9089
public double getDoubleValue() {
91-
return toDouble(values.getNonPrimitiveValue());
90+
return values.getDoubleValue();
9291
}
9392
});
9493
}
9594

96-
/* ---- Conversion Helpers To Other Types ---- */
97-
98-
public static long toLong(BigInteger bigInteger) {
99-
return bigInteger.longValue();
100-
}
101-
102-
public static double toDouble(BigInteger bigInteger) {
103-
return bigInteger.doubleValue();
104-
}
105-
10695
/* ---- Big Integer Field Members ---- */
10796

108-
public BigIntegerField(String name, FieldValues<BigInteger> values) {
97+
public BigIntegerField(String name, FieldValues<java.math.BigInteger> values) {
10998
super(name, values);
11099
}
111100
}

server/src/main/java/org/elasticsearch/script/field/BooleanField.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public static LongField toLongField(BooleanField sourceField) {
2020
return new LongField(sourceField.getName(), new DelegatingFieldValues<Long, Boolean>(fv) {
2121
@Override
2222
public List<Long> getValues() {
23-
return values.getValues().stream().map(bool -> bool ? 1L : 0L).collect(Collectors.toList());
23+
return values.getValues().stream().map(BooleanField::toLong).collect(Collectors.toList());
2424
}
2525

2626
@Override
@@ -30,12 +30,12 @@ public Long getNonPrimitiveValue() {
3030

3131
@Override
3232
public long getLongValue() {
33-
return toLong(values.getNonPrimitiveValue());
33+
return values.getLongValue();
3434
}
3535

3636
@Override
3737
public double getDoubleValue() {
38-
return toLong(values.getNonPrimitiveValue());
38+
return (long)values.getDoubleValue();
3939
}
4040
});
4141
}
@@ -47,7 +47,7 @@ public static long toLong(boolean bool) {
4747
}
4848

4949
public static double toDouble(boolean bool) {
50-
return bool ? 1.0d : 0.0d;
50+
return bool ? 1.0 : 0.0;
5151
}
5252

5353
/* ---- Boolean Field Members ---- */

server/src/main/java/org/elasticsearch/script/field/DateMillisField.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@ public Long getNonPrimitiveValue() {
3232

3333
@Override
3434
public long getLongValue() {
35-
return toLong(values.getNonPrimitiveValue());
35+
return values.getLongValue();
3636
}
3737

3838
@Override
3939
public double getDoubleValue() {
40-
return toLong(values.getNonPrimitiveValue());
40+
return (long)values.getDoubleValue();
4141
}
4242
});
4343
}

server/src/main/java/org/elasticsearch/script/field/DateNanosField.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ public Long getNonPrimitiveValue() {
3838

3939
@Override
4040
public long getLongValue() {
41-
return toLong(values.getNonPrimitiveValue());
41+
return values.getLongValue();
4242
}
4343

4444
@Override
4545
public double getDoubleValue() {
46-
return toLong(values.getNonPrimitiveValue());
46+
return (long)values.getDoubleValue();
4747
}
4848
});
4949
}

server/src/main/java/org/elasticsearch/script/field/DelegatingFieldValues.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,4 @@ public boolean isEmpty() {
2828
public int size() {
2929
return values.size();
3030
}
31-
32-
@Override
33-
public long getLongValue() {
34-
return values.getLongValue();
35-
}
36-
37-
@Override
38-
public double getDoubleValue() {
39-
return values.getDoubleValue();
40-
}
4131
}

server/src/main/java/org/elasticsearch/script/field/DoubleField.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,25 @@ public class DoubleField extends Field<Double> {
1919

2020
public static BigIntegerField toBigIntegerField(DoubleField sourceField) {
2121
FieldValues<Double> fv = sourceField.getFieldValues();
22-
return new BigIntegerField(sourceField.getName(), new DelegatingFieldValues<java.math.BigInteger, Double>(fv) {
22+
return new BigIntegerField(sourceField.getName(), new DelegatingFieldValues<BigInteger, Double>(fv) {
2323
@Override
2424
public List<BigInteger> getValues() {
2525
return values.getValues().stream().map(DoubleField::toBigInteger).collect(Collectors.toList());
2626
}
2727

2828
@Override
2929
public BigInteger getNonPrimitiveValue() {
30-
return toBigInteger(values.getDoubleValue());
30+
return toBigInteger(values.getNonPrimitiveValue());
31+
}
32+
33+
@Override
34+
public long getLongValue() {
35+
return values.getLongValue();
36+
}
37+
38+
@Override
39+
public double getDoubleValue() {
40+
return toBigInteger(values.getDoubleValue()).doubleValue();
3141
}
3242
});
3343
}
@@ -42,8 +52,18 @@ public List<Long> getValues() {
4252

4353
@Override
4454
public Long getNonPrimitiveValue() {
55+
return values.getNonPrimitiveValue().longValue();
56+
}
57+
58+
@Override
59+
public long getLongValue() {
4560
return values.getLongValue();
4661
}
62+
63+
@Override
64+
public double getDoubleValue() {
65+
return (long)values.getDoubleValue();
66+
}
4767
});
4868
}
4969

server/src/main/java/org/elasticsearch/script/field/LongField.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,17 @@ public List<BigInteger> getValues() {
8282

8383
@Override
8484
public BigInteger getNonPrimitiveValue() {
85-
return BigInteger.valueOf(values.getLongValue());
85+
return BigInteger.valueOf(values.getNonPrimitiveValue());
86+
}
87+
88+
@Override
89+
public long getLongValue() {
90+
return values.getLongValue();
91+
}
92+
93+
@Override
94+
public double getDoubleValue() {
95+
return DoubleField.toBigInteger(values.getDoubleValue()).doubleValue();
8696
}
8797
});
8898
}

server/src/main/java/org/elasticsearch/script/field/StringField.java

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ public BigInteger getNonPrimitiveValue() {
3333

3434
@Override
3535
public long getLongValue() {
36-
return getNonPrimitiveValue().longValue();
36+
return values.getLongValue();
3737
}
3838

3939
@Override
4040
public double getDoubleValue() {
41-
return getNonPrimitiveValue().doubleValue();
41+
return DoubleField.toBigInteger(values.getDoubleValue()).doubleValue();
4242
}
4343
});
4444
}
@@ -48,23 +48,22 @@ public static LongField toLongField(StringField sourceField) {
4848
return new LongField(sourceField.getName(), new DelegatingFieldValues<Long, String>(fv) {
4949
@Override
5050
public List<Long> getValues() {
51-
return values.getValues().stream().map(StringField::toLong).collect(Collectors.toList());
51+
return values.getValues().stream().map(Long::parseLong).collect(Collectors.toList());
5252
}
5353

5454
@Override
5555
public Long getNonPrimitiveValue() {
56-
return toLong(values.getNonPrimitiveValue());
56+
return Long.parseLong(values.getNonPrimitiveValue());
5757
}
5858

5959
@Override
6060
public long getLongValue() {
61-
return toLong(values.getNonPrimitiveValue());
61+
return values.getLongValue();
6262
}
6363

6464
@Override
6565
public double getDoubleValue() {
66-
// conversion is to LongField, doesn't make sense to parse a Double out of the String here.
67-
return toLong(values.getNonPrimitiveValue());
66+
return (long)values.getDoubleValue();
6867
}
6968
});
7069
}
@@ -74,19 +73,11 @@ public double getDoubleValue() {
7473
public static BigInteger toBigInteger(String str) {
7574
try {
7675
return new BigInteger(str);
77-
} catch (NumberFormatException e) {
76+
} catch (NumberFormatException nfe) {
7877
return new BigDecimal(str).toBigInteger();
7978
}
8079
}
8180

82-
public static long toLong(String str) {
83-
return Long.parseLong(str);
84-
}
85-
86-
public static double toDouble(String str) {
87-
return Double.parseDouble(str);
88-
}
89-
9081
/* ---- String Field Members ---- */
9182

9283
public StringField(String name, FieldValues<String> values) {

0 commit comments

Comments
 (0)