Skip to content

Commit

Permalink
GH-465: Clarify backward-compatibility rules on LIST type
Browse files Browse the repository at this point in the history
  • Loading branch information
wgtmac committed Oct 30, 2024
1 parent 4f20815 commit d9579bc
Showing 1 changed file with 19 additions and 6 deletions.
25 changes: 19 additions & 6 deletions LogicalTypes.md
Original file line number Diff line number Diff line change
Expand Up @@ -654,13 +654,18 @@ should always be determined by the following rules:

1. If the repeated field is not a group, then its type is the element type and
elements are required.
2. If the repeated field is a group with multiple fields, then its type is the
element type and elements are required.
3. If the repeated field is a group with one field and is named either `array`
or uses the `LIST`-annotated group's name with `_tuple` appended then the
repeated type is the element type and elements are required.
2. If the repeated field is a group (without `LIST` or `MAP` annotation) with
multiple fields, then its type (i.e. a multi-field Tuple) is the element
type and elements are required.
3. If the repeated field is a group (without `LIST` or `MAP` annotation) with
one field (with `required` or `optional` repetition) and is named either
`array` or uses the `LIST`-annotated group's name with `_tuple` appended,
then the repeated type is the element type and elements are required. Note
that the element type resolves to a single-field Tuple type.
4. Otherwise, the repeated field's type is the element type with the repeated
field's repetition.
field's repetition and elements are required. Note that the element type
resolves to List or Map type if the repeated field is `LIST`-annotated or
`MAP`-annotated; otherwise the element type resolves to a Tuple type.

Examples that can be interpreted using these rules:

Expand Down Expand Up @@ -691,6 +696,14 @@ optional group my_list (LIST) {
required binary str (STRING);
};
}
// List<List<Integer>> (outer list is nullable with non-null elements,
// inner list is non-null with non-null elements)
optional group my_list (LIST) {
repeated group array (LIST) {
repeated int32 array;
}
}
```

### Maps
Expand Down

0 comments on commit d9579bc

Please sign in to comment.