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

dongjoon pushed a commit to branch branch-1.8
in repository https://gitbox.apache.org/repos/asf/orc.git


The following commit(s) were added to refs/heads/branch-1.8 by this push:
     new ca8e324ea ORC-1329: Add `OrcConf.getStringAsList` method
ca8e324ea is described below

commit ca8e324ea85cd69dffb265e6fa061d981024d9dc
Author: Deshan Xiao <[email protected]>
AuthorDate: Fri Dec 9 21:30:19 2022 -0800

    ORC-1329: Add `OrcConf.getStringAsList` method
    
    ### What changes were proposed in this pull request?
    This PR is aimed to add a new OrcConf utility: getStringAsList.
    
    ### Why are the changes needed?
    We need to support a new OrcConf utility - getStringAsList, which can 
handle the scenario where the configuration item is a String, but the parameter 
received by the orc is a List.
    
    ### How was this patch tested?
    UT
    
    Closes #1338 from deshanxiao/deshan/1329.
    
    Authored-by: Deshan Xiao <[email protected]>
    Signed-off-by: Dongjoon Hyun <[email protected]>
    (cherry picked from commit db05324f11b0d2b321bdce0623a6c3b6e3b66b4f)
    Signed-off-by: Dongjoon Hyun <[email protected]>
---
 java/core/src/java/org/apache/orc/OrcConf.java     | 18 ++++++++++++++++
 java/core/src/test/org/apache/orc/TestOrcConf.java | 24 ++++++++++++++++++++++
 2 files changed, 42 insertions(+)

diff --git a/java/core/src/java/org/apache/orc/OrcConf.java 
b/java/core/src/java/org/apache/orc/OrcConf.java
index 78fdd3006..d2d22fc8f 100644
--- a/java/core/src/java/org/apache/orc/OrcConf.java
+++ b/java/core/src/java/org/apache/orc/OrcConf.java
@@ -18,8 +18,11 @@
 
 package org.apache.orc;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Properties;
 
 /**
@@ -329,6 +332,21 @@ public enum OrcConf {
     return getString(null, conf);
   }
 
+  public List<String> getStringAsList(Configuration conf) {
+    String value = getString(null, conf);
+    List<String> confList = new ArrayList<>();
+    if (StringUtils.isEmpty(value)) {
+      return confList;
+    }
+    for (String str: value.split(",")) {
+      String trimStr = StringUtils.trim(str);
+      if (StringUtils.isNotEmpty(trimStr)) {
+        confList.add(trimStr);
+      }
+    }
+    return confList;
+  }
+
   public void setString(Configuration conf, String value) {
     conf.set(attribute, value);
   }
diff --git a/java/core/src/test/org/apache/orc/TestOrcConf.java 
b/java/core/src/test/org/apache/orc/TestOrcConf.java
index 9f43342c7..1dde7532b 100644
--- a/java/core/src/test/org/apache/orc/TestOrcConf.java
+++ b/java/core/src/test/org/apache/orc/TestOrcConf.java
@@ -20,6 +20,7 @@ package org.apache.orc;
 import org.apache.hadoop.conf.Configuration;
 import org.junit.jupiter.api.Test;
 
+import java.util.List;
 import java.util.Properties;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -139,4 +140,27 @@ public class TestOrcConf {
     conf.setInt(ORC_STRIPE_SIZE_CONF.getHiveConfName(), 2000);
     assertEquals(2000, ORC_STRIPE_SIZE_CONF.getLong(tableProperties, conf));
   }
+
+  @Test
+  public void testGetStringAsList() {
+    Configuration conf = new Configuration();
+
+    conf.set(ORC_COMPRESS_CONF.getHiveConfName(), "a,,b,c, ,d,");
+    List<String> valueList1 =  ORC_COMPRESS_CONF.getStringAsList(conf);
+    assertEquals(valueList1.size(), 4);
+    assertEquals(valueList1.get(0), "a");
+    assertEquals(valueList1.get(1), "b");
+    assertEquals(valueList1.get(2), "c");
+    assertEquals(valueList1.get(3), "d");
+
+    conf.set(ORC_COMPRESS_CONF.getHiveConfName(), "");
+    List<String> valueList2 =  ORC_COMPRESS_CONF.getStringAsList(conf);
+    assertEquals(valueList2.size(), 0);
+
+    conf.set(ORC_COMPRESS_CONF.getHiveConfName(), " abc,  efg,  ");
+    List<String> valueList3 =  ORC_COMPRESS_CONF.getStringAsList(conf);
+    assertEquals(valueList3.size(), 2);
+    assertEquals(valueList3.get(0), "abc");
+    assertEquals(valueList3.get(1), "efg");
+  }
 }

Reply via email to