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

yuqi4733 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 55a5028a34 [#9166] fix(core): fix update comment from null (#9301)
55a5028a34 is described below

commit 55a5028a348e8bf5c2a5c885d0b063d1b9d9b4e7
Author: mchades <[email protected]>
AuthorDate: Tue Dec 2 11:23:38 2025 +0800

    [#9166] fix(core): fix update comment from null (#9301)
    
    ### What changes were proposed in this pull request?
    
    fix update comment from null
    
    ### Why are the changes needed?
    
    
    Fix: #9166
    
    ### Does this PR introduce _any_ user-facing change?
    
    no
    
    ### How was this patch tested?
    
    CI pass
    
    ---------
    
    Co-authored-by: Mini Yu <[email protected]>
---
 .../provider/base/ModelMetaBaseSQLProvider.java    |  3 +-
 .../base/ModelVersionMetaBaseSQLProvider.java      |  3 +-
 .../provider/base/SchemaMetaBaseSQLProvider.java   |  3 +-
 .../provider/base/TagMetaBaseSQLProvider.java      |  3 +-
 .../provider/base/TopicMetaBaseSQLProvider.java    |  3 +-
 .../postgresql/ModelMetaPostgreSQLProvider.java    | 28 +++++++++++++++++
 .../ModelVersionMetaPostgreSQLProvider.java        | 31 +++++++++++++++++++
 .../postgresql/SchemaMetaPostgreSQLProvider.java   | 28 +++++++++++++++++
 .../postgresql/TopicMetaPostgreSQLProvider.java    | 30 +++++++++++++++++++
 .../relational/service/TestModelMetaService.java   | 31 +++++++++++++++++++
 .../service/TestModelVersionMetaService.java       |  2 +-
 .../relational/service/TestSchemaMetaService.java  | 35 ++++++++++++++++++++++
 .../relational/service/TestTagMetaService.java     | 32 ++++++++++++++++++++
 .../relational/service/TestTopicMetaService.java   | 30 ++++++++++++++++++-
 14 files changed, 255 insertions(+), 7 deletions(-)

diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/ModelMetaBaseSQLProvider.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/ModelMetaBaseSQLProvider.java
index 29c2bfde5a..ec8e20de21 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/ModelMetaBaseSQLProvider.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/ModelMetaBaseSQLProvider.java
@@ -178,7 +178,8 @@ public class ModelMetaBaseSQLProvider {
         + " AND metalake_id = #{oldModelMeta.metalakeId}"
         + " AND catalog_id = #{oldModelMeta.catalogId}"
         + " AND schema_id = #{oldModelMeta.schemaId}"
-        + " AND model_comment = #{oldModelMeta.modelComment}"
+        + " AND (model_comment = #{oldModelMeta.modelComment}"
+        + "   OR (model_comment IS NULL and #{oldModelMeta.modelComment} IS 
NULL))"
         + " AND model_properties = #{oldModelMeta.modelProperties}"
         + " AND model_latest_version = #{oldModelMeta.modelLatestVersion}"
         + " AND audit_info = #{oldModelMeta.auditInfo}"
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/ModelVersionMetaBaseSQLProvider.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/ModelVersionMetaBaseSQLProvider.java
index ec48d1da05..858d1f043a 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/ModelVersionMetaBaseSQLProvider.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/ModelVersionMetaBaseSQLProvider.java
@@ -206,7 +206,8 @@ public class ModelVersionMetaBaseSQLProvider {
         + " AND catalog_id = #{oldModelVersionMeta.catalogId}"
         + " AND schema_id = #{oldModelVersionMeta.schemaId}"
         + " AND version = #{oldModelVersionMeta.modelVersion}"
-        + " AND model_version_comment = 
#{oldModelVersionMeta.modelVersionComment}"
+        + " AND (model_version_comment = 
#{oldModelVersionMeta.modelVersionComment}"
+        + "   OR (model_version_comment IS NULL and 
#{oldModelVersionMeta.modelVersionComment} IS NULL))"
         + " AND model_version_properties = 
#{oldModelVersionMeta.modelVersionProperties}"
         + " AND audit_info = #{oldModelVersionMeta.auditInfo}"
         + " AND deleted_at = 0";
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/SchemaMetaBaseSQLProvider.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/SchemaMetaBaseSQLProvider.java
index 5d3248174e..437c94ce15 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/SchemaMetaBaseSQLProvider.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/SchemaMetaBaseSQLProvider.java
@@ -152,7 +152,8 @@ public class SchemaMetaBaseSQLProvider {
         + " AND schema_name = #{oldSchemaMeta.schemaName}"
         + " AND metalake_id = #{oldSchemaMeta.metalakeId}"
         + " AND catalog_id = #{oldSchemaMeta.catalogId}"
-        + " AND (schema_comment IS NULL OR schema_comment = 
#{oldSchemaMeta.schemaComment})"
+        + " AND (schema_comment = #{oldSchemaMeta.schemaComment}"
+        + "   OR (schema_comment IS NULL and #{oldSchemaMeta.schemaComment} IS 
NULL))"
         + " AND properties = #{oldSchemaMeta.properties}"
         + " AND audit_info = #{oldSchemaMeta.auditInfo}"
         + " AND current_version = #{oldSchemaMeta.currentVersion}"
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TagMetaBaseSQLProvider.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TagMetaBaseSQLProvider.java
index 330b25d179..8872c379f4 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TagMetaBaseSQLProvider.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TagMetaBaseSQLProvider.java
@@ -160,7 +160,8 @@ public class TagMetaBaseSQLProvider {
         + " WHERE tag_id = #{oldTagMeta.tagId}"
         + " AND metalake_id = #{oldTagMeta.metalakeId}"
         + " AND tag_name = #{oldTagMeta.tagName}"
-        + " AND (tag_comment IS NULL OR tag_comment = #{oldTagMeta.comment})"
+        + " AND (tag_comment = #{oldTagMeta.comment}"
+        + "   OR (tag_comment IS NULL and #{oldTagMeta.comment} IS NULL))"
         + " AND properties = #{oldTagMeta.properties}"
         + " AND audit_info = #{oldTagMeta.auditInfo}"
         + " AND current_version = #{oldTagMeta.currentVersion}"
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TopicMetaBaseSQLProvider.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TopicMetaBaseSQLProvider.java
index 797ab4ba1d..2f609f7370 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TopicMetaBaseSQLProvider.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TopicMetaBaseSQLProvider.java
@@ -151,7 +151,8 @@ public class TopicMetaBaseSQLProvider {
         + " AND metalake_id = #{oldTopicMeta.metalakeId}"
         + " AND catalog_id = #{oldTopicMeta.catalogId}"
         + " AND schema_id = #{oldTopicMeta.schemaId}"
-        + " AND comment = #{oldTopicMeta.comment}"
+        + " AND (comment = #{oldTopicMeta.comment}"
+        + "   OR (comment IS NULL and #{oldTopicMeta.comment} IS NULL))"
         + " AND properties = #{oldTopicMeta.properties}"
         + " AND audit_info = #{oldTopicMeta.auditInfo}"
         + " AND current_version = #{oldTopicMeta.currentVersion}"
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/ModelMetaPostgreSQLProvider.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/ModelMetaPostgreSQLProvider.java
index 1ea7afd880..ea106d5d05 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/ModelMetaPostgreSQLProvider.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/ModelMetaPostgreSQLProvider.java
@@ -89,4 +89,32 @@ public class ModelMetaPostgreSQLProvider extends 
ModelMetaBaseSQLProvider {
         + ModelMetaMapper.TABLE_NAME
         + " WHERE deleted_at > 0 AND deleted_at < #{legacyTimeline} LIMIT 
#{limit})";
   }
+
+  @Override
+  public String updateModelMeta(
+      @Param("newModelMeta") ModelPO newModelPO, @Param("oldModelMeta") 
ModelPO oldModelPO) {
+    return "UPDATE "
+        + ModelMetaMapper.TABLE_NAME
+        + " SET model_name = #{newModelMeta.modelName},"
+        + " metalake_id = #{newModelMeta.metalakeId},"
+        + " catalog_id = #{newModelMeta.catalogId},"
+        + " schema_id = #{newModelMeta.schemaId},"
+        + " model_comment = #{newModelMeta.modelComment},"
+        + " model_properties = #{newModelMeta.modelProperties},"
+        + " model_latest_version = #{newModelMeta.modelLatestVersion},"
+        + " audit_info = #{newModelMeta.auditInfo},"
+        + " deleted_at = #{newModelMeta.deletedAt}"
+        + " WHERE model_id = #{oldModelMeta.modelId}"
+        + " AND model_name = #{oldModelMeta.modelName}"
+        + " AND metalake_id = #{oldModelMeta.metalakeId}"
+        + " AND catalog_id = #{oldModelMeta.catalogId}"
+        + " AND schema_id = #{oldModelMeta.schemaId}"
+        + " AND (model_comment = #{oldModelMeta.modelComment}"
+        + "   OR (CAST(model_comment AS VARCHAR) IS NULL"
+        + "   AND CAST(#{oldModelMeta.modelComment} AS VARCHAR) IS NULL))"
+        + " AND model_properties = #{oldModelMeta.modelProperties}"
+        + " AND model_latest_version = #{oldModelMeta.modelLatestVersion}"
+        + " AND audit_info = #{oldModelMeta.auditInfo}"
+        + " AND deleted_at = 0";
+  }
 }
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/ModelVersionMetaPostgreSQLProvider.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/ModelVersionMetaPostgreSQLProvider.java
index 00ae16c503..d67767ed8e 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/ModelVersionMetaPostgreSQLProvider.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/ModelVersionMetaPostgreSQLProvider.java
@@ -22,6 +22,7 @@ import 
org.apache.gravitino.storage.relational.mapper.ModelMetaMapper;
 import 
org.apache.gravitino.storage.relational.mapper.ModelVersionAliasRelMapper;
 import org.apache.gravitino.storage.relational.mapper.ModelVersionMetaMapper;
 import 
org.apache.gravitino.storage.relational.mapper.provider.base.ModelVersionMetaBaseSQLProvider;
+import org.apache.gravitino.storage.relational.po.ModelVersionPO;
 import org.apache.ibatis.annotations.Param;
 
 public class ModelVersionMetaPostgreSQLProvider extends 
ModelVersionMetaBaseSQLProvider {
@@ -94,4 +95,34 @@ public class ModelVersionMetaPostgreSQLProvider extends 
ModelVersionMetaBaseSQLP
         + ModelMetaMapper.TABLE_NAME
         + " WHERE deleted_at > 0 AND deleted_at < #{legacyTimeline} LIMIT 
#{limit})";
   }
+
+  @Override
+  public String updateModelVersionMeta(
+      @Param("newModelVersionMeta") ModelVersionPO newModelVersionPO,
+      @Param("oldModelVersionMeta") ModelVersionPO oldModelVersionPO) {
+
+    return "UPDATE "
+        + ModelVersionMetaMapper.TABLE_NAME
+        + " SET"
+        + " metalake_id = #{newModelVersionMeta.metalakeId},"
+        + " catalog_id = #{newModelVersionMeta.catalogId},"
+        + " schema_id = #{newModelVersionMeta.schemaId},"
+        + " model_id = #{newModelVersionMeta.modelId},"
+        + " version = #{newModelVersionMeta.modelVersion},"
+        + " model_version_comment = 
#{newModelVersionMeta.modelVersionComment},"
+        + " model_version_properties = 
#{newModelVersionMeta.modelVersionProperties},"
+        + " audit_info = #{newModelVersionMeta.auditInfo},"
+        + " deleted_at = #{newModelVersionMeta.deletedAt}"
+        + " WHERE model_id = #{oldModelVersionMeta.modelId}"
+        + " AND metalake_id = #{oldModelVersionMeta.metalakeId}"
+        + " AND catalog_id = #{oldModelVersionMeta.catalogId}"
+        + " AND schema_id = #{oldModelVersionMeta.schemaId}"
+        + " AND version = #{oldModelVersionMeta.modelVersion}"
+        + " AND (model_version_comment = 
#{oldModelVersionMeta.modelVersionComment}"
+        + "   OR (CAST(model_version_comment AS VARCHAR) IS NULL"
+        + "   AND CAST(#{oldModelVersionMeta.modelVersionComment} AS VARCHAR) 
IS NULL))"
+        + " AND model_version_properties = 
#{oldModelVersionMeta.modelVersionProperties}"
+        + " AND audit_info = #{oldModelVersionMeta.auditInfo}"
+        + " AND deleted_at = 0";
+  }
 }
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/SchemaMetaPostgreSQLProvider.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/SchemaMetaPostgreSQLProvider.java
index 7cd6bf3903..1e23111c3f 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/SchemaMetaPostgreSQLProvider.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/SchemaMetaPostgreSQLProvider.java
@@ -56,6 +56,34 @@ public class SchemaMetaPostgreSQLProvider extends 
SchemaMetaBaseSQLProvider {
         + " deleted_at = #{schemaMeta.deletedAt}";
   }
 
+  @Override
+  public String updateSchemaMeta(
+      @Param("newSchemaMeta") SchemaPO newSchemaPO, @Param("oldSchemaMeta") 
SchemaPO oldSchemaPO) {
+    return "UPDATE "
+        + TABLE_NAME
+        + " SET schema_name = #{newSchemaMeta.schemaName},"
+        + " metalake_id = #{newSchemaMeta.metalakeId},"
+        + " catalog_id = #{newSchemaMeta.catalogId},"
+        + " schema_comment = #{newSchemaMeta.schemaComment},"
+        + " properties = #{newSchemaMeta.properties},"
+        + " audit_info = #{newSchemaMeta.auditInfo},"
+        + " current_version = #{newSchemaMeta.currentVersion},"
+        + " last_version = #{newSchemaMeta.lastVersion},"
+        + " deleted_at = #{newSchemaMeta.deletedAt}"
+        + " WHERE schema_id = #{oldSchemaMeta.schemaId}"
+        + " AND schema_name = #{oldSchemaMeta.schemaName}"
+        + " AND metalake_id = #{oldSchemaMeta.metalakeId}"
+        + " AND catalog_id = #{oldSchemaMeta.catalogId}"
+        + " AND (schema_comment = #{oldSchemaMeta.schemaComment}"
+        + "   OR (CAST(schema_comment AS VARCHAR) IS NULL"
+        + "   AND CAST(#{oldSchemaMeta.schemaComment} AS VARCHAR) IS NULL))"
+        + " AND properties = #{oldSchemaMeta.properties}"
+        + " AND audit_info = #{oldSchemaMeta.auditInfo}"
+        + " AND current_version = #{oldSchemaMeta.currentVersion}"
+        + " AND last_version = #{oldSchemaMeta.lastVersion}"
+        + " AND deleted_at = 0";
+  }
+
   @Override
   public String softDeleteSchemaMetasBySchemaId(Long schemaId) {
     return "UPDATE "
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/TopicMetaPostgreSQLProvider.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/TopicMetaPostgreSQLProvider.java
index 970b2d1b2f..fb78114c4f 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/TopicMetaPostgreSQLProvider.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/TopicMetaPostgreSQLProvider.java
@@ -26,6 +26,36 @@ import org.apache.ibatis.annotations.Param;
 
 public class TopicMetaPostgreSQLProvider extends TopicMetaBaseSQLProvider {
 
+  @Override
+  public String updateTopicMeta(
+      @Param("newTopicMeta") TopicPO newTopicPO, @Param("oldTopicMeta") 
TopicPO oldTopicPO) {
+    return "UPDATE "
+        + TABLE_NAME
+        + " SET topic_name = #{newTopicMeta.topicName},"
+        + " metalake_id = #{newTopicMeta.metalakeId},"
+        + " catalog_id = #{newTopicMeta.catalogId},"
+        + " schema_id = #{newTopicMeta.schemaId},"
+        + " comment = #{newTopicMeta.comment},"
+        + " properties = #{newTopicMeta.properties},"
+        + " audit_info = #{newTopicMeta.auditInfo},"
+        + " current_version = #{newTopicMeta.currentVersion},"
+        + " last_version = #{newTopicMeta.lastVersion},"
+        + " deleted_at = #{newTopicMeta.deletedAt}"
+        + " WHERE topic_id = #{oldTopicMeta.topicId}"
+        + " AND topic_name = #{oldTopicMeta.topicName}"
+        + " AND metalake_id = #{oldTopicMeta.metalakeId}"
+        + " AND catalog_id = #{oldTopicMeta.catalogId}"
+        + " AND schema_id = #{oldTopicMeta.schemaId}"
+        + " AND (comment = #{oldTopicMeta.comment}"
+        + "   OR (CAST(comment AS VARCHAR) IS NULL"
+        + "   AND CAST(#{oldTopicMeta.comment} AS VARCHAR) IS NULL))"
+        + " AND properties = #{oldTopicMeta.properties}"
+        + " AND audit_info = #{oldTopicMeta.auditInfo}"
+        + " AND current_version = #{oldTopicMeta.currentVersion}"
+        + " AND last_version = #{oldTopicMeta.lastVersion}"
+        + " AND deleted_at = 0";
+  }
+
   @Override
   public String softDeleteTopicMetasByTopicId(Long topicId) {
     return "UPDATE "
diff --git 
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestModelMetaService.java
 
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestModelMetaService.java
index cfc9eb1549..c1b85ccfe2 100644
--- 
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestModelMetaService.java
+++ 
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestModelMetaService.java
@@ -322,6 +322,37 @@ public class TestModelMetaService extends TestJDBCBackend {
         () ->
             ModelMetaService.getInstance()
                 .updateModel(NameIdentifier.of(MODEL_NS, "model3"), 
renameUpdater));
+
+    // test update model comment from null
+    ModelEntity modelEntity4 =
+        createModelEntity(
+            RandomIdGenerator.INSTANCE.nextId(),
+            MODEL_NS,
+            "model4",
+            "model4 comment",
+            0,
+            properties,
+            AUDIT_INFO);
+    ModelMetaService.getInstance().insertModel(modelEntity4, false);
+
+    ModelMetaService.getInstance()
+        .updateModel(
+            modelEntity4.nameIdentifier(),
+            entity -> {
+              ModelEntity model = (ModelEntity) entity;
+              return ModelEntity.builder()
+                  .withId(model.id())
+                  .withName(model.name())
+                  .withNamespace(model.namespace())
+                  .withComment("model comment updated")
+                  .withLatestVersion(model.latestVersion())
+                  .withProperties(model.properties())
+                  .withAuditInfo(model.auditInfo())
+                  .build();
+            });
+    ModelEntity updatedModel4 =
+        
ModelMetaService.getInstance().getModelByIdentifier(modelEntity4.nameIdentifier());
+    Assertions.assertEquals("model comment updated", updatedModel4.comment());
   }
 
   @TestTemplate
diff --git 
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestModelVersionMetaService.java
 
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestModelVersionMetaService.java
index 14aebe26fd..c3fe11c98c 100644
--- 
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestModelVersionMetaService.java
+++ 
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestModelVersionMetaService.java
@@ -586,7 +586,7 @@ public class TestModelVersionMetaService extends 
TestJDBCBackend {
 
     Map<String, String> properties = ImmutableMap.of("k1", "v1");
     String modelName = randomModelName();
-    String modelComment = "model1 comment";
+    String modelComment = null;
     String modelVersionUri = "S3://test/path/to/model/version";
     List<String> modelVersionAliases = ImmutableList.of("alias1", "alias2");
     String modelVersionComment = "test comment";
diff --git 
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestSchemaMetaService.java
 
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestSchemaMetaService.java
index 5525962c52..799a21432f 100644
--- 
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestSchemaMetaService.java
+++ 
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestSchemaMetaService.java
@@ -32,6 +32,7 @@ import org.apache.gravitino.storage.RandomIdGenerator;
 import org.apache.gravitino.storage.relational.TestJDBCBackend;
 import org.apache.gravitino.utils.NameIdentifierUtil;
 import org.apache.gravitino.utils.NamespaceUtil;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.TestTemplate;
 
 public class TestSchemaMetaService extends TestJDBCBackend {
@@ -89,6 +90,40 @@ public class TestSchemaMetaService extends TestJDBCBackend {
                         schemaCopy.id(), schemaCopy.namespace(), "schema", 
AUDIT_INFO)));
   }
 
+  @TestTemplate
+  public void testUpdateSchemaCommentFromNull() throws IOException {
+    createAndInsertMakeLake(metalakeName);
+    createAndInsertCatalog(metalakeName, catalogName);
+
+    SchemaMetaService schemaMetaService = SchemaMetaService.getInstance();
+    SchemaEntity schemaEntity =
+        SchemaEntity.builder()
+            .withId(RandomIdGenerator.INSTANCE.nextId())
+            .withName("schema_null_comment")
+            .withNamespace(NamespaceUtil.ofSchema(metalakeName, catalogName))
+            .withAuditInfo(AUDIT_INFO)
+            .build();
+    schemaMetaService.insertSchema(schemaEntity, false);
+
+    schemaMetaService.updateSchema(
+        schemaEntity.nameIdentifier(),
+        entity -> {
+          SchemaEntity schema = (SchemaEntity) entity;
+          return SchemaEntity.builder()
+              .withId(schema.id())
+              .withName(schema.name())
+              .withNamespace(schema.namespace())
+              .withComment("schema comment updated")
+              .withProperties(schema.properties())
+              .withAuditInfo(schema.auditInfo())
+              .build();
+        });
+
+    SchemaEntity updatedSchema =
+        schemaMetaService.getSchemaByIdentifier(schemaEntity.nameIdentifier());
+    Assertions.assertEquals("schema comment updated", updatedSchema.comment());
+  }
+
   @TestTemplate
   public void testMetaLifeCycleFromCreationToDeletion() throws IOException {
     createAndInsertMakeLake(metalakeName);
diff --git 
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestTagMetaService.java
 
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestTagMetaService.java
index 0642af1ce5..365d7081bf 100644
--- 
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestTagMetaService.java
+++ 
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestTagMetaService.java
@@ -174,6 +174,38 @@ public class TestTagMetaService extends TestJDBCBackend {
     Assertions.assertEquals(tagEntity2, resultTagEntity2);
   }
 
+  @TestTemplate
+  public void testUpdateTagCommentFromNull() throws IOException {
+    createAndInsertMakeLake(METALAKE_NAME);
+
+    TagMetaService tagMetaService = TagMetaService.getInstance();
+    TagEntity tagEntity =
+        TagEntity.builder()
+            .withId(RandomIdGenerator.INSTANCE.nextId())
+            .withName("tag_null_comment")
+            .withNamespace(NamespaceUtil.ofTag(METALAKE_NAME))
+            .withAuditInfo(AUDIT_INFO)
+            .build();
+    tagMetaService.insertTag(tagEntity, false);
+
+    tagMetaService.updateTag(
+        tagEntity.nameIdentifier(),
+        entity -> {
+          TagEntity tag = (TagEntity) entity;
+          return TagEntity.builder()
+              .withId(tag.id())
+              .withName(tag.name())
+              .withNamespace(tag.namespace())
+              .withComment("updated tag comment")
+              .withProperties(tag.properties())
+              .withAuditInfo(tag.auditInfo())
+              .build();
+        });
+
+    TagEntity updatedTag = 
tagMetaService.getTagByIdentifier(tagEntity.nameIdentifier());
+    Assertions.assertEquals("updated tag comment", updatedTag.comment());
+  }
+
   @TestTemplate
   public void testCreateAndListTags() throws IOException {
     createAndInsertMakeLake(METALAKE_NAME);
diff --git 
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestTopicMetaService.java
 
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestTopicMetaService.java
index 7f4a263e8c..14a1cdcf80 100644
--- 
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestTopicMetaService.java
+++ 
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestTopicMetaService.java
@@ -32,6 +32,7 @@ import org.apache.gravitino.storage.RandomIdGenerator;
 import org.apache.gravitino.storage.relational.TestJDBCBackend;
 import org.apache.gravitino.utils.NameIdentifierUtil;
 import org.apache.gravitino.utils.NamespaceUtil;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.TestTemplate;
 
@@ -93,7 +94,34 @@ public class TestTopicMetaService extends TestJDBCBackend {
   }
 
   @TestTemplate
-  public void testUpdateAlreadyExistsException() throws IOException {
+  public void testUpdateTopic() throws IOException {
+    TopicEntity topicWithNullComment =
+        TopicEntity.builder()
+            .withId(RandomIdGenerator.INSTANCE.nextId())
+            .withName("test_null")
+            .withNamespace(NamespaceUtil.ofFileset(metalakeName, catalogName, 
schemaName))
+            .withComment(null)
+            .withProperties(null)
+            .withAuditInfo(AUDIT_INFO)
+            .build();
+    backend.insert(topicWithNullComment, false);
+    backend.update(
+        topicWithNullComment.nameIdentifier(),
+        Entity.EntityType.TOPIC,
+        e ->
+            TopicEntity.builder()
+                .withId(topicWithNullComment.id())
+                .withName(topicWithNullComment.name())
+                .withNamespace(topicWithNullComment.namespace())
+                .withComment("now has comment")
+                .withProperties(topicWithNullComment.properties())
+                .withAuditInfo(AUDIT_INFO)
+                .build());
+    TopicEntity updatedTopic =
+        backend.get(topicWithNullComment.nameIdentifier(), 
Entity.EntityType.TOPIC);
+    Assertions.assertEquals("now has comment", updatedTopic.comment());
+
+    // test topic already exists exception
     TopicEntity topic =
         createTopicEntity(
             RandomIdGenerator.INSTANCE.nextId(),

Reply via email to