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();

Reply via email to