[
https://issues.apache.org/jira/browse/AVRO-2099?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Thiruvalluvan M. G. updated AVRO-2099:
--------------------------------------
Component/s: spec
> Decimal precision is ignored
> ----------------------------
>
> Key: AVRO-2099
> URL: https://issues.apache.org/jira/browse/AVRO-2099
> Project: Apache Avro
> Issue Type: Improvement
> Components: spec
> Reporter: Kornel Kiełczewski
> Priority: Major
>
> According to the documentation
> https://avro.apache.org/docs/1.8.1/spec.html#Decimal
> {quote}
> The decimal logical type represents an arbitrary-precision signed decimal
> number of the form unscaled × 10-scale.
> {quote}
> Then in the schema we might have an entry like:
> {code}
> {
> "type": "bytes",
> "logicalType": "decimal",
> "precision": 4,
> "scale": 2
> }
> {code}
> However, in the java deserialization I see that the precision is ignored:
> https://github.com/apache/avro/blob/master/lang/java/avro/src/main/java/org/apache/avro/Conversions.java#L79
> {code}
> @Override
> public BigDecimal fromBytes(ByteBuffer value, Schema schema, LogicalType
> type) {
> int scale = ((LogicalTypes.Decimal) type).getScale();
> // always copy the bytes out because BigInteger has no offset/length
> ctor
> byte[] bytes = new byte[value.remaining()];
> value.get(bytes);
> return new BigDecimal(new BigInteger(bytes), scale);
> }
> {code}
> The logical type definition in the java api requires the precision to be set:
> https://github.com/apache/avro/blob/master/lang/java/avro/src/main/java/org/apache/avro/LogicalTypes.java#L116
> {code}
> /** Create a Decimal LogicalType with the given precision and scale */
> public static Decimal decimal(int precision, int scale) {
> return new Decimal(precision, scale);
> }
> {code}
> Is this a feature, that we allow arbitrary precision? If so, why do we have
> the precision in the API and schema, if it's ignored?
> Maybe that's some java specific issue?
> Thanks for any hints.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)