34 template <
typename V,
typename T, T conversion_denominator>
40 const parquet::ColumnDescriptor* parquet_column_descriptor)
43 parquet_column_descriptor) {
44 CHECK(parquet_column_descriptor->logical_type()->is_timestamp());
48 int8_t* omnisci_data_bytes)
override {
49 const auto& parquet_data_value =
reinterpret_cast<const T*
>(parquet_data_bytes)[0];
50 auto& omnisci_data_value =
reinterpret_cast<V*
>(omnisci_data_bytes)[0];
51 omnisci_data_value =
convert(parquet_data_value);
54 void validate(std::shared_ptr<parquet::Statistics> stats,
57 auto [unencoded_stats_min, unencoded_stats_max] =
61 unencoded_stats_max,
convert(unencoded_stats_max), column_type);
63 unencoded_stats_min,
convert(unencoded_stats_min), column_type);
64 }
else if (column_type.
is_date()) {
74 T quotient = value / conversion_denominator;
75 return value < 0 && (value % conversion_denominator != 0) ? quotient - 1 : quotient;
void validate(std::shared_ptr< parquet::Statistics > stats, const SQLTypeInfo &column_type) const override
ParquetTimestampEncoder(Data_Namespace::AbstractBuffer *buffer, const ColumnDescriptor *column_desciptor, const parquet::ColumnDescriptor *parquet_column_descriptor)
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
static void validateValue(const D &data_value, const SQLTypeInfo &column_type)
T convert(const T &value) const
static void validateValue(const D &data_value, const D &display_data_value, const SQLTypeInfo &column_type)
std::pair< T, T > getUnencodedStats(std::shared_ptr< parquet::Statistics > stats) const
bool is_timestamp() const