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

yuqi1129 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 fa7261a500 [Cherry-pick to branch-1.3] [#13918] fix(doris): Reject 
adding auto-increment columns (#13919) (#13921)
fa7261a500 is described below

commit fa7261a5004610c7ea60b45863924dea89d7499c
Author: Qi Yu <[email protected]>
AuthorDate: Tue Oct 20 09:38:52 2026 +0800

    [Cherry-pick to branch-1.3] [#13918] fix(doris): Reject adding 
auto-increment columns (#13919) (#13921)
    
    Cherry-pick Information:
    
    Original PR: #13919 ([#13918] fix(doris): Reject adding auto-increment
    columns)
    Tracking issue: #13918
    Target branch: branch-1.3
    Status: ⚠️ Conflict resolved in tests only (main source and docs applied
    cleanly)
    
    Draft until #13919 is merged. Opened in parallel so the fix can land in
    1.3.
    
    Conflict resolution: merged the latest `branch-1.3`, retaining both the
    auto-increment rejection test and all default-value compatibility tests
    now present on the target branch.
    
    ### What changes were proposed in this pull request?
    
    - `DorisTableOperations`: reject an `AddColumn` change that sets
    `autoIncrement` with an `IllegalArgumentException`, instead of silently
    dropping the flag.
    - Document in `jdbc-doris-catalog.md` that auto-increment columns can
    only be defined at table creation.
    
    ### Why are the changes needed?
    
    The add-column SQL ignored `isAutoIncrement()`, so the request succeeded
    without auto-increment. Emitting `AUTO_INCREMENT` is not an option:
    
    - Doris 2.1.5+ and 3.0.1+ reject it.
    - Earlier 2.1.x and 3.0.0 accept it, but never generate values for the
    added column (verified on Doris 2.1.0).
    
    Fix: #13918
    
    ### Does this PR introduce _any_ user-facing change?
    
    Yes. Adding a column with `autoIncrement = true` to a Doris table now
    fails with `Doris does not support adding auto-increment column ...`,
    where it previously succeeded without auto-increment.
    
    ### How was this patch tested?
    
    - New unit test
    
`TestDorisTableOperationsSqlGeneration.testAddAutoIncrementColumnIsRejected`.
    - `./gradlew :catalogs:catalog-jdbc-doris:test -PskipITs`
    - Checked the Doris behavior manually against
    `apache/doris:doris-all-in-one-2.1.0`.
    
    
    - After merging the latest `branch-1.3`: Doris non-Docker suite passed
    (77 tests), along with Spotless checks.
---
 .../doris/operation/DorisTableOperations.java      |  9 ++++++++
 .../TestDorisTableOperationsSqlGeneration.java     | 24 ++++++++++++++++++++++
 docs/jdbc-doris-catalog.md                         |  2 ++
 3 files changed, 35 insertions(+)

diff --git 
a/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/operation/DorisTableOperations.java
 
b/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/operation/DorisTableOperations.java
index ed0c895f95..0f2876948d 100644
--- 
a/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/operation/DorisTableOperations.java
+++ 
b/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/operation/DorisTableOperations.java
@@ -956,6 +956,15 @@ public class DorisTableOperations extends 
JdbcTableOperations {
       throw new UnsupportedOperationException("Doris does not support nested 
column names.");
     }
     String col = addColumn.fieldName()[0];
+    // Doris 2.1.5+ and 3.0.1+ reject ADD COLUMN ... AUTO_INCREMENT. Earlier 
2.1.x and 3.0.0 accept
+    // it and record the flag, but never generate values for the added column.
+    if (addColumn.isAutoIncrement()) {
+      throw new IllegalArgumentException(
+          String.format(
+              "Doris does not support adding auto-increment column `%s`; "
+                  + "define auto-increment columns when creating the table",
+              col));
+    }
 
     StringBuilder columnDefinition = new StringBuilder();
     columnDefinition
diff --git 
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/operation/TestDorisTableOperationsSqlGeneration.java
 
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/operation/TestDorisTableOperationsSqlGeneration.java
index fff6444793..3aa83591c0 100644
--- 
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/operation/TestDorisTableOperationsSqlGeneration.java
+++ 
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/operation/TestDorisTableOperationsSqlGeneration.java
@@ -250,6 +250,30 @@ public class TestDorisTableOperationsSqlGeneration {
     Assertions.assertTrue(alterSql.contains("COMMENT 'owner\\\\''s 
\"comment\"; --'"), alterSql);
   }
 
+  @Test
+  public void testAddAutoIncrementColumnIsRejected() {
+    TestableDorisTableOperations ops = new TestableDorisTableOperations();
+
+    IllegalArgumentException exception =
+        Assertions.assertThrows(
+            IllegalArgumentException.class,
+            () ->
+                ops.alterTableSql(
+                    "test_table",
+                    TableChange.addColumn(
+                        new String[] {"id"},
+                        Types.LongType.get(),
+                        null,
+                        TableChange.ColumnPosition.defaultPos(),
+                        false,
+                        true)));
+
+    Assertions.assertEquals(
+        "Doris does not support adding auto-increment column `id`; "
+            + "define auto-increment columns when creating the table",
+        exception.getMessage());
+  }
+
   @Test
   public void testAddColumnDefaultValuesInGeneratedSql() {
     TestableDorisTableOperations ops = new TestableDorisTableOperations();
diff --git a/docs/jdbc-doris-catalog.md b/docs/jdbc-doris-catalog.md
index b230dc6b64..47bf6e02aa 100644
--- a/docs/jdbc-doris-catalog.md
+++ b/docs/jdbc-doris-catalog.md
@@ -180,6 +180,8 @@ Doris enforces the following constraints (violations are 
rejected by the Doris s
 - The auto-increment column must be `BIGINT NOT NULL` with no `DEFAULT` value.
 - Each table can have at most one auto-increment column.
 
+An auto-increment column can only be defined when the table is created. 
Gravitino rejects adding one with `alterTable`.
+
 :::note
 Gravitino currently supports creating `UNIQUE KEY` tables via the `UNIQUE_KEY` 
index type. To create a `DUPLICATE KEY` table, omit key indexes from the table 
definition — Doris defaults to the DUPLICATE model when no key is specified.
 :::

Reply via email to