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";
