[ 
https://issues.apache.org/jira/browse/CALCITE-6832?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17926967#comment-17926967
 ] 

Stamatis Zampetakis commented on CALCITE-6832:
----------------------------------------------

It seems that the redundancy started from 
[ca9f0053611f54d92852a5c85e369a98bd3f91e7|https://github.com/apache/calcite/commit/ca9f0053611f54d92852a5c85e369a98bd3f91e7]
 which landed in 1.27.0 release.

> Redundant fields/nullable entries in STRUCT serialization to JSON
> -----------------------------------------------------------------
>
>                 Key: CALCITE-6832
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6832
>             Project: Calcite
>          Issue Type: Bug
>    Affects Versions: 1.38.0
>            Reporter: Stamatis Zampetakis
>            Assignee: Stamatis Zampetakis
>            Priority: Major
>             Fix For: 1.39.0
>
>
> The JSON serialization of a {{RelDatatypeField}} of type STRUCT contains 
> redundant fields and nullable entries along with unnecessary nesting.
> Consider for example, a field "address" of type STRUCT composed from the 
> following fields.
> {code:java}
> RelDataType type = typeFactory.builder()
>         .add("street", SqlTypeName.VARCHAR, 50)
>         .add("number", SqlTypeName.INTEGER)
>         .add("building", SqlTypeName.VARCHAR, 20).nullable(true)
>         .build();
>     RelDataTypeField address =
>         new RelDataTypeFieldImpl("address", 0, type);
> {code}
> At the moment, the JSON serialization for the field "address" is shown below.
> {code:json}
> {
>   "fields": {
>     "fields": [
>       {
>         "type": "VARCHAR",
>         "nullable": false,
>         "precision": 50,
>         "name": "street"
>       },
>       {
>         "type": "INTEGER",
>         "nullable": false,
>         "name": "number"
>       },
>       {
>         "type": "VARCHAR",
>         "nullable": true,
>         "precision": 20,
>         "name": "building"
>       }
>     ],
>     "nullable": false
>   },
>   "nullable": false,
>   "name": "address"
> }
> {code}
> Note that the "fields" key appears twice and there is an unnecessary wrapping 
> of a JSON array (inner "fields") inside a JSON object (outer "fields"). The 
> outer "fields" object cannot have more entries so it doesn't offer anything.
> Moreover, observe that there are two {{"nullable":false}} entries and both 
> reflect the nullability of the "address" field.
> The redundancy leads to wasted space and more convoluted representation that 
> is hard to follow especially when there are nested STRUCTS.
> The same information could be represented using the following JSON 
> serialization:
> {code:json}
> {
>   "fields": [
>     {
>       "type": "VARCHAR",
>       "nullable": false,
>       "precision": 50,
>       "name": "street"
>     },
>     {
>       "type": "INTEGER",
>       "nullable": false,
>       "name": "number"
>     },
>     {
>       "type": "VARCHAR",
>       "nullable": true,
>       "precision": 20,
>       "name": "building"
>     }
>   ],
>   "nullable": false,
>   "name": "address"
> }
> {code}



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

Reply via email to