@@ -69,14 +69,44 @@ func TypeNameToParquetType(name string, baseName string) (*parquet.Type, *parque
6969 panic (fmt .Errorf ("Unknown data type: '%s'" , name ))
7070}
7171
72- func ParquetTypeToGoReflectType (pT * parquet.Type , rT * parquet.FieldRepetitionType ) reflect.Type {
72+ func ParquetTypeToGoReflectType (pT * parquet.Type , cT * parquet. ConvertedType , rT * parquet.FieldRepetitionType ) reflect.Type {
7373 if rT == nil || * rT != parquet .FieldRepetitionType_OPTIONAL {
7474 if * pT == parquet .Type_BOOLEAN {
7575 return reflect .TypeOf (true )
7676
77+ } else if * pT == parquet .Type_INT32 && cT == nil {
78+ return reflect .TypeOf (int32 (0 ))
79+
80+ } else if * pT == parquet .Type_INT32 && * cT == parquet .ConvertedType_INT_8 {
81+ return reflect .TypeOf (int8 (0 ))
82+
83+ }else if * pT == parquet .Type_INT32 && * cT == parquet .ConvertedType_INT_16 {
84+ return reflect .TypeOf (int16 (0 ))
85+
86+ }else if * pT == parquet .Type_INT32 && * cT == parquet .ConvertedType_INT_32 {
87+ return reflect .TypeOf (int32 (0 ))
88+
89+ }else if * pT == parquet .Type_INT32 && * cT == parquet .ConvertedType_UINT_8 {
90+ return reflect .TypeOf (uint8 (0 ))
91+
92+ }else if * pT == parquet .Type_INT32 && * cT == parquet .ConvertedType_UINT_16 {
93+ return reflect .TypeOf (uint16 (0 ))
94+
95+ }else if * pT == parquet .Type_INT32 && * cT == parquet .ConvertedType_UINT_32 {
96+ return reflect .TypeOf (uint32 (0 ))
97+
7798 } else if * pT == parquet .Type_INT32 {
7899 return reflect .TypeOf (int32 (0 ))
79100
101+ }else if * pT == parquet .Type_INT64 && cT == nil {
102+ return reflect .TypeOf (int64 (0 ))
103+
104+ }else if * pT == parquet .Type_INT64 && * cT == parquet .ConvertedType_INT_64 {
105+ return reflect .TypeOf (int64 (0 ))
106+
107+ }else if * pT == parquet .Type_INT64 && * cT == parquet .ConvertedType_UINT_64 {
108+ return reflect .TypeOf (uint64 (0 ))
109+
80110 } else if * pT == parquet .Type_INT64 {
81111 return reflect .TypeOf (int64 (0 ))
82112
@@ -104,10 +134,50 @@ func ParquetTypeToGoReflectType(pT *parquet.Type, rT *parquet.FieldRepetitionTyp
104134 v := true
105135 return reflect .TypeOf (& v )
106136
137+ } else if * pT == parquet .Type_INT32 && cT == nil {
138+ v := int32 (0 )
139+ return reflect .TypeOf (& v )
140+
141+ } else if * pT == parquet .Type_INT32 && * cT == parquet .ConvertedType_INT_8 {
142+ v := int8 (0 )
143+ return reflect .TypeOf (& v )
144+
145+ } else if * pT == parquet .Type_INT32 && * cT == parquet .ConvertedType_INT_16 {
146+ v := int16 (0 )
147+ return reflect .TypeOf (& v )
148+
149+ } else if * pT == parquet .Type_INT32 && * cT == parquet .ConvertedType_INT_32 {
150+ v := int32 (0 )
151+ return reflect .TypeOf (& v )
152+
153+ } else if * pT == parquet .Type_INT32 && * cT == parquet .ConvertedType_UINT_8 {
154+ v := uint8 (0 )
155+ return reflect .TypeOf (& v )
156+
157+ } else if * pT == parquet .Type_INT32 && * cT == parquet .ConvertedType_UINT_16 {
158+ v := uint16 (0 )
159+ return reflect .TypeOf (& v )
160+
161+ } else if * pT == parquet .Type_INT32 && * cT == parquet .ConvertedType_UINT_32 {
162+ v := uint32 (0 )
163+ return reflect .TypeOf (& v )
164+
107165 } else if * pT == parquet .Type_INT32 {
108166 v := int32 (0 )
109167 return reflect .TypeOf (& v )
110168
169+ } else if * pT == parquet .Type_INT64 && cT == nil {
170+ v := int64 (0 )
171+ return reflect .TypeOf (& v )
172+
173+ } else if * pT == parquet .Type_INT64 && * cT == parquet .ConvertedType_INT_64 {
174+ v := int64 (0 )
175+ return reflect .TypeOf (& v )
176+
177+ } else if * pT == parquet .Type_INT64 && * cT == parquet .ConvertedType_UINT_64 {
178+ v := uint64 (0 )
179+ return reflect .TypeOf (& v )
180+
111181 } else if * pT == parquet .Type_INT64 {
112182 v := int64 (0 )
113183 return reflect .TypeOf (& v )
@@ -146,10 +216,14 @@ func ParquetTypeToGoType(src interface{}, pT *parquet.Type, cT *parquet.Converte
146216 return src
147217 }
148218
149- if * cT == parquet .ConvertedType_UINT_8 {
150- return uint32 (src .(int32 ))
219+ if * cT == parquet .ConvertedType_INT_8 {
220+ return int8 (src .(int32 ))
221+ } else if * cT == parquet .ConvertedType_INT_16 {
222+ return int16 (src .(int32 ))
223+ } else if * cT == parquet .ConvertedType_UINT_8 {
224+ return uint8 (src .(int32 ))
151225 } else if * cT == parquet .ConvertedType_UINT_16 {
152- return uint32 (src .(int32 ))
226+ return uint16 (src .(int32 ))
153227 } else if * cT == parquet .ConvertedType_UINT_32 {
154228 return uint32 (src .(int32 ))
155229 } else if * cT == parquet .ConvertedType_UINT_64 {
@@ -164,10 +238,14 @@ func GoTypeToParquetType(src interface{}, pT *parquet.Type, cT *parquet.Converte
164238 return src
165239 }
166240
167- if * cT == parquet .ConvertedType_UINT_8 {
168- return int32 (src .(uint32 ))
241+ if * cT == parquet .ConvertedType_INT_8 {
242+ return int32 (src .(int8 ))
243+ }else if * cT == parquet .ConvertedType_INT_16 {
244+ return int32 (src .(int16 ))
245+ } else if * cT == parquet .ConvertedType_UINT_8 {
246+ return int32 (src .(uint8 ))
169247 } else if * cT == parquet .ConvertedType_UINT_16 {
170- return int32 (src .(uint32 ))
248+ return int32 (src .(uint16 ))
171249 } else if * cT == parquet .ConvertedType_UINT_32 {
172250 return int32 (src .(uint32 ))
173251 } else if * cT == parquet .ConvertedType_UINT_64 {
@@ -221,16 +299,40 @@ func StrToParquetType(s string, pT *parquet.Type, cT *parquet.ConvertedType, len
221299 if * cT == parquet .ConvertedType_UTF8 {
222300 return s
223301
224- } else if * cT == parquet .ConvertedType_INT_8 || * cT == parquet .ConvertedType_INT_16 || * cT == parquet .ConvertedType_INT_32 ||
225- * cT == parquet .ConvertedType_DATE || * cT == parquet .ConvertedType_TIME_MILLIS {
302+ } else if * cT == parquet .ConvertedType_INT_8 {
303+ var v int8
304+ fmt .Sscanf (s , "%d" , & v )
305+ return int32 (v )
306+
307+ } else if * cT == parquet .ConvertedType_INT_16 {
308+ var v int16
309+ fmt .Sscanf (s , "%d" , & v )
310+ return int32 (v )
311+
312+ } else if * cT == parquet .ConvertedType_INT_32 {
226313 var v int32
227314 fmt .Sscanf (s , "%d" , & v )
228- return v
315+ return int32 ( v )
229316
230- } else if * cT == parquet .ConvertedType_UINT_8 || * cT == parquet .ConvertedType_UINT_16 || * cT == parquet .ConvertedType_UINT_32 {
231- var vt uint32
232- fmt .Sscanf (s , "%d" , & vt )
233- return int32 (vt )
317+ } else if * cT == parquet .ConvertedType_UINT_8 {
318+ var v uint8
319+ fmt .Sscanf (s , "%d" , & v )
320+ return int32 (v )
321+
322+ } else if * cT == parquet .ConvertedType_UINT_16 {
323+ var v uint16
324+ fmt .Sscanf (s , "%d" , & v )
325+ return int32 (v )
326+
327+ } else if * cT == parquet .ConvertedType_UINT_32 {
328+ var v uint32
329+ fmt .Sscanf (s , "%d" , & v )
330+ return int32 (v )
331+
332+ } else if * cT == parquet .ConvertedType_DATE || * cT == parquet .ConvertedType_TIME_MILLIS {
333+ var v int32
334+ fmt .Sscanf (s , "%d" , & v )
335+ return int32 (v )
234336
235337 } else if * cT == parquet .ConvertedType_UINT_64 {
236338 var vt uint64
0 commit comments