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

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


The following commit(s) were added to refs/heads/branch-1.3 by this push:
     new eb3adf0fea [Cherry-pick to branch-1.3] [#13999] fix(starrocks): Apply 
nullability and default value when adding columns (#14004) (#14042)
eb3adf0fea is described below

commit eb3adf0feae7d5ac9355e4bf2fd22597a13ab044
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Oct 21 13:57:35 2026 +0800

    [Cherry-pick to branch-1.3] [#13999] fix(starrocks): Apply nullability and 
default value when adding columns (#14004) (#14042)
    
    **Cherry-pick Information:**
    - Original commit: c3843d68eedca922e35f02df3e6a9b3b4c37d22b
    - Target branch: `branch-1.3`
    - Status: ✅ Clean cherry-pick (no conflicts)
    
    Co-authored-by: Yuhui <[email protected]>
---
 .../operations/StarRocksTableOperations.java       | 35 ++++++-----
 .../integration/test/CatalogStarRocksIT.java       | 28 +++++++++
 .../TestStarRocksTableOperationsSqlGeneration.java | 67 ++++++++++++++++++++++
 3 files changed, 112 insertions(+), 18 deletions(-)

diff --git 
a/catalogs/catalog-jdbc-starrocks/src/main/java/org/apache/gravitino/catalog/starrocks/operations/StarRocksTableOperations.java
 
b/catalogs/catalog-jdbc-starrocks/src/main/java/org/apache/gravitino/catalog/starrocks/operations/StarRocksTableOperations.java
index 439deee4dd..c1a9e06bf2 100644
--- 
a/catalogs/catalog-jdbc-starrocks/src/main/java/org/apache/gravitino/catalog/starrocks/operations/StarRocksTableOperations.java
+++ 
b/catalogs/catalog-jdbc-starrocks/src/main/java/org/apache/gravitino/catalog/starrocks/operations/StarRocksTableOperations.java
@@ -474,29 +474,28 @@ public class StarRocksTableOperations extends 
JdbcTableOperations {
   }
 
   private String addColumnFieldDefinition(TableChange.AddColumn addColumn) {
-    String dataType = typeConverter.fromGravitino(addColumn.getDataType());
     if (addColumn.fieldName().length > 1) {
       throw new UnsupportedOperationException("StarRocks does not support 
nested column names.");
     }
     String col = addColumn.fieldName()[0];
+    // StarRocks only allows AUTO_INCREMENT columns to be defined at table 
creation time
+    Preconditions.checkArgument(
+        !addColumn.isAutoIncrement(),
+        "StarRocks does not support adding an auto-increment column: %s",
+        col);
 
-    StringBuilder columnDefinition = new StringBuilder();
-    columnDefinition
-        .append("ADD COLUMN ")
-        .append(BACK_QUOTE)
-        .append(col)
-        .append(BACK_QUOTE)
-        .append(SPACE)
-        .append(dataType)
-        .append(SPACE);
-
-    // Append comment if available
-    if (StringUtils.isNotEmpty(addColumn.getComment())) {
-      columnDefinition
-          .append("COMMENT '")
-          .append(escapeSqlLiteral(addColumn.getComment(), '\''))
-          .append("' ");
-    }
+    JdbcColumn column =
+        JdbcColumn.builder()
+            .withName(col)
+            .withType(addColumn.getDataType())
+            .withComment(addColumn.getComment())
+            .withNullable(addColumn.isNullable())
+            .withDefaultValue(addColumn.getDefaultValue())
+            .withAutoIncrement(false)
+            .build();
+    StringBuilder columnDefinition =
+        new StringBuilder("ADD COLUMN 
").append(BACK_QUOTE).append(col).append(BACK_QUOTE);
+    appendColumnDefinition(column, columnDefinition);
 
     // Append position if available
     if (addColumn.getPosition() instanceof TableChange.First) {
diff --git 
a/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/integration/test/CatalogStarRocksIT.java
 
b/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/integration/test/CatalogStarRocksIT.java
index 28369a00c8..81c0c8dffb 100644
--- 
a/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/integration/test/CatalogStarRocksIT.java
+++ 
b/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/integration/test/CatalogStarRocksIT.java
@@ -1004,5 +1004,33 @@ public class CatalogStarRocksIT extends BaseIT {
         Literals.timestampLiteral(LocalDateTime.of(2024, 1, 1, 1, 1, 1)),
         colDefaultValues[1].defaultValue());
     Assertions.assertEquals(DEFAULT_VALUE_OF_CURRENT_TIMESTAMP, 
colDefaultValues[2].defaultValue());
+
+    // add a column with nullability and default value
+    tableCatalog.alterTable(
+        tableIdentifier,
+        TableChange.addColumn(
+            new String[] {"col_add_default_value"},
+            Types.TimestampType.withoutTimeZone(),
+            "col_add_default_value",
+            TableChange.ColumnPosition.defaultPos(),
+            false,
+            false,
+            Literals.timestampLiteral("2024-01-01T01:01:01")));
+
+    Awaitility.await()
+        .atMost(MAX_WAIT_IN_SECONDS, TimeUnit.SECONDS)
+        .pollInterval(WAIT_INTERVAL_IN_SECONDS, TimeUnit.SECONDS)
+        .untilAsserted(
+            () -> {
+              Column addedColumn =
+                  
Arrays.stream(tableCatalog.loadTable(tableIdentifier).columns())
+                      .filter(c -> c.name().equals("col_add_default_value"))
+                      .findFirst()
+                      .orElseThrow(() -> new AssertionError("Column is not 
added"));
+              Assertions.assertFalse(addedColumn.nullable());
+              Assertions.assertEquals(
+                  Literals.timestampLiteral(LocalDateTime.of(2024, 1, 1, 1, 1, 
1)),
+                  addedColumn.defaultValue());
+            });
   }
 }
diff --git 
a/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/operation/TestStarRocksTableOperationsSqlGeneration.java
 
b/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/operation/TestStarRocksTableOperationsSqlGeneration.java
index c6e3662a5d..b1e32c3f19 100644
--- 
a/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/operation/TestStarRocksTableOperationsSqlGeneration.java
+++ 
b/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/operation/TestStarRocksTableOperationsSqlGeneration.java
@@ -29,6 +29,7 @@ import 
org.apache.gravitino.catalog.jdbc.converter.JdbcExceptionConverter;
 import org.apache.gravitino.catalog.jdbc.utils.ConnectionCountingDataSource;
 import org.apache.gravitino.catalog.starrocks.converter.StarRocksTypeConverter;
 import 
org.apache.gravitino.catalog.starrocks.operations.StarRocksTableOperations;
+import org.apache.gravitino.rel.Column;
 import org.apache.gravitino.rel.TableChange;
 import org.apache.gravitino.rel.expressions.NamedReference;
 import org.apache.gravitino.rel.expressions.distributions.Distribution;
@@ -294,4 +295,70 @@ public class TestStarRocksTableOperationsSqlGeneration {
     Assertions.assertTrue(alterSql.contains("ADD COLUMN `col2`"), alterSql);
     Assertions.assertTrue(alterSql.contains("COMMENT 'owner\\\\''s 
\"comment\"; --'"), alterSql);
   }
+
+  @Test
+  public void testAddColumnWithNotNullAndDefaultValue() {
+    TestableStarRocksTableOperations ops = new 
TestableStarRocksTableOperations();
+
+    String alterSql =
+        ops.alterTableSql(
+            "test_table",
+            TableChange.addColumn(
+                new String[] {"created_at"},
+                Types.TimestampType.withoutTimeZone(),
+                "create time",
+                TableChange.ColumnPosition.after("id"),
+                false,
+                false,
+                Column.DEFAULT_VALUE_OF_CURRENT_TIMESTAMP));
+
+    Assertions.assertTrue(
+        alterSql.contains(
+            "ADD COLUMN `created_at` datetime NOT NULL DEFAULT 
CURRENT_TIMESTAMP "
+                + "COMMENT 'create time' AFTER `id`"),
+        alterSql);
+  }
+
+  @Test
+  public void testAddNullableColumnWithStringDefaultValue() {
+    TestableStarRocksTableOperations ops = new 
TestableStarRocksTableOperations();
+
+    String alterSql =
+        ops.alterTableSql(
+            "test_table",
+            TableChange.addColumn(
+                new String[] {"col2"},
+                Types.VarCharType.of(10),
+                null,
+                TableChange.ColumnPosition.after("col1"),
+                true,
+                false,
+                Literals.of("abc", Types.VarCharType.of(10))));
+
+    Assertions.assertTrue(
+        alterSql.contains("ADD COLUMN `col2` varchar(10) NULL DEFAULT 'abc' 
AFTER `col1`"),
+        alterSql);
+  }
+
+  @Test
+  public void testAddAutoIncrementColumnIsRejected() {
+    TestableStarRocksTableOperations ops = new 
TestableStarRocksTableOperations();
+
+    IllegalArgumentException exception =
+        Assertions.assertThrows(
+            IllegalArgumentException.class,
+            () ->
+                ops.alterTableSql(
+                    "test_table",
+                    TableChange.addColumn(
+                        new String[] {"col2"},
+                        Types.LongType.get(),
+                        null,
+                        TableChange.ColumnPosition.defaultPos(),
+                        false,
+                        true)));
+
+    Assertions.assertEquals(
+        "StarRocks does not support adding an auto-increment column: col2", 
exception.getMessage());
+  }
 }

Reply via email to