Skip to content
This repository has been archived by the owner on Feb 18, 2024. It is now read-only.

Parquet: add as_any and null_count to dyn Statistics #743

Merged
merged 1 commit into from
Jan 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/io/parquet/read/statistics/binary.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use std::any::Any;
use std::convert::TryFrom;

use crate::datatypes::DataType;
Expand All @@ -20,6 +21,14 @@ impl Statistics for BinaryStatistics {
fn data_type(&self) -> &DataType {
&DataType::Binary
}

fn as_any(&self) -> &dyn Any {
self
}

fn null_count(&self) -> Option<i64> {
self.null_count
}
}

impl From<&ParquetByteArrayStatistics> for BinaryStatistics {
Expand All @@ -45,6 +54,14 @@ impl Statistics for Utf8Statistics {
fn data_type(&self) -> &DataType {
&DataType::Utf8
}

fn as_any(&self) -> &dyn Any {
self
}

fn null_count(&self) -> Option<i64> {
self.null_count
}
}

impl TryFrom<&ParquetByteArrayStatistics> for Utf8Statistics {
Expand Down
9 changes: 9 additions & 0 deletions src/io/parquet/read/statistics/boolean.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use crate::datatypes::DataType;
use parquet2::statistics::BooleanStatistics as ParquetBooleanStatistics;
use std::any::Any;

use super::Statistics;

Expand All @@ -15,6 +16,14 @@ impl Statistics for BooleanStatistics {
fn data_type(&self) -> &DataType {
&DataType::Boolean
}

fn as_any(&self) -> &dyn Any {
self
}

fn null_count(&self) -> Option<i64> {
self.null_count
}
}

impl From<&ParquetBooleanStatistics> for BooleanStatistics {
Expand Down
9 changes: 9 additions & 0 deletions src/io/parquet/read/statistics/fixlen.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use std::any::Any;
use std::convert::{TryFrom, TryInto};

use super::super::schema;
Expand Down Expand Up @@ -27,6 +28,14 @@ impl Statistics for FixedLenStatistics {
fn data_type(&self) -> &DataType {
&self.data_type
}

fn as_any(&self) -> &dyn Any {
self
}

fn null_count(&self) -> Option<i64> {
self.null_count
}
}

impl From<&ParquetFixedLenStatistics> for FixedLenStatistics {
Expand Down
7 changes: 7 additions & 0 deletions src/io/parquet/read/statistics/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use crate::error::ArrowError;
use parquet2::schema::types::PhysicalType;
use parquet2::statistics::PrimitiveStatistics as ParquetPrimitiveStatistics;
use parquet2::statistics::Statistics as ParquetStatistics;
use std::any::Any;

use crate::error::Result;

Expand All @@ -20,6 +21,12 @@ pub use fixlen::*;
pub trait Statistics: std::fmt::Debug {
/// returns the [`DataType`] of the statistics.
fn data_type(&self) -> &DataType;

/// Returns `dyn Any` can used to downcast to a physical type.
fn as_any(&self) -> &dyn Any;

/// Return the null count statistic
fn null_count(&self) -> Option<i64>;
}

impl PartialEq for &dyn Statistics {
Expand Down
9 changes: 9 additions & 0 deletions src/io/parquet/read/statistics/primitive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use crate::{datatypes::DataType, types::NativeType};
use parquet2::schema::types::ParquetType;
use parquet2::statistics::PrimitiveStatistics as ParquetPrimitiveStatistics;
use parquet2::types::NativeType as ParquetNativeType;
use std::any::Any;

use super::super::schema;
use super::Statistics;
Expand All @@ -20,6 +21,14 @@ impl<T: NativeType> Statistics for PrimitiveStatistics<T> {
fn data_type(&self) -> &DataType {
&self.data_type
}

fn as_any(&self) -> &dyn Any {
self
}

fn null_count(&self) -> Option<i64> {
self.null_count
}
}

impl<T, R> From<(&ParquetPrimitiveStatistics<R>, DataType)> for PrimitiveStatistics<T>
Expand Down