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

Commit

Permalink
Parquet: add as_any and null_count to dyn Statistics (#743)
Browse files Browse the repository at this point in the history
  • Loading branch information
ritchie46 authored Jan 8, 2022
1 parent 0a1a878 commit abc6257
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 0 deletions.
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

0 comments on commit abc6257

Please sign in to comment.