19 #include <arrow/util/decimal.h>
22 namespace foreign_storage {
23 template <
typename V,
typename T,
typename NullType = V>
28 const parquet::ColumnDescriptor* parquet_column_descriptor)
31 parquet_column_descriptor)
36 int8_t* omnisci_data_bytes)
override {
37 const auto& parquet_data_value =
reinterpret_cast<const T*
>(parquet_data_bytes)[0];
38 auto& omnisci_data_value =
reinterpret_cast<V*
>(omnisci_data_bytes)[0];
39 omnisci_data_value =
getDecimal(parquet_data_value);
45 const auto& parquet_data_value =
reinterpret_cast<const T*
>(parquet_data)[j];
46 int64_t omnisci_data_value =
getDecimal(parquet_data_value);
51 int64_t
getDecimal(
const int32_t& parquet_data_value)
const {
52 return parquet_data_value;
55 int64_t
getDecimal(
const int64_t& parquet_data_value)
const {
56 return parquet_data_value;
59 int64_t
getDecimal(
const parquet::FixedLenByteArray& parquet_data_value)
const {
64 int64_t
getDecimal(
const parquet::ByteArray& parquet_data_value)
const {
72 const int byte_array_size)
const {
73 auto result = arrow::Decimal128::FromBigEndian(byte_array, byte_array_size);
75 auto& decimal =
result.ValueOrDie();
76 return static_cast<int64_t
>(decimal);
int64_t getDecimal(const int64_t &parquet_data_value) const
int64_t convertDecimalByteArrayToInt(const uint8_t *byte_array, const int byte_array_size) const
int64_t getDecimal(const int32_t &parquet_data_value) const
bool encodingIsIdentityForSameTypes() const override
void encodeAndCopy(const int8_t *parquet_data_bytes, int8_t *omnisci_data_bytes) override
An AbstractBuffer is a unit of data management for a data manager.
specifies the content in-memory of a row in the column metadata table
int64_t getDecimal(const parquet::ByteArray &parquet_data_value) const
const DecimalOverflowValidator decimal_overflow_validator_
void validate(const int8_t *parquet_data, const int64_t j, const SQLTypeInfo &column_type) const override
int64_t getDecimal(const parquet::FixedLenByteArray &parquet_data_value) const
ParquetDecimalEncoder(Data_Namespace::AbstractBuffer *buffer, const ColumnDescriptor *column_desciptor, const parquet::ColumnDescriptor *parquet_column_descriptor)
void validate(T value) const
const size_t parquet_column_type_length_