diff --git a/internal/encoding/block/from_orc.go b/internal/encoding/block/from_orc.go index e65e42db..a7e332c9 100644 --- a/internal/encoding/block/from_orc.go +++ b/internal/encoding/block/from_orc.go @@ -137,15 +137,21 @@ func convertToJSON(value interface{}) (string, bool) { return string(json.RawMessage(b)), true } -// convertToString converst value to string because currently all the keys in Badger are stored in the form of string before hashing to the byte array +// convertToString converts value to string because currently all the keys in Badger are stored in the form of string before hashing to the byte array func convertToString(value interface{}) (string, bool) { - v, ok := value.(string) - if ok { - return v, true - } - valueInt, ok := value.(int64) - if ok { - return strconv.FormatInt(valueInt, 10), true + switch value.(type) { + case string: + return value.(string), true + case int64: + return strconv.FormatInt(value.(int64), 10), true + case int32: + return strconv.FormatInt(int64(value.(int32)), 10), true + case []uint8: + return string(value.([]uint8)), true + case float32: + return strconv.FormatFloat(float64(value.(float32)), 'E', -1, 64), true + case float64: + return strconv.FormatFloat(value.(float64), 'E', -1, 64), true } return "", false diff --git a/internal/encoding/block/from_parquet_test.go b/internal/encoding/block/from_parquet_test.go index 55e29472..a3d16079 100644 --- a/internal/encoding/block/from_parquet_test.go +++ b/internal/encoding/block/from_parquet_test.go @@ -18,4 +18,16 @@ func TestFromParquet_Nested(t *testing.T) { b, err := FromParquetBy(o, "foo", nil, apply) assert.NoError(t, err) assert.Equal(t, 10000, len(b)) + + b, err = FromParquetBy(o, "bar", nil, apply) + assert.NoError(t, err) + assert.Equal(t, 10000, len(b)) + + b, err = FromParquetBy(o, "foofoo", nil, apply) + assert.NoError(t, err) + assert.Equal(t, 1, len(b)) + + b, err = FromParquetBy(o, "barbar", nil, apply) + assert.NoError(t, err) + assert.Equal(t, 10000, len(b)) } \ No newline at end of file