Skip to content

Commit 5459ffc

Browse files
committed
test writer produced metadata
1 parent f1cd416 commit 5459ffc

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed

parquet/src/file/metadata/writer.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -775,10 +775,12 @@ impl MetadataObjectWriter {
775775
)?;
776776

777777
let encrypt_footer = file_encryptor.properties().encrypt_footer();
778-
let statistics = if encrypt_footer {
779-
std::mem::take(&mut column_chunk.statistics)
778+
let (statistics, encoding_stats) = if encrypt_footer {
779+
let s = std::mem::take(&mut column_chunk.statistics);
780+
let e = std::mem::take(&mut column_chunk.encoding_stats);
781+
(s, e)
780782
} else {
781-
None
783+
(None, None)
782784
};
783785
// create temp ColumnMetaData that we can encrypt
784786
let mut buffer: Vec<u8> = vec![];
@@ -789,6 +791,7 @@ impl MetadataObjectWriter {
789791
let ciphertext = column_encryptor.encrypt(&buffer, &aad)?;
790792
if encrypt_footer {
791793
column_chunk.statistics = statistics;
794+
column_chunk.encoding_stats = encoding_stats;
792795
}
793796
column_chunk.encrypted_column_metadata = Some(ciphertext);
794797
}

parquet/tests/encryption/encryption.rs

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -755,7 +755,26 @@ pub fn test_row_group_statistics_plaintext_encrypted_write() {
755755
for batch in record_batches.clone() {
756756
writer.write(&batch).unwrap();
757757
}
758-
let _file_metadata = writer.close().unwrap();
758+
let metadata = writer.close().unwrap();
759+
760+
// Check column statistics that are produced on write are complete
761+
assert_eq!(metadata.num_row_groups(), 1);
762+
let row_group = &metadata.row_group(0);
763+
assert_eq!(row_group.columns().len(), 2);
764+
765+
for column in row_group.columns() {
766+
assert!(column.page_encoding_stats().is_some());
767+
assert!(column.statistics().is_some());
768+
let column_stats = column.statistics().unwrap();
769+
assert_eq!(
770+
column_stats.min_bytes_opt(),
771+
Some(3i32.to_le_bytes().as_slice())
772+
);
773+
assert_eq!(
774+
column_stats.max_bytes_opt(),
775+
Some(19i32.to_le_bytes().as_slice())
776+
);
777+
}
759778

760779
// Check column statistics are read given plaintext footer and available decryption properties
761780
let options =
@@ -765,13 +784,12 @@ pub fn test_row_group_statistics_plaintext_encrypted_write() {
765784

766785
assert_eq!(metadata.num_row_groups(), 1);
767786

768-
let row_group = &metadata.row_groups()[0];
787+
let row_group = &metadata.row_group(0);
769788
assert_eq!(row_group.columns().len(), 2);
770789

771790
// Statistics should be available from decrypted data
772-
assert!(&row_group.column(0).statistics().is_some());
773-
assert!(&row_group.column(1).statistics().is_some());
774791
for column in row_group.columns() {
792+
assert!(column.page_encoding_stats().is_some());
775793
assert!(column.statistics().is_some());
776794
let column_stats = column.statistics().unwrap();
777795
assert_eq!(
@@ -791,12 +809,14 @@ pub fn test_row_group_statistics_plaintext_encrypted_write() {
791809

792810
assert_eq!(metadata.num_row_groups(), 1);
793811

794-
let row_group = &metadata.row_groups()[0];
812+
let row_group = &metadata.row_group(0);
795813
assert_eq!(row_group.columns().len(), 2);
796814
assert!(&row_group.column(0).statistics().is_none());
797815
assert!(&row_group.column(1).statistics().is_some());
816+
assert!(&row_group.column(0).page_encoding_stats().is_none());
817+
assert!(&row_group.column(1).page_encoding_stats().is_some());
798818

799-
let column_stats = &row_group.columns()[1].statistics().unwrap();
819+
let column_stats = &row_group.column(1).statistics().unwrap();
800820
assert_eq!(
801821
column_stats.min_bytes_opt(),
802822
Some(3i32.to_le_bytes().as_slice())

0 commit comments

Comments
 (0)