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.
:::