You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@arrow.apache.org by "Laurent Querel (Jira)" <ji...@apache.org> on 2022/11/07 20:40:00 UTC

[jira] [Created] (ARROW-18274) [Go] Sparse union of structs is buggy

Laurent Querel created ARROW-18274:
--------------------------------------

             Summary: [Go] Sparse union of structs is buggy
                 Key: ARROW-18274
                 URL: https://issues.apache.org/jira/browse/ARROW-18274
             Project: Apache Arrow
          Issue Type: Bug
          Components: Go
    Affects Versions: 10.0.0
            Reporter: Laurent Querel


Union of structs is currently buggy in V10. See the following example.

 
{code:go}
dt1 := arrow.SparseUnionOf([]arrow.Field{
{Name: "c", Type: &arrow.DictionaryType
{ IndexType: arrow.PrimitiveTypes.Uint16, ValueType: arrow.BinaryTypes.String, Ordered: false, }}
,
}, []arrow.UnionTypeCode{0})
dt2 := arrow.SparseUnionOf([]arrow.Field
{ \{Name: "a", Type: dt1}
,
}, []arrow.UnionTypeCode{0})
pool := memory.NewGoAllocator()
array := array.NewSparseUnionBuilder(pool, dt2) {code}
 

The created array is unusable because the memo table of the dictionary builder (field 'c') is nil.

 

When I replace the struct by a second union (so 2 nested union), the dictionary builder is properly initialized.

First analysis:
 - The `NewSparseUnionBuilder` calls the builders for each variant and also calls defer builder.Release. 
 - The Struct Release method calls the Release methods of every field even if the internal counter is not 0, so the Release method of the second union is called followed by the Release method of the dictionary. 

This bug doesn't happen with 2 nested unions as the internal counter is properly tested.

In the first place I don't understand why the Release method of each variant is call just after the creation of the Union builder. I also don't understand why the Release method of the Struct calls the Release method of each field independently of the value of the internal counter.

Any idea?



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