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

github-actions[bot] pushed a commit to branch cherry-pick-aa549f92-to-branch-1.3
in repository https://gitbox.apache.org/repos/asf/gravitino.git

commit d7f7f314faf1f30740611918fe0cdfb47fccca28
Author: Yuhui <[email protected]>
AuthorDate: Wed Oct 21 09:22:46 2026 +0800

    [#14026] fix(catalog-jdbc): Keep auto-increment when updating column 
default value (#14027)
    
    ### What changes were proposed in this pull request?
    
    Copy `autoIncrement` when rebuilding the column in
    `updateColumnDefaultValueFieldDefinition` for MySQL and OceanBase. Add a
    test for each.
    
    ### Why are the changes needed?
    
    The rebuilt column defaulted `autoIncrement` to false, so the generated
    `MODIFY COLUMN` dropped `AUTO_INCREMENT` and the column silently stopped
    auto-incrementing.
    
    Fix: #14026
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    Added `testUpdateColumnDefaultValueKeepsAutoIncrement` to
    `TestMysqlTableOperations` and `TestOceanBaseTableOperations`. The MySQL
    test passes against Docker and fails without the fix. The OceanBase test
    compiles but was not run locally.
---
 .../operation/OceanBaseTableOperations.java        |  1 +
 .../operation/TestOceanBaseTableOperations.java    | 40 ++++++++++++++++++++++
 .../mysql/operation/MysqlTableOperations.java      |  1 +
 .../mysql/operation/TestMysqlTableOperations.java  | 40 ++++++++++++++++++++++
 4 files changed, 82 insertions(+)

diff --git 
a/catalogs-contrib/catalog-jdbc-oceanbase/src/main/java/org/apache/gravitino/catalog/oceanbase/operation/OceanBaseTableOperations.java
 
b/catalogs-contrib/catalog-jdbc-oceanbase/src/main/java/org/apache/gravitino/catalog/oceanbase/operation/OceanBaseTableOperations.java
index f05fcfada3..da57ee841b 100644
--- 
a/catalogs-contrib/catalog-jdbc-oceanbase/src/main/java/org/apache/gravitino/catalog/oceanbase/operation/OceanBaseTableOperations.java
+++ 
b/catalogs-contrib/catalog-jdbc-oceanbase/src/main/java/org/apache/gravitino/catalog/oceanbase/operation/OceanBaseTableOperations.java
@@ -605,6 +605,7 @@ public class OceanBaseTableOperations extends 
JdbcTableOperations {
             .withType(column.dataType())
             .withNullable(column.nullable())
             .withComment(column.comment())
+            .withAutoIncrement(column.autoIncrement())
             .withDefaultValue(updateColumnDefaultValue.getNewDefaultValue())
             .build();
     return appendColumnDefinition(newColumn, sqlBuilder).toString();
diff --git 
a/catalogs-contrib/catalog-jdbc-oceanbase/src/test/java/org/apache/gravitino/catalog/oceanbase/operation/TestOceanBaseTableOperations.java
 
b/catalogs-contrib/catalog-jdbc-oceanbase/src/test/java/org/apache/gravitino/catalog/oceanbase/operation/TestOceanBaseTableOperations.java
index 06fc9101ad..a0d4b2f9c9 100644
--- 
a/catalogs-contrib/catalog-jdbc-oceanbase/src/test/java/org/apache/gravitino/catalog/oceanbase/operation/TestOceanBaseTableOperations.java
+++ 
b/catalogs-contrib/catalog-jdbc-oceanbase/src/test/java/org/apache/gravitino/catalog/oceanbase/operation/TestOceanBaseTableOperations.java
@@ -575,6 +575,46 @@ public class TestOceanBaseTableOperations extends 
TestOceanBase {
         Literals.of("world", Types.VarCharType.of(255)), 
loaded.columns()[3].defaultValue());
   }
 
+  @Test
+  public void testUpdateColumnDefaultValueKeepsAutoIncrement() {
+    String tableName = RandomNameUtils.genRandomName("auto_increment_table_");
+    JdbcColumn[] columns = {
+      JdbcColumn.builder()
+          .withName("col_1")
+          .withType(Types.LongType.get())
+          .withAutoIncrement(true)
+          .withNullable(false)
+          .build(),
+      JdbcColumn.builder()
+          .withName("col_2")
+          .withType(Types.VarCharType.of(255))
+          .withNullable(false)
+          .build()
+    };
+    Index[] indexes =
+        new Index[] {
+          Indexes.createMysqlPrimaryKey(new String[][] {{"col_2"}}),
+          Indexes.unique("uk_col_1", new String[][] {{"col_1"}})
+        };
+    TABLE_OPERATIONS.create(
+        TEST_DB_NAME.toString(),
+        tableName,
+        columns,
+        "test_comment",
+        new HashMap<>(),
+        null,
+        Distributions.NONE,
+        indexes);
+
+    TABLE_OPERATIONS.alterTable(
+        TEST_DB_NAME.toString(),
+        tableName,
+        TableChange.updateColumnDefaultValue(new String[] {"col_1"}, 
Column.DEFAULT_VALUE_NOT_SET));
+
+    JdbcTable loaded = TABLE_OPERATIONS.load(TEST_DB_NAME.toString(), 
tableName);
+    Assertions.assertTrue(loaded.columns()[0].autoIncrement());
+  }
+
   @Test
   public void testCreateAndLoadTable() {
     String tableName = RandomStringUtils.randomAlphabetic(16).toLowerCase() + 
"_cl_table";
diff --git 
a/catalogs/catalog-jdbc-mysql/src/main/java/org/apache/gravitino/catalog/mysql/operation/MysqlTableOperations.java
 
b/catalogs/catalog-jdbc-mysql/src/main/java/org/apache/gravitino/catalog/mysql/operation/MysqlTableOperations.java
index 813f44b6de..f50ccca7df 100644
--- 
a/catalogs/catalog-jdbc-mysql/src/main/java/org/apache/gravitino/catalog/mysql/operation/MysqlTableOperations.java
+++ 
b/catalogs/catalog-jdbc-mysql/src/main/java/org/apache/gravitino/catalog/mysql/operation/MysqlTableOperations.java
@@ -684,6 +684,7 @@ public class MysqlTableOperations extends 
JdbcTableOperations {
             .withType(column.dataType())
             .withNullable(column.nullable())
             .withComment(column.comment())
+            .withAutoIncrement(column.autoIncrement())
             .withDefaultValue(updateColumnDefaultValue.getNewDefaultValue())
             .build();
     return appendColumnDefinition(newColumn, sqlBuilder).toString();
diff --git 
a/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/operation/TestMysqlTableOperations.java
 
b/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/operation/TestMysqlTableOperations.java
index f4cd86e9e6..b48e8a9e08 100644
--- 
a/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/operation/TestMysqlTableOperations.java
+++ 
b/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/operation/TestMysqlTableOperations.java
@@ -543,6 +543,46 @@ public class TestMysqlTableOperations extends TestMysql {
         Literals.of("world", Types.VarCharType.of(255)), 
loaded.columns()[3].defaultValue());
   }
 
+  @Test
+  public void testUpdateColumnDefaultValueKeepsAutoIncrement() {
+    String tableName = RandomNameUtils.genRandomName("auto_increment_table_");
+    JdbcColumn[] columns = {
+      JdbcColumn.builder()
+          .withName("col_1")
+          .withType(Types.LongType.get())
+          .withAutoIncrement(true)
+          .withNullable(false)
+          .build(),
+      JdbcColumn.builder()
+          .withName("col_2")
+          .withType(Types.VarCharType.of(255))
+          .withNullable(false)
+          .build()
+    };
+    Index[] indexes =
+        new Index[] {
+          Indexes.createMysqlPrimaryKey(new String[][] {{"col_2"}}),
+          Indexes.unique("uk_col_1", new String[][] {{"col_1"}})
+        };
+    TABLE_OPERATIONS.create(
+        TEST_DB_NAME.toString(),
+        tableName,
+        columns,
+        "test_comment",
+        new HashMap<>(),
+        null,
+        Distributions.NONE,
+        indexes);
+
+    TABLE_OPERATIONS.alterTable(
+        TEST_DB_NAME.toString(),
+        tableName,
+        TableChange.updateColumnDefaultValue(new String[] {"col_1"}, 
Column.DEFAULT_VALUE_NOT_SET));
+
+    JdbcTable loaded = TABLE_OPERATIONS.load(TEST_DB_NAME.toString(), 
tableName);
+    Assertions.assertTrue(loaded.columns()[0].autoIncrement());
+  }
+
   @Test
   public void testCreateAndLoadTable() {
     String tableName = RandomStringUtils.randomAlphabetic(16) + "_cl_table";

Reply via email to