func TestWriteRead(t *testing.T) {
t.Run("by parquet type", func(t *testing.T) {
t.Run("int64", func(t *testing.T) {
t.Run("int go type", func(t *testing.T) {
o := struct{ Val int }{Val: 1}
s := `message test {required int64 val;}`
assert.EqualValues(t, o, writeReadOne(t, o, s))
})
t.Run("int32 go type", func(t *testing.T) {
o := struct{ Val int32 }{Val: 1}
s := `message test {required int64 val;}`
assert.EqualValues(t, o, writeReadOne(t, o, s))
})
t.Run("int16 go type", func(t *testing.T) {
o := struct{ Val int16 }{Val: 1}
s := `message test {required int64 val;}`
assert.EqualValues(t, o, writeReadOne(t, o, s))
})
t.Run("int8 go type", func(t *testing.T) {
o := struct{ Val int8 }{Val: 1}
s := `message test {required int64 val;}`
assert.EqualValues(t, o, writeReadOne(t, o, s))
})
t.Run("uint go type", func(t *testing.T) {
o := struct{ Val uint }{Val: 1}
s := `message test {required int64 val;}`
assert.EqualValues(t, o, writeReadOne(t, o, s))
})
t.Run("uint16 go type", func(t *testing.T) {
o := struct{ Val uint16 }{Val: 1}
s := `message test {required int64 val;}`
assert.EqualValues(t, o, writeReadOne(t, o, s))
})
t.Run("uint8 go type", func(t *testing.T) {
o := struct{ Val uint8 }{Val: 1}
s := `message test {required int64 val;}`
assert.EqualValues(t, o, writeReadOne(t, o, s))
})
})
t.Run("int32", func(t *testing.T) {
t.Run("int64 go type", func(t *testing.T) {
o := struct{ Val int64 }{Val: 1}
s := `message test {required int32 val;}`
assert.EqualValues(t, o, writeReadOne(t, o, s))
})
t.Run("uint64 go type", func(t *testing.T) {
o := struct{ Val uint64 }{Val: 1}
s := `message test {required int32 val;}`
assert.EqualValues(t, o, writeReadOne(t, o, s))
})
t.Run("uint32 go type", func(t *testing.T) {
o := struct{ Val uint32 }{Val: 1}
s := `message test {required int32 val;}`
assert.EqualValues(t, o, writeReadOne(t, o, s))
})
})
})
})
func writeReadOne(t *testing.T, o interface{}, schema string) interface{} {
t.Helper()
defer func() {
if r := recover(); r != nil {
t.Error(r)
}
}()
schemaDef, err := parquetschema.ParseSchemaDefinition(schema)
require.NoError(t, err)
var buf bytes.Buffer
w := NewWriter(goparquet.NewFileWriter(&buf,
goparquet.WithCompressionCodec(parquet.CompressionCodec_SNAPPY),
goparquet.WithSchemaDefinition(schemaDef),
))
err = w.Write(o)
require.NoError(t, err)
err = w.Close()
require.NoError(t, err)
fr, err := goparquet.NewFileReader(bytes.NewReader(buf.Bytes()))
require.NoError(t, err)
pr := NewReader(fr)
pr.Next()
o2val := reflect.New(reflect.TypeOf(o))
err = pr.Scan(o2val.Interface())
require.NoError(t, err)
return o2val.Elem().Interface()
}