This is an automated email from the ASF dual-hosted git repository.
diqiu50 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new aa549f92f9 [#14026] fix(catalog-jdbc): Keep auto-increment when
updating column default value (#14027)
aa549f92f9 is described below
commit aa549f92f9e69cfcd37aee5254d1177ee6dd0d26
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 687cf5f19d..411688a85a 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
@@ -608,6 +608,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 af5b4becc4..bb96ca6327 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
@@ -775,6 +775,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 e15d53b0a3..d3416e7243 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
@@ -542,6 +542,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";