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 60240cad4b [Cherry-pick to branch-1.3] [#13343] fix(doris): handle
unknown-table error code 1109 (#13537) (#13542)
60240cad4b is described below
commit 60240cad4bf10778ca14809aa2c9ac673663051d
Author: Qi Yu <[email protected]>
AuthorDate: Mon Sep 28 14:38:10 2026 +0800
[Cherry-pick to branch-1.3] [#13343] fix(doris): handle unknown-table error
code 1109 (#13537) (#13542)
**Cherry-pick Information:**
- Original commit: 74fc836fd9be3be4ca84de32c87d338a3b53d99c (#13537)
- Target branch: `branch-1.3`
- Status: ⚠️ Resolved conflicts (test imports only)
**Conflict resolution:**
- `TestDorisTableOperationsSqlGeneration.java`: `branch-1.3` lacks the
`DorisColumnDefaultValueConverter` and `java.sql.SQLException` imports
that `main` has. Kept `DorisExceptionConverter`, added `SQLException`,
and left out the unused `DorisColumnDefaultValueConverter`.
**Testing:**
- `./gradlew :catalogs:catalog-jdbc-doris:test -PskipITs
-PskipDockerTests=true -PskipWeb=true` on `branch-1.3`: 58 tests, 0
failures, including the new 1109 converter test and DROP cases for
1051/1105/1109.
---
.../doris/converter/DorisExceptionConverter.java | 2 ++
.../converter/TestDorisExceptionConverter.java | 22 ++++++++++++
.../TestDorisTableOperationsSqlGeneration.java | 40 ++++++++++++++++++++++
3 files changed, 64 insertions(+)
diff --git
a/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisExceptionConverter.java
b/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisExceptionConverter.java
index 0c19f360aa..377150dc70 100644
---
a/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisExceptionConverter.java
+++
b/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisExceptionConverter.java
@@ -48,6 +48,7 @@ public class DorisExceptionConverter extends
JdbcExceptionConverter {
static final int CODE_UNAUTHORIZED = 1045;
static final int CODE_NO_SUCH_COLUMN = 1054;
static final int CODE_OTHER = 1105;
+ static final int CODE_UNKNOWN_TABLE = 1109;
static final int CODE_DELETE_NON_EXISTING_PARTITION = 1507;
static final int CODE_PARTITION_ALREADY_EXISTS = 1517;
static final int CODE_BUCKETS_AUTO_NOT_SUPPORTED = 1064;
@@ -112,6 +113,7 @@ public class DorisExceptionConverter extends
JdbcExceptionConverter {
case CODE_UNKNOWN_DATABASE:
return new NoSuchSchemaException(se, message);
case CODE_NO_SUCH_TABLE:
+ case CODE_UNKNOWN_TABLE:
return new NoSuchTableException(se, message);
case CODE_UNAUTHORIZED:
return new UnauthorizedException(se, message);
diff --git
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/converter/TestDorisExceptionConverter.java
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/converter/TestDorisExceptionConverter.java
index 0133a99f73..876eefde1d 100644
---
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/converter/TestDorisExceptionConverter.java
+++
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/converter/TestDorisExceptionConverter.java
@@ -23,8 +23,30 @@ import
org.apache.gravitino.exceptions.GravitinoRuntimeException;
import org.apache.gravitino.exceptions.NoSuchTableException;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
public class TestDorisExceptionConverter {
+ /**
+ * Verifies missing-table errors from both legacy and newer Doris versions.
+ *
+ * @param errorCode the JDBC error code returned by Doris
+ */
+ @ParameterizedTest
+ @ValueSource(ints = {1051, 1105, 1109})
+ public void testUnknownTableErrorCodes(int errorCode) {
+ String message =
+ "errCode = 2, detailMessage = Unknown table 'no_such_table_xyz' in
__internal_schema";
+ SQLException sqlException = new SQLException(message, "42S02", errorCode);
+
+ GravitinoRuntimeException converted =
+ new DorisExceptionConverter().toGravitinoException(sqlException);
+
+ Assertions.assertInstanceOf(NoSuchTableException.class, converted);
+ Assertions.assertEquals(message, converted.getMessage());
+ Assertions.assertSame(sqlException, converted.getCause());
+ }
+
@Test
public void testUnknownTableWithoutQuotes() {
String message = "errCode = 2, detailMessage = Unknown table
no_such_table_xyz in s_12412";
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 af1bc0dc47..ea1970fa9b 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
@@ -24,11 +24,13 @@ import static
org.apache.gravitino.catalog.doris.DorisTablePropertiesMetadata.RE
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
+import org.apache.gravitino.catalog.doris.converter.DorisExceptionConverter;
import org.apache.gravitino.catalog.doris.converter.DorisTypeConverter;
import org.apache.gravitino.catalog.jdbc.JdbcColumn;
import org.apache.gravitino.catalog.jdbc.JdbcTable;
@@ -45,6 +47,8 @@ import org.apache.gravitino.rel.indexes.Indexes;
import org.apache.gravitino.rel.types.Types;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.Mockito;
public class TestDorisTableOperationsSqlGeneration {
@@ -76,6 +80,10 @@ public class TestDorisTableOperationsSqlGeneration {
}
}
+ void setExceptionConverter(JdbcExceptionConverter converter) {
+ super.exceptionMapper = converter;
+ }
+
public void setDataSource(DataSource dataSource) {
super.dataSource = dataSource;
}
@@ -120,6 +128,38 @@ public class TestDorisTableOperationsSqlGeneration {
}
}
+ /**
+ * Verifies DROP returns false for missing-table errors from different Doris
versions.
+ *
+ * @param errorCode the JDBC error code returned by Doris
+ * @throws SQLException if setting up the mocked JDBC connection fails
+ */
+ @ParameterizedTest
+ @ValueSource(ints = {1051, 1105, 1109})
+ public void testDropMissingTableReturnsFalse(int errorCode) throws
SQLException {
+ DataSource dataSource = Mockito.mock(DataSource.class);
+ Connection connection = Mockito.mock(Connection.class);
+ Statement statement = Mockito.mock(Statement.class);
+ Mockito.when(dataSource.getConnection()).thenReturn(connection);
+ Mockito.when(connection.createStatement()).thenReturn(statement);
+ Mockito.when(statement.executeUpdate("DROP TABLE `no_such_table_xyz`"))
+ .thenThrow(
+ new SQLException(
+ "errCode = 2, detailMessage = Unknown table
'no_such_table_xyz' in test_schema",
+ "42S02",
+ errorCode));
+
+ TestableDorisTableOperations ops = new TestableDorisTableOperations();
+ ops.setDataSource(dataSource);
+ ops.setExceptionConverter(new DorisExceptionConverter());
+
+ Assertions.assertFalse(ops.drop("test_schema", "no_such_table_xyz"));
+ Mockito.verify(connection).setCatalog("test_schema");
+ Mockito.verify(statement).executeUpdate("DROP TABLE `no_such_table_xyz`");
+ Mockito.verify(statement).close();
+ Mockito.verify(connection).close();
+ }
+
@Test
public void testCreateTableWithEmptyStringDefaultValue() {
TestableDorisTableOperations ops = new TestableDorisTableOperations();