This is an automated email from the ASF dual-hosted git repository.
diqiu50 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 6644e1618a [Cherry-pick to branch-1.3] [#13978] fix(catalog-jdbc):
Keep column default value when updating column type (#13979) (#14068)
6644e1618a is described below
commit 6644e1618a485ed9b99388d13598ad53e5d13e98
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Oct 22 14:42:09 2026 +0800
[Cherry-pick to branch-1.3] [#13978] fix(catalog-jdbc): Keep column default
value when updating column type (#13979) (#14068)
**Cherry-pick Information:**
- Original commit: 997a61ef0bef83418ea368bbfba3390c490cf1d9
- Target branch: `branch-1.3`
- Status: ✅ Clean cherry-pick (no conflicts)
Co-authored-by: Yuhui <[email protected]>
---
.../operation/OceanBaseTableOperations.java | 3 +-
.../operation/TestOceanBaseTableOperations.java | 33 +++++++++++++++++
.../mysql/operation/MysqlTableOperations.java | 3 +-
.../mysql/operation/TestMysqlTableOperations.java | 33 +++++++++++++++++
.../operations/StarRocksTableOperations.java | 3 +-
.../operation/TestStarRocksTableOperations.java | 41 ++++++++++++++++++++++
6 files changed, 110 insertions(+), 6 deletions(-)
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 da57ee841b..f3e317adcd 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
@@ -19,7 +19,6 @@
package org.apache.gravitino.catalog.oceanbase.operation;
import static
org.apache.gravitino.catalog.jdbc.utils.JdbcConnectorUtils.escapeSqlLiteral;
-import static org.apache.gravitino.rel.Column.DEFAULT_VALUE_NOT_SET;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
@@ -624,7 +623,7 @@ public class OceanBaseTableOperations extends
JdbcTableOperations {
.withName(col)
.withType(updateColumnType.getNewDataType())
.withComment(column.comment())
- .withDefaultValue(DEFAULT_VALUE_NOT_SET)
+ .withDefaultValue(column.defaultValue())
.withNullable(column.nullable())
.withAutoIncrement(column.autoIncrement())
.build();
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 9d08cb61f8..678f8c4fdb 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
@@ -231,6 +231,39 @@ public class TestOceanBaseTableOperations extends
TestOceanBase {
TABLE_OPERATIONS.drop(TEST_DB_NAME, newName), "table should be
non-existent");
}
+ @Test
+ public void testAlterTableUpdateColumnTypeKeepsDefaultValue() {
+ String tableName = RandomStringUtils.randomAlphabetic(16).toLowerCase() +
"_type_default_table";
+ JdbcColumn col_1 =
+
JdbcColumn.builder().withName("col_1").withType(INT).withNullable(false).build();
+ JdbcColumn col_2 =
+ JdbcColumn.builder()
+ .withName("col_2")
+ .withType(Types.VarCharType.of(16))
+ .withDefaultValue(Literals.of("new", Types.VarCharType.of(16)))
+ .withNullable(false)
+ .build();
+ TABLE_OPERATIONS.create(
+ TEST_DB_NAME.toString(),
+ tableName,
+ new JdbcColumn[] {col_1, col_2},
+ "test_comment",
+ new HashMap<>(),
+ null,
+ Distributions.NONE,
+ new Index[0]);
+
+ TABLE_OPERATIONS.alterTable(
+ TEST_DB_NAME.toString(),
+ tableName,
+ TableChange.updateColumnType(new String[] {col_2.name()},
Types.VarCharType.of(32)));
+
+ JdbcTable load = TABLE_OPERATIONS.load(TEST_DB_NAME.toString(), tableName);
+ Column updated = load.columns()[1];
+ Assertions.assertEquals(Types.VarCharType.of(32), updated.dataType());
+ Assertions.assertEquals(Literals.of("new", Types.VarCharType.of(32)),
updated.defaultValue());
+ }
+
@Test
public void testAlterTable() {
String tableName = RandomStringUtils.randomAlphabetic(16).toLowerCase() +
"_al_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 c3e9b7898d..cab50f20c4 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
@@ -21,7 +21,6 @@ package org.apache.gravitino.catalog.mysql.operation;
import static
org.apache.gravitino.catalog.jdbc.utils.JdbcConnectorUtils.escapeSqlLiteral;
import static
org.apache.gravitino.catalog.mysql.MysqlTablePropertiesMetadata.MYSQL_AUTO_INCREMENT_OFFSET_KEY;
import static
org.apache.gravitino.catalog.mysql.MysqlTablePropertiesMetadata.MYSQL_ENGINE_KEY;
-import static org.apache.gravitino.rel.Column.DEFAULT_VALUE_NOT_SET;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
@@ -719,7 +718,7 @@ public class MysqlTableOperations extends
JdbcTableOperations {
.withName(col)
.withType(updateColumnType.getNewDataType())
.withComment(column.comment())
- .withDefaultValue(DEFAULT_VALUE_NOT_SET)
+ .withDefaultValue(column.defaultValue())
.withNullable(column.nullable())
.withAutoIncrement(column.autoIncrement())
.build();
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 4fe9f4b8bf..456aeb89ee 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
@@ -197,6 +197,39 @@ public class TestMysqlTableOperations extends TestMysql {
TABLE_OPERATIONS.drop(TEST_DB_NAME.toString(), newName), "table should
be non-existent");
}
+ @Test
+ public void testAlterTableUpdateColumnTypeKeepsDefaultValue() {
+ String tableName = RandomStringUtils.randomAlphabetic(16) +
"_type_default_table";
+ JdbcColumn col_1 =
+
JdbcColumn.builder().withName("col_1").withType(INT).withNullable(false).build();
+ JdbcColumn col_2 =
+ JdbcColumn.builder()
+ .withName("col_2")
+ .withType(Types.VarCharType.of(16))
+ .withDefaultValue(Literals.of("new", Types.VarCharType.of(16)))
+ .withNullable(false)
+ .build();
+ TABLE_OPERATIONS.create(
+ TEST_DB_NAME.toString(),
+ tableName,
+ new JdbcColumn[] {col_1, col_2},
+ "test_comment",
+ new HashMap<>(),
+ null,
+ Distributions.NONE,
+ new Index[0]);
+
+ TABLE_OPERATIONS.alterTable(
+ TEST_DB_NAME.toString(),
+ tableName,
+ TableChange.updateColumnType(new String[] {col_2.name()},
Types.VarCharType.of(32)));
+
+ JdbcTable load = TABLE_OPERATIONS.load(TEST_DB_NAME.toString(), tableName);
+ Column updated = load.columns()[1];
+ Assertions.assertEquals(Types.VarCharType.of(32), updated.dataType());
+ Assertions.assertEquals(Literals.of("new", Types.VarCharType.of(32)),
updated.defaultValue());
+ }
+
@Test
public void testAlterTable() {
String tableName = RandomStringUtils.randomAlphabetic(16) + "_al_table";
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 2d978c94b5..8d7b39ca2e 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
@@ -19,7 +19,6 @@
package org.apache.gravitino.catalog.starrocks.operations;
import static
org.apache.gravitino.catalog.jdbc.utils.JdbcConnectorUtils.escapeSqlLiteral;
-import static org.apache.gravitino.rel.Column.DEFAULT_VALUE_NOT_SET;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -609,7 +608,7 @@ public class StarRocksTableOperations extends
JdbcTableOperations {
.withName(col)
.withType(updateColumnType.getNewDataType())
.withComment(column.comment())
- .withDefaultValue(DEFAULT_VALUE_NOT_SET)
+ .withDefaultValue(column.defaultValue())
.withNullable(column.nullable())
.withAutoIncrement(column.autoIncrement())
.build();
diff --git
a/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/operation/TestStarRocksTableOperations.java
b/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/operation/TestStarRocksTableOperations.java
index 934cc425da..39763b3574 100644
---
a/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/operation/TestStarRocksTableOperations.java
+++
b/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/operation/TestStarRocksTableOperations.java
@@ -44,6 +44,7 @@ import
org.apache.gravitino.catalog.starrocks.converter.StarRocksTypeConverter;
import
org.apache.gravitino.catalog.starrocks.operations.StarRocksTablePartitionOperations;
import org.apache.gravitino.exceptions.GravitinoRuntimeException;
import org.apache.gravitino.integration.test.util.GravitinoITUtils;
+import org.apache.gravitino.rel.Column;
import org.apache.gravitino.rel.TableChange;
import org.apache.gravitino.rel.expressions.Expression;
import org.apache.gravitino.rel.expressions.NamedReference;
@@ -251,6 +252,46 @@ public class TestStarRocksTableOperations extends
TestStarRocks {
}
}
+ @Test
+ public void testAlterTableUpdateColumnTypeKeepsDefaultValue() {
+ String tableName =
GravitinoITUtils.genRandomName("starrocks_type_default_test_table");
+ JdbcColumn col_1 =
JdbcColumn.builder().withName("col_1").withType(INT).build();
+ // The wide col_2 keeps col_3 out of the default key columns, so col_3 is
a value column.
+ JdbcColumn col_2 =
JdbcColumn.builder().withName("col_2").withType(VARCHAR_255).build();
+ JdbcColumn col_3 =
+ JdbcColumn.builder()
+ .withName("col_3")
+ .withType(Types.VarCharType.of(16))
+ .withDefaultValue(Literals.of("new", Types.VarCharType.of(16)))
+ .build();
+ TABLE_OPERATIONS.create(
+ databaseName,
+ tableName,
+ new JdbcColumn[] {col_1, col_2, col_3},
+ "test_comment",
+ createProperties(),
+ null,
+ Distributions.hash(DEFAULT_BUCKET_SIZE, NamedReference.field("col_1")),
+ new Index[0]);
+
+ TABLE_OPERATIONS.alterTable(
+ databaseName,
+ tableName,
+ TableChange.updateColumnType(new String[] {col_3.name()},
Types.VarCharType.of(32)));
+
+ // StarRocks applies schema changes asynchronously.
+ Awaitility.await()
+ .atMost(MAX_WAIT_IN_SECONDS, TimeUnit.SECONDS)
+ .pollInterval(WAIT_INTERVAL_IN_SECONDS, TimeUnit.SECONDS)
+ .untilAsserted(
+ () -> {
+ Column updated = TABLE_OPERATIONS.load(databaseName,
tableName).columns()[2];
+ Assertions.assertEquals(Types.VarCharType.of(32),
updated.dataType());
+ Assertions.assertEquals(
+ Literals.of("new", Types.VarCharType.of(32)),
updated.defaultValue());
+ });
+ }
+
@Test
public void testAlterTable() {
String tableName =
GravitinoITUtils.genRandomName("starrocks_alter_test_table");