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

yuqi4733 pushed a commit to branch branch-1.0
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/branch-1.0 by this push:
     new 324a630bbd [#9136] fix(doris): trim bucket number to prevent 
NumberFormatException (#9202)
324a630bbd is described below

commit 324a630bbd56d273b70c6feb1cf5389f3800fc2e
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Nov 21 17:43:57 2025 +0800

    [#9136] fix(doris): trim bucket number to prevent NumberFormatException 
(#9202)
    
    ### What changes were proposed in this pull request?
    
    - Modified DorisUtils.extractBucketNum to trim the bucket number string
    before parsing.
    
    
    ### Why are the changes needed?
    - To prevent a NumberFormatException when parsing numeric bucket numbers
    that include whitespace. (e.g., " 16 ")
    
    Fix: #9136
    
    ### Does this PR introduce _any_ user-facing change?
    
    - No.
    
    ### How was this patch tested?
    
    - Verified using the unit test included in the issue
    (testExtractBucketNumWithWhitespace()).
    - Confirmed all existing tests continue to pass.
    
    Co-authored-by: Kwon Taeheon <[email protected]>
---
 .../gravitino/catalog/doris/utils/DorisUtils.java  |  6 ++--
 .../catalog/doris/utils/TestDorisUtils.java        | 35 ++++++++++++++++++++++
 2 files changed, 38 insertions(+), 3 deletions(-)

diff --git 
a/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/utils/DorisUtils.java
 
b/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/utils/DorisUtils.java
index 6d93924416..1f5b01d35e 100644
--- 
a/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/utils/DorisUtils.java
+++ 
b/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/utils/DorisUtils.java
@@ -221,11 +221,11 @@ public final class DorisUtils {
 
   private static int extractBucketNum(Matcher matcher) {
     int bucketNum = 1;
-    if (matcher.group(5) != null) {
-      String bucketValue = matcher.group(5);
+    if (matcher.group(4) != null) {
+      String bucketValue = matcher.group(4).trim();
       // Use -1 to indicate auto bucket.
       bucketNum =
-          bucketValue.trim().toUpperCase().equals("AUTO")
+          bucketValue.toUpperCase().equals("AUTO")
               ? Distributions.AUTO
               : Integer.valueOf(bucketValue);
     }
diff --git 
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/utils/TestDorisUtils.java
 
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/utils/TestDorisUtils.java
index 43c61c29f0..019231f39d 100644
--- 
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/utils/TestDorisUtils.java
+++ 
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/utils/TestDorisUtils.java
@@ -191,4 +191,39 @@ public class TestDorisUtils {
         
DorisUtils.extractDistributionInfoFromSql(createTableSqlWithRandomAuto);
     assertEquals(distribution3.number(), -1);
   }
+
+  @Test
+  public void testExtractBucketNumFromSql() {
+    String createTableSql =
+        "CREATE TABLE `testTable` (\n`col1` int NOT NULL\n) ENGINE=OLAP\n 
DISTRIBUTED BY HASH(`col1`) BUCKETS 8";
+    Distribution distribution = 
DorisUtils.extractDistributionInfoFromSql(createTableSql);
+    assertEquals(8, distribution.number());
+
+    String createTableSqlWithoutBucket =
+        "CREATE TABLE `testTable` (\n`col1` int NOT NULL\n) ENGINE=OLAP\n 
DISTRIBUTED BY HASH(`col1`)";
+    Distribution distributionDefault =
+        DorisUtils.extractDistributionInfoFromSql(createTableSqlWithoutBucket);
+    assertEquals(1, distributionDefault.number());
+  }
+
+  @Test
+  public void testExtractBucketNumWithWhitespace() {
+    String createTableSqlWithWhitespace =
+        "CREATE TABLE `testTable` (\n`col1` int NOT NULL\n) ENGINE=OLAP\n 
DISTRIBUTED BY HASH(`col1`) BUCKETS  16 ";
+    Distribution distribution =
+        
DorisUtils.extractDistributionInfoFromSql(createTableSqlWithWhitespace);
+    assertEquals(16, distribution.number());
+
+    String createTableSqlWithAutoWhitespace =
+        "CREATE TABLE `testTable` (\n`col1` int NOT NULL\n) ENGINE=OLAP\n 
DISTRIBUTED BY HASH(`col1`) BUCKETS  AUTO ";
+    Distribution distributionAuto =
+        
DorisUtils.extractDistributionInfoFromSql(createTableSqlWithAutoWhitespace);
+    assertEquals(-1, distributionAuto.number());
+
+    String createTableSqlWithAutoLeadingWhitespace =
+        "CREATE TABLE `testTable` (\n`col1` int NOT NULL\n) ENGINE=OLAP\n 
DISTRIBUTED BY HASH(`col1`) BUCKETS  AUTO";
+    Distribution distributionAutoLeading =
+        
DorisUtils.extractDistributionInfoFromSql(createTableSqlWithAutoLeadingWhitespace);
+    assertEquals(-1, distributionAutoLeading.number());
+  }
 }

Reply via email to