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

Christophe Le Saec updated AVRO-3780:
-------------------------------------
    Description: 
Currently, fixed type almost could not be used to represent decimal logical 
type.

What am I trying to do is to parse such a schema:

{code:json}
{
    "type": "record",
    "name": "recordWithDecimal",
    "fields": [
        {
            "name": "decimal",
            "type":   {
                 "type": "fixed",    "name": "nestedFixed",       "size": 8,   
"logicalType": "decimal",     "precision": 4
            }
         }
    ],
}
{code}


It must be working if we strictly follow the avro specs. It does not work on 
master - you can see it through the test I supplied in the attached PR.

Interestingly, such a thing works with bytes, so following schema works great:

{code:json}
{
    "type": "record",
    "name": "recordWithDecimal",
    "fields": [
    {
        "name": "decimal",
        "type":
        {   "type": "bytes",   "name": "nestedFixed",      "logicalType": 
"decimal",     "precision": 4  }
    }
    ],
}
{code}



And the only existing workaround is to extract decimal attributes to the field 
declaration, like so:


{code:json}
{
    "name": "decimal",
    "type":
        {      "type": "fixed",     "name": "nestedFixed"    },
     "size": 8,
     "logicalType": "decimal",
     "precision": 4
}
{code}


Such a workaround should not be treated as an acceptable variant as it does not 
follow avro specification at all(I think, such a syntax is an extension, 
introduced in the Rust crate - correct me if I'm wrong).
 

I haven't investigated the roots yet, so any thoughts are welcome before I do 
it myself.

 

  was:
Currently, fixed type almost could not be used to represent decimal logical 
type.

What am I trying to do is to parse such a schema:

```

        {
          "type": "record",
          "name": "recordWithDecimal",
          "fields": [

{
              "name": "decimal",
              "type":

{                 "type": "fixed",                 "name": "nestedFixed",       
          "size": 8,                 "logicalType": "decimal",                 
"precision": 4               }

            }
          ],
        }

```

It must be working if we strictly follow the avro specs. It does not work on 
master - you can see it through the test I supplied in the attached PR.

Interestingly, such a thing works with bytes, so following schema works great:

```

        {
          "type": "record",
          "name": "recordWithDecimal",
          "fields": [
            {
              "name": "decimal",
              "type":

{                 "type": "bytes",                 "name": "nestedFixed",       
          "logicalType": "decimal",                 "precision": 4              
 }

            }
          ],
        }

```

 

And the only existing workaround is to extract decimal attributes to the field 
declaration, like so:

```

{
              "name": "decimal",
              "type":

{                 "type": "fixed",                 "name": "nestedFixed"        
       }

,
              "size": 8,
              "logicalType": "decimal",
              "precision": 4
}
```

Such a workaround should not be treated as an acceptable variant as it does not 
follow avro specification at all(I think, such a syntax is an extension, 
introduced in the Rust crate - correct me if I'm wrong).

 

I haven't investigated the roots yet, so any thoughts are welcome before I do 
it myself.

 


> [Rust] Bug: decimal logical type usage through Fixed
> ----------------------------------------------------
>
>                 Key: AVRO-3780
>                 URL: https://issues.apache.org/jira/browse/AVRO-3780
>             Project: Apache Avro
>          Issue Type: Bug
>          Components: rust
>            Reporter: Fedor Telnov
>            Priority: Minor
>
> Currently, fixed type almost could not be used to represent decimal logical 
> type.
> What am I trying to do is to parse such a schema:
> {code:json}
> {
>     "type": "record",
>     "name": "recordWithDecimal",
>     "fields": [
>         {
>             "name": "decimal",
>             "type":   {
>                  "type": "fixed",    "name": "nestedFixed",       "size": 8,  
>  "logicalType": "decimal",     "precision": 4
>             }
>          }
>     ],
> }
> {code}
> It must be working if we strictly follow the avro specs. It does not work on 
> master - you can see it through the test I supplied in the attached PR.
> Interestingly, such a thing works with bytes, so following schema works great:
> {code:json}
> {
>     "type": "record",
>     "name": "recordWithDecimal",
>     "fields": [
>     {
>         "name": "decimal",
>         "type":
>         {   "type": "bytes",   "name": "nestedFixed",      "logicalType": 
> "decimal",     "precision": 4  }
>     }
>     ],
> }
> {code}
> And the only existing workaround is to extract decimal attributes to the 
> field declaration, like so:
> {code:json}
> {
>     "name": "decimal",
>     "type":
>         {      "type": "fixed",     "name": "nestedFixed"    },
>      "size": 8,
>      "logicalType": "decimal",
>      "precision": 4
> }
> {code}
> Such a workaround should not be treated as an acceptable variant as it does 
> not follow avro specification at all(I think, such a syntax is an extension, 
> introduced in the Rust crate - correct me if I'm wrong).
>  
> I haven't investigated the roots yet, so any thoughts are welcome before I do 
> it myself.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to