This is an automated email from the ASF dual-hosted git repository.

gangwu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/parquet-java.git


The following commit(s) were added to refs/heads/master by this push:
     new 515ed4c14 MINOR: Make ColumnPath immutable (#1380)
515ed4c14 is described below

commit 515ed4c143062033691b574bd6407ac8bd940025
Author: Piotr Findeisen <[email protected]>
AuthorDate: Tue Jul 9 08:05:20 2024 +0200

    MINOR: Make ColumnPath immutable (#1380)
    
    Similar to `ColumnPath.toArray`, but avoids copying the path.
---
 .../java/org/apache/parquet/hadoop/metadata/ColumnPath.java    | 10 +++++++++-
 .../apache/parquet/crypto/InternalColumnEncryptionSetup.java   |  3 +--
 .../parquet/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 ec14d95e8..46b71fe6a 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 @@ package org.apache.parquet.hadoop.metadata;
 
 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<String>, Serializable {
@@ -48,6 +50,8 @@ public final class ColumnPath implements Iterable<String>, 
Serializable {
   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 final class ColumnPath implements Iterable<String>, 
Serializable {
   }
 
   public String[] toArray() {
-    return p;
+    return p.clone();
+  }
+
+  public List<String> 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 2775865b3..56497363d 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 e752b4cee..20dbb0119 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 @@ public class ParquetMetadataConverter {
       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(),

Reply via email to