Skip to content

Commit b04d042

Browse files
committed
Add page_ordinal, row_group_ordinal and column_ordinal to SerializedPageWriter
1 parent 797816c commit b04d042

File tree

1 file changed

+38
-9
lines changed

1 file changed

+38
-9
lines changed

parquet/src/file/writer.rs

+38-9
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ use crate::encryption::modules::{create_module_aad, ModuleType};
4242
use crate::errors::{ParquetError, Result};
4343
use crate::file::properties::{BloomFilterPosition, WriterPropertiesPtr};
4444
use crate::file::reader::ChunkReader;
45-
use crate::file::{metadata::*, PARQUET_MAGIC};
4645
#[cfg(feature = "encryption")]
4746
use crate::file::PARQUET_MAGIC_ENCR_FOOTER;
47+
use crate::file::{metadata::*, PARQUET_MAGIC};
4848
use crate::schema::types::{ColumnDescPtr, SchemaDescPtr, SchemaDescriptor, TypePtr};
4949

5050
/// A wrapper around a [`Write`] that keeps track of the number
@@ -576,15 +576,24 @@ impl<'a, W: Write + Send> SerializedRowGroupWriter<'a, W> {
576576
let props = self.props.clone();
577577
#[cfg(feature = "encryption")]
578578
let file_encryptor = self.file_encryptor.clone();
579+
#[cfg(feature = "encryption")]
580+
let row_group_index = self.row_group_index as usize;
581+
#[cfg(feature = "encryption")]
582+
let column_index = self.column_index - 1;
583+
579584
let (buf, on_close) = self.get_on_close();
580585
#[cfg(feature = "encryption")]
581586
let mut page_writer = SerializedPageWriter::new(buf);
587+
#[cfg(feature = "encryption")]
588+
{
589+
page_writer.with_row_group_ordinal(row_group_index);
590+
page_writer.with_column_ordinal(column_index);
591+
page_writer.with_file_encryptor(file_encryptor);
592+
}
593+
582594
#[cfg(not(feature = "encryption"))]
583595
let page_writer = SerializedPageWriter::new(buf);
584596

585-
#[cfg(feature = "encryption")]
586-
page_writer.with_file_encryptor(file_encryptor);
587-
588597
Some(factory(
589598
column,
590599
props,
@@ -765,6 +774,10 @@ pub struct SerializedPageWriter<'a, W: Write> {
765774
file_encryptor: Option<Arc<FileEncryptor>>,
766775
#[cfg(feature = "encryption")]
767776
page_ordinal: usize,
777+
#[cfg(feature = "encryption")]
778+
column_ordinal: usize,
779+
#[cfg(feature = "encryption")]
780+
row_group_ordinal: usize,
768781
}
769782

770783
impl<'a, W: Write> SerializedPageWriter<'a, W> {
@@ -776,6 +789,10 @@ impl<'a, W: Write> SerializedPageWriter<'a, W> {
776789
file_encryptor: None,
777790
#[cfg(feature = "encryption")]
778791
page_ordinal: 0,
792+
#[cfg(feature = "encryption")]
793+
column_ordinal: 1,
794+
#[cfg(feature = "encryption")]
795+
row_group_ordinal: 0,
779796
}
780797
}
781798

@@ -785,6 +802,18 @@ impl<'a, W: Write> SerializedPageWriter<'a, W> {
785802
self.file_encryptor = file_encryptor;
786803
}
787804

805+
#[cfg(feature = "encryption")]
806+
/// Set the column ordinal for this page writer
807+
fn with_column_ordinal(&mut self, column_ordinal: usize) {
808+
self.column_ordinal = column_ordinal;
809+
}
810+
811+
#[cfg(feature = "encryption")]
812+
/// Set the row group ordinal for this page writer
813+
fn with_row_group_ordinal(&mut self, row_group_ordinal: usize) {
814+
self.row_group_ordinal = row_group_ordinal;
815+
}
816+
788817
/// Serializes page header into Thrift.
789818
/// Returns number of bytes that have been written into the sink.
790819
#[inline]
@@ -796,9 +825,9 @@ impl<'a, W: Write> SerializedPageWriter<'a, W> {
796825
let aad = create_module_aad(
797826
file_encryptor.file_aad(),
798827
ModuleType::DataPageHeader,
799-
0,
800-
0,
801-
Some(0),
828+
self.row_group_ordinal,
829+
self.column_ordinal,
830+
Some(self.page_ordinal),
802831
)?;
803832
encrypt_object(header, file_encryptor, &mut self.sink, &aad)?;
804833
} else {
@@ -833,8 +862,8 @@ impl<W: Write + Send> PageWriter for SerializedPageWriter<'_, W> {
833862
let aad = create_module_aad(
834863
encryptor.file_aad(),
835864
ModuleType::DataPage,
836-
0,
837-
0,
865+
self.row_group_ordinal,
866+
self.column_ordinal,
838867
Some(self.page_ordinal),
839868
)?;
840869
encrypted_buffer = encryptor.get_footer_encryptor().encrypt(page.data(), &aad);

0 commit comments

Comments
 (0)