Skip to content
This repository has been archived by the owner on Dec 8, 2021. It is now read-only.

Commit

Permalink
fix a error and add more test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
glorv committed Nov 3, 2020
1 parent b3d977d commit 3d7ced8
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 3 deletions.
8 changes: 6 additions & 2 deletions lightning/mydump/parquet_parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,8 +223,12 @@ func setDatumByInt(d *types.Datum, v int64, meta *parquet.SchemaElement) {
for i := 0; i < int(*meta.Scale); i++ {
scale *= 10
}
fmtStr := fmt.Sprintf("%%d.%%0%dd", *meta.Scale)
val := fmt.Sprintf(fmtStr, v/scale, abs(v%scale))
var prefix string
if v < 0 && abs(v) < scale {
prefix = "-"
}

val := fmt.Sprintf("%s%d.%0*d", prefix, v/scale, *meta.Scale, abs(v%scale))
d.SetString(val, "")
case parquet.ConvertedType_DATE:
dateStr := time.Unix(v*86400, 0).Format("2006-01-02")
Expand Down
44 changes: 43 additions & 1 deletion lightning/mydump/parquet_parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ func (s testParquetParserSuite) TestParquetVariousTypes(c *C) {
Decimal3 int64 `parquet:"name=decimal3, type=DECIMAL, scale=2, precision=18, basetype=INT64"`
Decimal4 string `parquet:"name=decimal4, type=DECIMAL, scale=2, precision=10, basetype=FIXED_LEN_BYTE_ARRAY, length=12"`
Decimal5 string `parquet:"name=decimal5, type=DECIMAL, scale=2, precision=20, basetype=BYTE_ARRAY"`
Decimal6 int32 `parquet:"name=decimal6, type=DECIMAL, scale=4, precision=4, basetype=INT32"`
}

dir := c.MkDir()
Expand All @@ -116,6 +117,7 @@ func (s testParquetParserSuite) TestParquetVariousTypes(c *C) {
Decimal3: 123456789012345678, //1234567890123456.78
Decimal4: "-12345678.09",
Decimal5: "-1234567890123456.78",
Decimal6: -1, // -0.0001
}
c.Assert(writer.Write(v), IsNil)
c.Assert(writer.WriteStop(), IsNil)
Expand All @@ -129,7 +131,7 @@ func (s testParquetParserSuite) TestParquetVariousTypes(c *C) {
c.Assert(err, IsNil)
defer reader.Close()

c.Assert(len(reader.columns), Equals, 10)
c.Assert(len(reader.columns), Equals, 11)

c.Assert(reader.ReadRow(), IsNil)
c.Assert(reader.lastRow.Row, DeepEquals, []types.Datum{
Expand All @@ -143,5 +145,45 @@ func (s testParquetParserSuite) TestParquetVariousTypes(c *C) {
types.NewCollationStringDatum("1234567890123456.78", "", 0),
types.NewCollationStringDatum("-12345678.09", "", 0),
types.NewCollationStringDatum("-1234567890123456.78", "", 0),
types.NewCollationStringDatum("-0.0001", "", 0),
})

type TestDecimal struct {
Decimal1 int32 `parquet:"name=decimal1, type=DECIMAL, scale=3, precision=5, basetype=INT32"`
}

cases := [][]interface{}{
{int32(0), "0.000"},
{int32(1000), "1.000"},
{int32(-1000), "-1.000"},
{int32(999), "0.999"},
{int32(-999), "-0.999"},
}

fileName := "test.02.parquet"
testPath = filepath.Join(dir, fileName)
pf, err = local.NewLocalFileWriter(testPath)
td := &TestDecimal{}
c.Assert(err, IsNil)
writer, err = writer2.NewParquetWriter(pf, td, 2)
c.Assert(err, IsNil)
for _, testCase := range cases {
td.Decimal1 = testCase[0].(int32)
c.Assert(writer.Write(td), IsNil)
}
c.Assert(writer.WriteStop(), IsNil)
c.Assert(pf.Close(), IsNil)

r, err = store.Open(context.TODO(), fileName)
c.Assert(err, IsNil)
reader, err = NewParquetParser(context.TODO(), store, r, fileName)
c.Assert(err, IsNil)
defer reader.Close()

for _, testCase := range cases {
c.Assert(reader.ReadRow(), IsNil)
c.Assert(reader.lastRow.Row, DeepEquals, []types.Datum{
types.NewCollationStringDatum(testCase[1].(string), "", 0),
})
}
}

0 comments on commit 3d7ced8

Please sign in to comment.