Aggarwal-Raghav commented on code in PR #5943:
URL: https://github.com/apache/hive/pull/5943#discussion_r2228675187


##########
standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/utils/MetaStoreServerUtils.java:
##########
@@ -255,31 +253,44 @@ public static double decimalToDouble(Decimal decimal) {
     return new BigDecimal(new BigInteger(decimal.getUnscaled()), 
decimal.getScale()).doubleValue();
   }
 
-  public static void validatePartitionNameCharacters(List<String> partVals,
-                                                     Pattern 
partitionValidationPattern) throws MetaException {
-
-    String invalidPartitionVal = getPartitionValWithInvalidCharacter(partVals, 
partitionValidationPattern);
-    if (invalidPartitionVal != null) {
-      throw new MetaException("Partition value '" + invalidPartitionVal +
-          "' contains a character " + "not matched by whitelist pattern '" +
-          partitionValidationPattern.toString() + "'.  " + "(configure with " +
-          MetastoreConf.ConfVars.PARTITION_NAME_WHITELIST_PATTERN.getVarname() 
+ ")");
+  public static Pattern getPartitionValidationRegex(Configuration conf) {
+    String partitionValidationRegex =
+        MetastoreConf.getVar(conf, 
MetastoreConf.ConfVars.PARTITION_NAME_WHITELIST_PATTERN);
+    if (partitionValidationRegex != null && 
!partitionValidationRegex.isEmpty()) {
+      return Pattern.compile(partitionValidationRegex);
     }
+    return null;
   }
 
-  private static String getPartitionValWithInvalidCharacter(List<String> 
partVals,
-                                                            Pattern 
partitionValidationPattern) {
-    if (partitionValidationPattern == null) {
-      return null;
-    }
+  public static void validatePartitionNameCharacters(List<String> partVals, 
Configuration conf)
+      throws MetaException {
 
-    for (String partVal : partVals) {
-      if (!partitionValidationPattern.matcher(partVal).matches()) {
-        return partVal;
-      }
+    Pattern partitionValidationPattern = getPartitionValidationRegex(conf);
+    String invalidPartitionVal =
+        getPartitionValWithInvalidCharacter(partVals, 
partitionValidationPattern);
+    if (invalidPartitionVal != null) {
+      throw new MetaException(
+          ("Partition value '%s' contains a character not matched by whitelist 
pattern '%s'. Configure with %s for "
+                  + "dynamic partitioning otherwise use metaconf:%s")
+              .formatted(
+                  invalidPartitionVal,
+                  partitionValidationPattern.toString(),
+                  
MetastoreConf.ConfVars.PARTITION_NAME_WHITELIST_PATTERN.getHiveName(),
+                  
MetastoreConf.ConfVars.PARTITION_NAME_WHITELIST_PATTERN.getVarname()));
     }
+  }
 
-    return null;
+  public static String getPartitionValWithInvalidCharacter(

Review Comment:
   Ack. Let me check.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: gitbox-unsubscr...@hive.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: gitbox-unsubscr...@hive.apache.org
For additional commands, e-mail: gitbox-h...@hive.apache.org

Reply via email to