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

github-merge-queue[bot] pushed a commit to branch 
gh-readonly-queue/dev/pr-11684-4a6f0fe82964f430877bc8b689e2ed75883d9136
in repository https://gitbox.apache.org/repos/asf/seatunnel.git

commit 5ffbce52b185109aab525f01953d065506feaf7e
Author: zhengxiang378928908-code <[email protected]>
AuthorDate: Sat Oct 17 07:46:13 2026 +0000

    [Fix][Connector-V2] Support Dameng national character types in JDBC 
connector (#11684)
    
    Co-authored-by: zhengxiang <[email protected]>
    Co-authored-by: Claude <[email protected]>
---
 .../jdbc/internal/dialect/dm/DmdbTypeConverter.java         |  4 ++++
 .../jdbc/internal/dialect/dm/DmdbTypeConverterTest.java     | 13 +++++++++++++
 .../seatunnel/connectors/seatunnel/jdbc/JdbcDmIT.java       | 10 ++++++++++
 .../connectors/seatunnel/jdbc/JdbcDmSaveModeIT.java         |  2 ++
 .../src/test/resources/jdbc_dm_source_and_sink.conf         |  4 ++--
 5 files changed, 31 insertions(+), 2 deletions(-)

diff --git 
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/dm/DmdbTypeConverter.java
 
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/dm/DmdbTypeConverter.java
index d4d1787d53..496ad642af 100644
--- 
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/dm/DmdbTypeConverter.java
+++ 
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/dm/DmdbTypeConverter.java
@@ -68,6 +68,7 @@ public class DmdbTypeConverter implements 
TypeConverter<BasicTypeDefine> {
     public static final String DM_VARCHAR2 = "VARCHAR2";
     public static final String DM_NCHAR = "NCHAR";
     public static final String DM_NVARCHAR = "NVARCHAR";
+    public static final String DM_NVARCHAR2 = "NVARCHAR2";
     public static final String DM_LONGVARCHAR = "LONGVARCHAR";
     public static final String DM_CLOB = "CLOB";
     public static final String DM_TEXT = "TEXT";
@@ -206,6 +207,9 @@ public class DmdbTypeConverter implements 
TypeConverter<BasicTypeDefine> {
                 break;
             case DM_NCHAR:
             case DM_NVARCHAR:
+            case DM_NVARCHAR2:
+                // NVARCHAR2 is the Oracle-compatible synonym of NVARCHAR in 
Dameng, keep the
+                // declared type name so the source type round-trips unchanged.
                 builder.sourceType(String.format("%s(%s)", dmType, 
typeDefine.getLength()));
                 builder.dataType(BasicType.STRING_TYPE);
                 
builder.columnLength(TypeDefineUtils.charTo4ByteLength(typeDefine.getLength()));
diff --git 
a/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/dm/DmdbTypeConverterTest.java
 
b/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/dm/DmdbTypeConverterTest.java
index cd0c1c540e..5eb75170b0 100644
--- 
a/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/dm/DmdbTypeConverterTest.java
+++ 
b/seatunnel-connectors-v2/connector-jdbc/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/dm/DmdbTypeConverterTest.java
@@ -360,6 +360,19 @@ public class DmdbTypeConverterTest {
         Assertions.assertEquals(BasicType.STRING_TYPE, column.getDataType());
         Assertions.assertEquals(8, column.getColumnLength());
         Assertions.assertEquals(typeDefine.getColumnType(), 
column.getSourceType().toLowerCase());
+
+        typeDefine =
+                BasicTypeDefine.builder()
+                        .name("test")
+                        .columnType("nvarchar2(2)")
+                        .dataType("nvarchar2")
+                        .length(2L)
+                        .build();
+        column = DmdbTypeConverter.INSTANCE.convert(typeDefine);
+        Assertions.assertEquals(typeDefine.getName(), column.getName());
+        Assertions.assertEquals(BasicType.STRING_TYPE, column.getDataType());
+        Assertions.assertEquals(8, column.getColumnLength());
+        Assertions.assertEquals(typeDefine.getColumnType(), 
column.getSourceType().toLowerCase());
     }
 
     @Test
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-5/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcDmIT.java
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-5/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcDmIT.java
index 11d88d8b59..9355607f97 100644
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-5/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcDmIT.java
+++ 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-5/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcDmIT.java
@@ -82,8 +82,10 @@ public class JdbcDmIT extends AbstractJdbcIT {
                     + "\n"
                     + "    DM_CHAR             CHAR,\n"
                     + "    DM_CHARACTER        CHARACTER,\n"
+                    + "    DM_NCHAR            NCHAR(50),\n"
                     + "    DM_VARCHAR          VARCHAR,\n"
                     + "    DM_VARCHAR2         VARCHAR2,\n"
+                    + "    DM_NVARCHAR2        NVARCHAR2(50),\n"
                     + "    DM_TEXT             TEXT,\n"
                     + "    DM_LONG             LONG,\n"
                     + "    DM_LONGVARCHAR      LONGVARCHAR,\n"
@@ -155,8 +157,10 @@ public class JdbcDmIT extends AbstractJdbcIT {
                     "DM_DOUBLE",
                     "DM_CHAR",
                     "DM_CHARACTER",
+                    "DM_NCHAR",
                     "DM_VARCHAR",
                     "DM_VARCHAR2",
+                    "DM_NVARCHAR2",
                     "DM_TEXT",
                     "DM_LONG",
                     "DM_LONGVARCHAR",
@@ -195,8 +199,14 @@ public class JdbcDmIT extends AbstractJdbcIT {
                                 Double.parseDouble("1.1"),
                                 'f',
                                 'f',
+                                // DM_NCHAR: multi-byte content exercises the 
national
+                                // character path
+                                String.format("达梦_%s", i),
                                 String.format("f1_%s", i),
                                 String.format("f1_%s", i),
+                                // DM_NVARCHAR2: multi-byte content exercises 
the national
+                                // character path
+                                String.format("达梦_%s", i),
                                 String.format("f1_%s", i),
                                 String.format("{\"aa\":\"bb_%s\"}", i),
                                 String.format("f1_%s", i),
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-5/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcDmSaveModeIT.java
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-5/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcDmSaveModeIT.java
index 15bdecc8aa..974c844eea 100644
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-5/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcDmSaveModeIT.java
+++ 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-5/src/test/java/org/apache/seatunnel/connectors/seatunnel/jdbc/JdbcDmSaveModeIT.java
@@ -49,8 +49,10 @@ public class JdbcDmSaveModeIT extends JdbcDmIT {
                     + "\n"
                     + "    DM_CHAR             CHAR,\n"
                     + "    DM_CHARACTER        CHARACTER,\n"
+                    + "    DM_NCHAR            NCHAR(50),\n"
                     + "    DM_VARCHAR          VARCHAR,\n"
                     + "    DM_VARCHAR2         VARCHAR2,\n"
+                    + "    DM_NVARCHAR2        NVARCHAR2(50),\n"
                     + "    DM_TEXT             TEXT,\n"
                     + "    DM_LONG             LONG,\n"
                     + "    DM_LONGVARCHAR      LONGVARCHAR,\n"
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-5/src/test/resources/jdbc_dm_source_and_sink.conf
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-5/src/test/resources/jdbc_dm_source_and_sink.conf
index c2eb018230..7d9f357619 100644
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-5/src/test/resources/jdbc_dm_source_and_sink.conf
+++ 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/connector-jdbc-e2e-part-5/src/test/resources/jdbc_dm_source_and_sink.conf
@@ -41,9 +41,9 @@ sink {
     password = "SYSDBA"
     query = """
 INSERT INTO SYSDBA.e2e_table_sink (DM_BIT, DM_INT, DM_INTEGER, DM_PLS_INTEGER, 
DM_TINYINT, DM_BYTE, DM_SMALLINT, DM_BIGINT, DM_NUMERIC, DM_NUMBER,
- DM_DECIMAL, DM_DEC, DM_REAL, DM_FLOAT, DM_DOUBLE_PRECISION, DM_DOUBLE, 
DM_CHAR, DM_CHARACTER, DM_VARCHAR, DM_VARCHAR2, DM_TEXT, DM_LONG,
+ DM_DECIMAL, DM_DEC, DM_REAL, DM_FLOAT, DM_DOUBLE_PRECISION, DM_DOUBLE, 
DM_CHAR, DM_CHARACTER, DM_NCHAR, DM_VARCHAR, DM_VARCHAR2, DM_NVARCHAR2, 
DM_TEXT, DM_LONG,
  DM_LONGVARCHAR, DM_CLOB, DM_TIMESTAMP, DM_DATETIME, DM_DATE, DM_BLOB, 
DM_BINARY, DM_VARBINARY, DM_LONGVARBINARY, DM_IMAGE, DM_BFILE)
-VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 
?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
 """
   }
 }

Reply via email to