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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """ } }
