MCPcopy Create free account
hub / github.com/cloudquery/cloudquery / reverseTransformArray

Function reverseTransformArray

plugins/destination/duckdb/client/read.go:97–194  ·  view source on GitHub ↗
(dt arrow.DataType, arr arrow.Array)

Source from the content-addressed store, hash-verified

95}
96
97func reverseTransformArray(dt arrow.DataType, arr arrow.Array) arrow.Array {
98 if arrow.TypeEqual(dt, arr.DataType()) {
99 return arr
100 }
101
102 switch dt := dt.(type) {
103 case *types.UUIDType:
104 return array.NewExtensionArrayWithStorage(dt, arr.(*array.FixedSizeBinary))
105 case *types.InetType, *types.MACType:
106 return reverseTransformFromString(dt, arr.(*array.String))
107 case *arrow.Uint16Type:
108 return reverseTransformUint16(arr.(*array.Uint32))
109 case *arrow.Uint8Type:
110 return reverseTransformUint8(arr.(*array.Uint32))
111 case *arrow.TimestampType:
112 return transformTimestamp(dt, arr.(*array.Timestamp))
113 case *arrow.Date32Type:
114 // We save date types as Timestamp
115 return reverseTransformDate32(arr.(*array.Timestamp))
116 case *arrow.Date64Type:
117 // We save date types as Timestamp
118 return reverseTransformDate64(arr.(*array.Timestamp))
119 case *arrow.StructType:
120 if sarr, ok := arr.(*array.Binary); ok {
121 return reverseTransformStruct(dt, sarr)
122 }
123
124 arr := arr.(*array.Struct)
125 children := make([]arrow.ArrayData, arr.NumField())
126 for i := range children {
127 // struct fields can be odd when read from parquet, but the data is intact
128 child := array.MakeFromData(arr.Data().Children()[i])
129 children[i] = reverseTransformArray(dt.Field(i).Type, child).Data()
130 }
131
132 return array.NewStructData(array.NewData(
133 dt, arr.Len(),
134 arr.Data().Buffers(),
135 children,
136 arr.NullN(),
137 0, // we use 0 as offset for struct arrays, as the child arrays would already be sliced properly
138 ))
139 case arrow.ListLikeType: // also handles maps
140 // Key list columns are stored as varchar, so they come back as strings.
141 if sarr, ok := arr.(*array.String); ok {
142 return reverseTransformFromString(dt, sarr)
143 }
144 if mapdt, ok := dt.(*arrow.MapType); ok {
145 if sarr, ok := arr.(*array.Binary); ok {
146 return reverseTransformMap(mapdt, sarr)
147 }
148 }
149
150 return array.MakeFromData(array.NewData(
151 dt, arr.Len(),
152 arr.Data().Buffers(),
153 []arrow.ArrayData{reverseTransformArray(dt.Elem(), arr.(array.ListLike).ListValues()).Data()},
154 arr.NullN(),

Callers 1

reverseTransformRecordFunction · 0.85

Calls 10

reverseTransformUint16Function · 0.85
reverseTransformUint8Function · 0.85
transformTimestampFunction · 0.85
reverseTransformDate32Function · 0.85
reverseTransformDate64Function · 0.85
reverseTransformStructFunction · 0.85
reverseTransformMapFunction · 0.85
AppendMethod · 0.80
ValueMethod · 0.65

Tested by

no test coverage detected