From 515ed4c143062033691b574bd6407ac8bd940025 Mon Sep 17 00:00:00 2001 From: Piotr Findeisen Date: Tue, 9 Jul 2024 08:05:20 +0200 Subject: [PATCH] MINOR: Make ColumnPath immutable (#1380) Similar to `ColumnPath.toArray`, but avoids copying the path. --- .../org/apache/parquet/hadoop/metadata/ColumnPath.java | 10 +++++++++- .../parquet/crypto/InternalColumnEncryptionSetup.java | 3 +-- .../format/converter/ParquetMetadataConverter.java | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/parquet-common/src/main/java/org/apache/parquet/hadoop/metadata/ColumnPath.java b/parquet-common/src/main/java/org/apache/parquet/hadoop/metadata/ColumnPath.java index ec14d95e8f..46b71fe6a2 100644 --- a/parquet-common/src/main/java/org/apache/parquet/hadoop/metadata/ColumnPath.java +++ b/parquet-common/src/main/java/org/apache/parquet/hadoop/metadata/ColumnPath.java @@ -20,7 +20,9 @@ import java.io.Serializable; import java.util.Arrays; +import java.util.Collections; import java.util.Iterator; +import java.util.List; import java.util.Objects; public final class ColumnPath implements Iterable, Serializable { @@ -48,6 +50,8 @@ public static ColumnPath get(String... path) { private final String[] p; private ColumnPath(String[] path) { + // No need to copy the array here as the only published ColumnPath instances are created by the toCanonical + // method this.p = path; } @@ -83,6 +87,10 @@ public int size() { } public String[] toArray() { - return p; + return p.clone(); + } + + public List toList() { + return Collections.unmodifiableList(Arrays.asList(p)); } } diff --git a/parquet-hadoop/src/main/java/org/apache/parquet/crypto/InternalColumnEncryptionSetup.java b/parquet-hadoop/src/main/java/org/apache/parquet/crypto/InternalColumnEncryptionSetup.java index 2775865b3b..56497363d4 100755 --- a/parquet-hadoop/src/main/java/org/apache/parquet/crypto/InternalColumnEncryptionSetup.java +++ b/parquet-hadoop/src/main/java/org/apache/parquet/crypto/InternalColumnEncryptionSetup.java @@ -19,7 +19,6 @@ package org.apache.parquet.crypto; -import java.util.Arrays; import org.apache.parquet.format.BlockCipher; import org.apache.parquet.format.ColumnCryptoMetaData; import org.apache.parquet.format.EncryptionWithColumnKey; @@ -48,7 +47,7 @@ public class InternalColumnEncryptionSetup { columnCryptoMetaData = ColumnCryptoMetaData.ENCRYPTION_WITH_FOOTER_KEY(new EncryptionWithFooterKey()); } else { EncryptionWithColumnKey withColumnKeyStruct = new EncryptionWithColumnKey( - Arrays.asList(encryptionProperties.getPath().toArray())); + encryptionProperties.getPath().toList()); if (null != encryptionProperties.getKeyMetaData()) { withColumnKeyStruct.setKey_metadata(encryptionProperties.getKeyMetaData()); } diff --git a/parquet-hadoop/src/main/java/org/apache/parquet/format/converter/ParquetMetadataConverter.java b/parquet-hadoop/src/main/java/org/apache/parquet/format/converter/ParquetMetadataConverter.java index e752b4ceea..20dbb0119b 100644 --- a/parquet-hadoop/src/main/java/org/apache/parquet/format/converter/ParquetMetadataConverter.java +++ b/parquet-hadoop/src/main/java/org/apache/parquet/format/converter/ParquetMetadataConverter.java @@ -550,7 +550,7 @@ private void addRowGroup( ColumnMetaData metaData = new ColumnMetaData( getType(columnMetaData.getType()), toFormatEncodings(columnMetaData.getEncodings()), - Arrays.asList(columnMetaData.getPath().toArray()), + columnMetaData.getPath().toList(), toFormatCodec(columnMetaData.getCodec()), columnMetaData.getValueCount(), columnMetaData.getTotalUncompressedSize(),