| 46 | // When parquet_type is INT32 or INT64, we simply write the unscaled value to the buffer. |
| 47 | template <typename DecimalType> |
| 48 | int EncodeDecimal(const DecimalType& v, int encoded_byte_size, uint8_t* buffer, |
| 49 | parquet::Type::type parquet_type) { |
| 50 | if (parquet_type == parquet::Type::FIXED_LEN_BYTE_ARRAY) { |
| 51 | return ParquetPlainEncoder::Encode(v, encoded_byte_size, buffer); |
| 52 | } else if (parquet_type == parquet::Type::BYTE_ARRAY) { |
| 53 | int decimal_size = encoded_byte_size - sizeof(int32_t); |
| 54 | memcpy(buffer, &decimal_size, sizeof(int32_t)); |
| 55 | DecimalUtil::EncodeToFixedLenByteArray(buffer + sizeof(int32_t), decimal_size, v); |
| 56 | return encoded_byte_size; |
| 57 | } else if (parquet_type == parquet::Type::INT32 || |
| 58 | parquet_type == parquet::Type::INT64) { |
| 59 | return ParquetPlainEncoder::Encode(v.value(), encoded_byte_size, buffer); |
| 60 | } |
| 61 | return -1; |
| 62 | } |
| 63 | |
| 64 | template<> |
| 65 | int Encode(const Decimal4Value& v, int encoded_byte_size, uint8_t* buffer, |