@@ -49,7 +49,7 @@ func init() {
49
49
Records ["decimal128" ] = makeDecimal128sRecords ()
50
50
Records ["maps" ] = makeMapsRecords ()
51
51
Records ["extension" ] = makeExtensionRecords ()
52
- // Records["union"] = makeUnionRecords()
52
+ Records ["union" ] = makeUnionRecords ()
53
53
54
54
for k := range Records {
55
55
RecordNames = append (RecordNames , k )
@@ -935,6 +935,68 @@ func makeExtensionRecords() []arrow.Record {
935
935
return recs
936
936
}
937
937
938
+ func makeUnionRecords () []arrow.Record {
939
+ mem := memory .NewGoAllocator ()
940
+
941
+ unionFields := []arrow.Field {
942
+ {Name : "u0" , Type : arrow .PrimitiveTypes .Int32 , Nullable : true },
943
+ {Name : "u1" , Type : arrow .PrimitiveTypes .Uint8 , Nullable : true },
944
+ }
945
+
946
+ typeCodes := []arrow.UnionTypeCode {5 , 10 }
947
+ sparseType := arrow .SparseUnionOf (unionFields , typeCodes )
948
+ denseType := arrow .DenseUnionOf (unionFields , typeCodes )
949
+
950
+ schema := arrow .NewSchema ([]arrow.Field {
951
+ {Name : "sparse" , Type : sparseType , Nullable : true },
952
+ {Name : "dense" , Type : denseType , Nullable : true },
953
+ }, nil )
954
+
955
+ sparseChildren := make ([]arrow.Array , 4 )
956
+ denseChildren := make ([]arrow.Array , 4 )
957
+
958
+ const length = 7
959
+
960
+ typeIDsBuffer := memory .NewBufferBytes (arrow .Uint8Traits .CastToBytes ([]uint8 {5 , 10 , 5 , 5 , 10 , 10 , 5 }))
961
+ sparseChildren [0 ] = arrayOf (mem , []int32 {0 , 1 , 2 , 3 , 4 , 5 , 6 },
962
+ []bool {true , true , true , false , true , true , true })
963
+ defer sparseChildren [0 ].Release ()
964
+ sparseChildren [1 ] = arrayOf (mem , []uint8 {10 , 11 , 12 , 13 , 14 , 15 , 16 },
965
+ nil )
966
+ defer sparseChildren [1 ].Release ()
967
+ sparseChildren [2 ] = arrayOf (mem , []int32 {0 , - 1 , - 2 , - 3 , - 4 , - 5 , - 6 },
968
+ []bool {true , true , true , true , true , true , false })
969
+ defer sparseChildren [2 ].Release ()
970
+ sparseChildren [3 ] = arrayOf (mem , []uint8 {100 , 101 , 102 , 103 , 104 , 105 , 106 },
971
+ nil )
972
+ defer sparseChildren [3 ].Release ()
973
+
974
+ denseChildren [0 ] = arrayOf (mem , []int32 {0 , 2 , 3 , 7 }, []bool {true , false , true , true })
975
+ defer denseChildren [0 ].Release ()
976
+ denseChildren [1 ] = arrayOf (mem , []uint8 {11 , 14 , 15 }, nil )
977
+ defer denseChildren [1 ].Release ()
978
+ denseChildren [2 ] = arrayOf (mem , []int32 {0 , - 2 , - 3 , - 7 }, []bool {false , true , true , false })
979
+ defer denseChildren [2 ].Release ()
980
+ denseChildren [3 ] = arrayOf (mem , []uint8 {101 , 104 , 105 }, nil )
981
+ defer denseChildren [3 ].Release ()
982
+
983
+ offsetsBuffer := memory .NewBufferBytes (arrow .Int32Traits .CastToBytes ([]int32 {0 , 0 , 1 , 2 , 1 , 2 , 3 }))
984
+ sparse1 := array .NewSparseUnion (sparseType , length , sparseChildren [:2 ], typeIDsBuffer , 0 )
985
+ dense1 := array .NewDenseUnion (denseType , length , denseChildren [:2 ], typeIDsBuffer , offsetsBuffer , 0 )
986
+
987
+ sparse2 := array .NewSparseUnion (sparseType , length , sparseChildren [2 :], typeIDsBuffer , 0 )
988
+ dense2 := array .NewDenseUnion (denseType , length , denseChildren [2 :], typeIDsBuffer , offsetsBuffer , 0 )
989
+
990
+ defer sparse1 .Release ()
991
+ defer dense1 .Release ()
992
+ defer sparse2 .Release ()
993
+ defer dense2 .Release ()
994
+
995
+ return []arrow.Record {
996
+ array .NewRecord (schema , []arrow.Array {sparse1 , dense1 }, - 1 ),
997
+ array .NewRecord (schema , []arrow.Array {sparse2 , dense2 }, - 1 )}
998
+ }
999
+
938
1000
func extArray (mem memory.Allocator , dt arrow.ExtensionType , a interface {}, valids []bool ) arrow.Array {
939
1001
var storage arrow.Array
940
1002
switch st := dt .StorageType ().(type ) {
0 commit comments