[ 
https://issues.apache.org/jira/browse/AVRO-3254?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated AVRO-3254:
---------------------------------
    Labels: pull-request-available  (was: )

> .NET - Automatically scale AvroDecimal values when serializing
> --------------------------------------------------------------
>
>                 Key: AVRO-3254
>                 URL: https://issues.apache.org/jira/browse/AVRO-3254
>             Project: Apache Avro
>          Issue Type: Improvement
>          Components: csharp
>            Reporter: Nathan Daniels
>            Priority: Minor
>              Labels: pull-request-available
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> *Problem*
> When serializing an {{{}AvroDecimal{}}}, the Decimal class's 
> {{ConvertToBaseValue}} method will throw an exception if the scale of the 
> decimal does not exactly match the scale defined in the schema.
> The exception goes something like
> `{{{}The decimal value has a scale of \{scale} which cannot be encoded 
> against a logical 'decimal' with a scale of \{logicalScale}{{}}}}`
> I feel this is far too restrictive and unintuitive from a usability 
> perspective.  For example, it is not possible to serialize the c# decimal 
> 1.0m into a schema field of precision 20 and scale 2, because 1.0 has a 
> "scale" of 1.  Instead, the user must force the decimal to be {{1.00m}} if 
> they want to serialize despite the fact that 1.0 and 1.00 are the same exact 
> real number.  Now the user needs to be aware of the scale defined in the 
> schema before attempting to serialize.
> *Solution?*
> I propose the {{Decimal}} and {{AvroDecimal}} classes be smart enough to 
> re-scale a value into the scale specified in the schema if doing so would not 
> result in data loss.  It is relatively trivial operation to do so, and would 
> make using {{AvroDecimal}} much easier.
> I will open a PR with my proposed improvement, but essentially the 
> {{Decimal}} class will convert the {{AvroDecimal}} to the desired scale prior 
> to serialization, and continue to throw the exception if doing so would 
> result in data loss.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to