Remove XContentParser.estimatedNumberType().
The goal of this method is to know whether the xcontent impl knows how to differenciate floats from doubles or longs from ints or if it's just guessing. However, all implementations return true (which is correct for yaml and json, but cbor and smile should be able to differenciate). I first tried to implement this method correctly but it raised many issues because eg. most impls write a long as an integer when it is small enough. So I suggest that we remove this method and just treat cbor and smile like yaml and json, which is already what is happening today anyway.
This commit is contained in:
parent
20bff773ed
commit
3e47f90460
|
@ -178,12 +178,6 @@ public interface XContentParser extends Releasable {
|
|||
|
||||
NumberType numberType() throws IOException;
|
||||
|
||||
/**
|
||||
* Is the number type estimated or not (i.e. an int might actually be a long, its just low enough
|
||||
* to be an int).
|
||||
*/
|
||||
boolean estimatedNumberType();
|
||||
|
||||
short shortValue(boolean coerce) throws IOException;
|
||||
|
||||
int intValue(boolean coerce) throws IOException;
|
||||
|
|
|
@ -68,11 +68,6 @@ public class JsonXContentParser extends AbstractXContentParser {
|
|||
return convertNumberType(parser.getNumberType());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean estimatedNumberType() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String currentName() throws IOException {
|
||||
return parser.getCurrentName();
|
||||
|
|
|
@ -560,44 +560,13 @@ class DocumentParser implements Closeable {
|
|||
return builder;
|
||||
} else if (token == XContentParser.Token.VALUE_NUMBER) {
|
||||
XContentParser.NumberType numberType = context.parser().numberType();
|
||||
if (numberType == XContentParser.NumberType.INT) {
|
||||
if (context.parser().estimatedNumberType()) {
|
||||
Mapper.Builder builder = context.root().findTemplateBuilder(context, currentFieldName, "long");
|
||||
if (builder == null) {
|
||||
builder = MapperBuilders.longField(currentFieldName);
|
||||
}
|
||||
return builder;
|
||||
} else {
|
||||
Mapper.Builder builder = context.root().findTemplateBuilder(context, currentFieldName, "integer");
|
||||
if (builder == null) {
|
||||
builder = MapperBuilders.integerField(currentFieldName);
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
} else if (numberType == XContentParser.NumberType.LONG) {
|
||||
if (numberType == XContentParser.NumberType.INT || numberType == XContentParser.NumberType.LONG) {
|
||||
Mapper.Builder builder = context.root().findTemplateBuilder(context, currentFieldName, "long");
|
||||
if (builder == null) {
|
||||
builder = MapperBuilders.longField(currentFieldName);
|
||||
}
|
||||
return builder;
|
||||
} else if (numberType == XContentParser.NumberType.FLOAT) {
|
||||
if (context.parser().estimatedNumberType()) {
|
||||
Mapper.Builder builder = context.root().findTemplateBuilder(context, currentFieldName, "double");
|
||||
if (builder == null) {
|
||||
// no templates are defined, we use float by default instead of double
|
||||
// since this is much more space-efficient and should be enough most of
|
||||
// the time
|
||||
builder = MapperBuilders.floatField(currentFieldName);
|
||||
}
|
||||
return builder;
|
||||
} else {
|
||||
Mapper.Builder builder = context.root().findTemplateBuilder(context, currentFieldName, "float");
|
||||
if (builder == null) {
|
||||
builder = MapperBuilders.floatField(currentFieldName);
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
} else if (numberType == XContentParser.NumberType.DOUBLE) {
|
||||
} else if (numberType == XContentParser.NumberType.FLOAT || numberType == XContentParser.NumberType.DOUBLE) {
|
||||
Mapper.Builder builder = context.root().findTemplateBuilder(context, currentFieldName, "double");
|
||||
if (builder == null) {
|
||||
// no templates are defined, we use float by default instead of double
|
||||
|
|
Loading…
Reference in New Issue