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

jshao 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 4c20f481e9 [#10380] fix(common): default ifExists when deleting table 
index (#10382)
4c20f481e9 is described below

commit 4c20f481e90edf0c23430fb293ebae107900b1e7
Author: Qi Yu <[email protected]>
AuthorDate: Thu Mar 12 20:55:17 2026 +0800

    [#10380] fix(common): default ifExists when deleting table index (#10382)
    
    ### What changes were proposed in this pull request?
    
    This PR fixes `TableUpdateRequest.DeleteTableIndexRequest` so users do
    not need to explicitly pass `ifExists`.
    
    Changes:
    - In
    
`common/src/main/java/org/apache/gravitino/dto/requests/TableUpdateRequest.java`,
    changed `DeleteTableIndexRequest.ifExists` to primitive `boolean` with
    default value `false`.
    - Kept constructor compatibility by accepting `Boolean ifExists`,
    normalizing `null` to `false`.
    - Added a regression test in
    
`common/src/test/java/org/apache/gravitino/dto/requests/TestTableUpdatesRequest.java`
    to verify deserializing `deleteTableIndex` without `ifExists` works and
    produces `ifExists=false`.
    
    ### Why are the changes needed?
    
    When `ifExists` is omitted in request payload, the previous nullable
    `Boolean` could remain null and later cause failures during table change
    construction. This fix makes the field behavior-safe and
    backward-compatible for callers that do not send `ifExists`.
    
    Fixed: #10380
    
    ### Does this PR introduce _any_ user-facing change?
    
    Yes. `deleteTableIndex` request now supports omitted `ifExists` and
    defaults it to `false` instead of failing.
    
    ### How was this patch tested?
    
    - Added/ran unit test:
    `TestTableUpdatesRequest#testOperationTableIndexRequest`.
    - Verified with:
    - `./gradlew --no-daemon :common:test --tests
    org.apache.gravitino.dto.requests.TestTableUpdatesRequest`
    
    ---------
    
    Co-authored-by: Copilot <[email protected]>
---
 .../org/apache/gravitino/dto/requests/TableUpdateRequest.java | 11 +++++++----
 .../gravitino/dto/requests/TestTableUpdatesRequest.java       | 10 ++++++++++
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git 
a/common/src/main/java/org/apache/gravitino/dto/requests/TableUpdateRequest.java
 
b/common/src/main/java/org/apache/gravitino/dto/requests/TableUpdateRequest.java
index c6e58bbd98..eb02c4cfe8 100644
--- 
a/common/src/main/java/org/apache/gravitino/dto/requests/TableUpdateRequest.java
+++ 
b/common/src/main/java/org/apache/gravitino/dto/requests/TableUpdateRequest.java
@@ -844,7 +844,10 @@ public interface TableUpdateRequest extends RESTRequest {
     }
   }
 
-  /** Represents a request to delete an index from a table. */
+  /**
+   * Represents a request to delete an index from a table. If `ifExists` is 
null, it will be treated
+   * as false, which means the request will fail if the index does not exist.
+   */
   @EqualsAndHashCode
   @ToString
   class DeleteTableIndexRequest implements TableUpdateRequest {
@@ -852,8 +855,8 @@ public interface TableUpdateRequest extends RESTRequest {
     @JsonProperty("name")
     private String name;
 
-    @JsonProperty("ifExists")
-    private Boolean ifExists;
+    @JsonProperty(value = "ifExists", defaultValue = "false")
+    private boolean ifExists;
 
     /** Default constructor for Jackson deserialization. */
     public DeleteTableIndexRequest() {}
@@ -866,7 +869,7 @@ public interface TableUpdateRequest extends RESTRequest {
      */
     public DeleteTableIndexRequest(String name, Boolean ifExists) {
       this.name = name;
-      this.ifExists = ifExists;
+      this.ifExists = ifExists != null && ifExists;
     }
 
     /**
diff --git 
a/common/src/test/java/org/apache/gravitino/dto/requests/TestTableUpdatesRequest.java
 
b/common/src/test/java/org/apache/gravitino/dto/requests/TestTableUpdatesRequest.java
index f4d5ad0fcb..6eeac4d3f9 100644
--- 
a/common/src/test/java/org/apache/gravitino/dto/requests/TestTableUpdatesRequest.java
+++ 
b/common/src/test/java/org/apache/gravitino/dto/requests/TestTableUpdatesRequest.java
@@ -26,6 +26,7 @@ import java.util.List;
 import org.apache.gravitino.dto.rel.expressions.LiteralDTO;
 import org.apache.gravitino.json.JsonUtils;
 import org.apache.gravitino.rel.TableChange;
+import org.apache.gravitino.rel.TableChange.DeleteIndex;
 import org.apache.gravitino.rel.indexes.Index;
 import org.apache.gravitino.rel.indexes.Indexes;
 import org.apache.gravitino.rel.types.Types;
@@ -308,6 +309,15 @@ public class TestTableUpdatesRequest {
     expected = 
"{\"@type\":\"deleteTableIndex\",\"name\":\"uk_2\",\"ifExists\":true}";
     Assertions.assertEquals(
         JsonUtils.objectMapper().readTree(expected), 
JsonUtils.objectMapper().readTree(jsonString));
+
+    deleteTableIndexRequest =
+        JsonUtils.objectMapper()
+            .readValue(
+                "{\"@type\":\"deleteTableIndex\",\"name\":\"uk_3\"}",
+                TableUpdateRequest.DeleteTableIndexRequest.class);
+    DeleteIndex deleteIndex = (DeleteIndex) 
deleteTableIndexRequest.tableChange();
+    Assertions.assertEquals("uk_3", deleteIndex.getName());
+    Assertions.assertFalse(deleteIndex.isIfExists());
   }
 
   @Test

Reply via email to